From cce93e4b226012d5eebcf7f7bd01cde8a8a07f51 Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Wed, 15 Dec 1982 01:22:17 -0800 Subject: [PATCH] typed mbufs SCCS-vsn: sys/kern/kern_proc.c 4.51 SCCS-vsn: sys/kern/uipc_syscalls.c 4.38 SCCS-vsn: sys/kern/uipc_mbuf.c 1.41 SCCS-vsn: sys/kern/uipc_socket.c 4.66 SCCS-vsn: sys/kern/uipc_socket2.c 4.32 SCCS-vsn: sys/kern/uipc_usrreq.c 1.5 SCCS-vsn: sys/net/raw_cb.c 4.15 SCCS-vsn: sys/net/raw_usrreq.c 4.23 SCCS-vsn: sys/net/route.c 4.14 SCCS-vsn: sys/netinet/in_pcb.c 4.37 SCCS-vsn: sys/netinet/ip_icmp.c 4.26 SCCS-vsn: sys/netinet/ip_input.c 1.59 SCCS-vsn: sys/netinet/raw_ip.c 4.16 SCCS-vsn: sys/netinet/tcp_input.c 1.83 SCCS-vsn: sys/netinet/tcp_output.c 4.49 SCCS-vsn: sys/netinet/tcp_subr.c 4.36 SCCS-vsn: sys/netinet/udp_usrreq.c 4.41 SCCS-vsn: sys/deprecated/netimp/if_imp.c 4.45 SCCS-vsn: sys/deprecated/netimp/if_imphost.c 4.16 SCCS-vsn: sys/sys/mbuf.h 4.16 SCCS-vsn: sys/vax/if/if_ec.c 4.30 SCCS-vsn: sys/vax/if/if_en.c 4.74 SCCS-vsn: sys/vax/if/if_il.c 4.15 SCCS-vsn: sys/vax/if/if_uba.c 4.15 SCCS-vsn: sys/vax/if/if_vv.c 4.10 --- usr/src/sys/deprecated/netimp/if_imp.c | 6 ++-- usr/src/sys/deprecated/netimp/if_imphost.c | 4 +-- usr/src/sys/kern/kern_proc.c | 4 +-- usr/src/sys/kern/uipc_mbuf.c | 31 ++++++++-------- usr/src/sys/kern/uipc_socket.c | 8 ++--- usr/src/sys/kern/uipc_socket2.c | 6 ++-- usr/src/sys/kern/uipc_syscalls.c | 10 +++--- usr/src/sys/kern/uipc_usrreq.c | 4 +-- usr/src/sys/net/raw_cb.c | 4 +-- usr/src/sys/net/raw_usrreq.c | 4 +-- usr/src/sys/net/route.c | 4 +-- usr/src/sys/netinet/in_pcb.c | 4 +-- usr/src/sys/netinet/ip_icmp.c | 4 +-- usr/src/sys/netinet/ip_input.c | 6 ++-- usr/src/sys/netinet/raw_ip.c | 4 +-- usr/src/sys/netinet/tcp_input.c | 6 ++-- usr/src/sys/netinet/tcp_output.c | 6 ++-- usr/src/sys/netinet/tcp_subr.c | 8 ++--- usr/src/sys/netinet/udp_usrreq.c | 4 +-- usr/src/sys/sys/mbuf.h | 41 +++++++++++++++------- usr/src/sys/vax/if/if_ec.c | 6 ++-- usr/src/sys/vax/if/if_en.c | 4 +-- usr/src/sys/vax/if/if_il.c | 4 +-- usr/src/sys/vax/if/if_uba.c | 4 +-- usr/src/sys/vax/if/if_vv.c | 6 ++-- 25 files changed, 106 insertions(+), 86 deletions(-) diff --git a/usr/src/sys/deprecated/netimp/if_imp.c b/usr/src/sys/deprecated/netimp/if_imp.c index b62e21075c..0767502bb5 100644 --- a/usr/src/sys/deprecated/netimp/if_imp.c +++ b/usr/src/sys/deprecated/netimp/if_imp.c @@ -1,4 +1,4 @@ -/* if_imp.c 4.44 82/10/31 */ +/* if_imp.c 4.45 82/12/14 */ #include "imp.h" #if NIMP > 0 @@ -451,7 +451,7 @@ impoutput(ifp, m0, dst) */ if (m->m_off > MMAXOFF || MMINOFF + sizeof(struct imp_leader) > m->m_off) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto drop; @@ -571,7 +571,7 @@ impnoops(sc) sc->imp_dropcnt = IMP_DROPCNT; for (i = 0; i < IMP_DROPCNT + 1; i++ ) { - if ((m = m_getclr(M_DONTWAIT)) == 0) + if ((m = m_getclr(M_DONTWAIT, MT_HEADER)) == 0) return; m->m_len = sizeof(struct control_leader); cp = mtod(m, struct control_leader *); diff --git a/usr/src/sys/deprecated/netimp/if_imphost.c b/usr/src/sys/deprecated/netimp/if_imphost.c index 8a45e22a12..d4a8d362e6 100644 --- a/usr/src/sys/deprecated/netimp/if_imphost.c +++ b/usr/src/sys/deprecated/netimp/if_imphost.c @@ -1,4 +1,4 @@ -/* if_imphost.c 4.15 82/10/09 */ +/* if_imphost.c 4.16 82/12/14 */ #include "imp.h" #if NIMP > 0 @@ -80,7 +80,7 @@ hostenter(addr) * chain of mbuf's, allocate another. */ if (hp0 == 0) { - m = m_getclr(M_DONTWAIT); + m = m_getclr(M_DONTWAIT, MT_HTABLE); if (m == 0) { splx(s); return (0); diff --git a/usr/src/sys/kern/kern_proc.c b/usr/src/sys/kern/kern_proc.c index 865224e086..f8347bd38e 100644 --- a/usr/src/sys/kern/kern_proc.c +++ b/usr/src/sys/kern/kern_proc.c @@ -1,4 +1,4 @@ -/* kern_proc.c 4.50 82/12/09 */ +/* kern_proc.c 4.51 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -544,7 +544,7 @@ exit(rv) register int i; register struct proc *p, *q; register int x; - struct mbuf *m = m_getclr(M_WAIT); + struct mbuf *m = m_getclr(M_WAIT, MT_ZOMBIE); #ifdef PGINPROF vmsizmon(); diff --git a/usr/src/sys/kern/uipc_mbuf.c b/usr/src/sys/kern/uipc_mbuf.c index f234bbf243..a42f5eb176 100644 --- a/usr/src/sys/kern/uipc_mbuf.c +++ b/usr/src/sys/kern/uipc_mbuf.c @@ -1,4 +1,4 @@ -/* uipc_mbuf.c 1.40 82/10/21 */ +/* uipc_mbuf.c 1.41 82/12/14 */ #include "../h/param.h" #include "../h/dir.h" @@ -61,7 +61,8 @@ m_clalloc(ncl, how) case MPG_MBUFS: for (i = ncl * CLBYTES / sizeof (*m); i > 0; i--) { m->m_off = 0; - m->m_free = 0; + m->m_type = MT_DATA; + mbstat.m_mtypes[MT_DATA]++; mbstat.m_mbufs++; (void) m_free(m); m++; @@ -100,22 +101,22 @@ steal: * for critical paths. */ struct mbuf * -m_get(canwait) - int canwait; +m_get(canwait, type) + int canwait, type; { register struct mbuf *m; - MGET(m, canwait); + MGET(m, canwait, type); return (m); } struct mbuf * -m_getclr(canwait) - int canwait; +m_getclr(canwait, type) + int canwait, type; { register struct mbuf *m; - m = m_get(canwait); + m = m_get(canwait, type); if (m == 0) return (0); bzero(mtod(m, caddr_t), MLEN); @@ -134,8 +135,8 @@ m_free(m) /*ARGSUSED*/ struct mbuf * -m_more(type) - int type; +m_more(canwait, type) + int canwait, type; { register struct mbuf *m; @@ -143,8 +144,8 @@ m_more(type) mbstat.m_drops++; return (NULL); } -#define m_more(x) (panic("m_more"), (struct mbuf *)0) - MGET(m, type); +#define m_more(x,y) (panic("m_more"), (struct mbuf *)0) + MGET(m, canwait, type); #undef m_more return (m); } @@ -175,11 +176,13 @@ m_copy(m, off, len) { register struct mbuf *n, **np; struct mbuf *top, *p; + int type; if (len == 0) return (0); if (off < 0 || len < 0) panic("m_copy"); + type = m->m_type; while (off > 0) { if (m == 0) panic("m_copy"); @@ -196,7 +199,7 @@ m_copy(m, off, len) panic("m_copy"); break; } - MGET(n, 1); + MGET(n, M_WAIT, type); *np = n; if (n == 0) goto nospace; @@ -291,7 +294,7 @@ m_pullup(m0, len) n = m0; if (len > MLEN) goto bad; - MGET(m, M_DONTWAIT); + MGET(m, M_DONTWAIT, n->m_type); if (m == 0) goto bad; m->m_len = 0; diff --git a/usr/src/sys/kern/uipc_socket.c b/usr/src/sys/kern/uipc_socket.c index 249dd4fde0..8733ca1ce7 100644 --- a/usr/src/sys/kern/uipc_socket.c +++ b/usr/src/sys/kern/uipc_socket.c @@ -1,4 +1,4 @@ -/* uipc_socket.c 4.65 82/12/05 */ +/* uipc_socket.c 4.66 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -44,7 +44,7 @@ socreate(dom, aso, type, proto, opt) return (EPROTONOSUPPORT); if (prp->pr_type != type) return (EPROTOTYPE); - m = m_getclr(M_WAIT); + m = m_getclr(M_WAIT, MT_SOCKET); if (m == 0) return (ENOBUFS); so = mtod(m, struct socket *); @@ -330,7 +330,7 @@ again: panic("sosend"); continue; } - MGET(m, 1); + MGET(m, M_WAIT, MT_DATA); if (m == NULL) { error = ENOBUFS; /* SIGPIPE? */ goto release; @@ -375,7 +375,7 @@ soreceive(so, aname, uio, flags) int eor, s, error = 0, moff, tomark; if (flags & SOF_OOB) { - m = m_get(M_WAIT); + m = m_get(M_WAIT, MT_DATA); error = (*so->so_proto->pr_usrreq)(so, PRU_RCVOOB, m, (struct mbuf *)0, (struct socketopt *)0); if (error) diff --git a/usr/src/sys/kern/uipc_socket2.c b/usr/src/sys/kern/uipc_socket2.c index 6f23987697..92dc696aad 100644 --- a/usr/src/sys/kern/uipc_socket2.c +++ b/usr/src/sys/kern/uipc_socket2.c @@ -1,4 +1,4 @@ -/* uipc_socket2.c 4.31 82/11/03 */ +/* uipc_socket2.c 4.32 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -112,7 +112,7 @@ sonewconn(head) if (head->so_qlen + head->so_q0len > 3 * head->so_qlimit / 2) goto bad; - m = m_getclr(M_DONTWAIT); + m = m_getclr(M_DONTWAIT, MT_SOCKET); if (m == 0) goto bad; so = mtod(m, struct socket *); @@ -454,7 +454,7 @@ SBCHECK(sb, "sbappendaddr begin"); } if (len > sbspace(sb)) return (0); - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_SONAME); if (m == 0) return (0); m->m_len = sizeof (struct sockaddr); diff --git a/usr/src/sys/kern/uipc_syscalls.c b/usr/src/sys/kern/uipc_syscalls.c index 199f013948..a6a0a504a9 100644 --- a/usr/src/sys/kern/uipc_syscalls.c +++ b/usr/src/sys/kern/uipc_syscalls.c @@ -1,4 +1,4 @@ -/* uipc_syscalls.c 4.37 82/11/15 */ +/* uipc_syscalls.c 4.38 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -192,7 +192,7 @@ noname: fp->f_flag = FREAD|FWRITE; fp->f_socket = so; ret: - nam = m_get(M_WAIT); + nam = m_get(M_WAIT, MT_SONAME); (void) soaccept(so, nam, &aopt); if (uap->name) { if (namelen > nam->m_len) @@ -530,7 +530,7 @@ ssocketaddr() return; } so = fp->f_socket; - m = m_getclr(M_WAIT); + m = m_getclr(M_WAIT, MT_SONAME); u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_SOCKADDR, 0, m, 0); if (u.u_error) @@ -550,7 +550,7 @@ sockname(aname, name, namelen) if (namelen > MLEN) return (EINVAL); - m = m_get(M_WAIT); + m = m_get(M_WAIT, MT_SONAME); m->m_len = namelen; if (copyin(name, mtod(m, caddr_t), (u_int)namelen)) { (void) m_free(m); @@ -575,7 +575,7 @@ sockopt(so, opt) return (EFAULT); if (so->so_optlen < 0 || so->so_optlen > MLEN) return (EINVAL); - m = m_get(M_WAIT); + m = m_get(M_WAIT, MT_SOOPTS); m->m_len = so->so_optlen; if (copyin(so->so_optdata, mtod(m, caddr_t), (u_int)m->m_len)) { (void) m_free(m); diff --git a/usr/src/sys/kern/uipc_usrreq.c b/usr/src/sys/kern/uipc_usrreq.c index 21082e5640..be753c3150 100644 --- a/usr/src/sys/kern/uipc_usrreq.c +++ b/usr/src/sys/kern/uipc_usrreq.c @@ -1,4 +1,4 @@ -/* uipc_usrreq.c 1.4 82/11/23 */ +/* uipc_usrreq.c 1.5 82/12/14 */ #include "../h/param.h" #include "../h/dir.h" @@ -201,7 +201,7 @@ unp_attach(so) error = soreserve(so, unp_sendspace, unp_recvspace); if (error) goto bad; - m = m_getclr(M_DONTWAIT); + m = m_getclr(M_DONTWAIT, MT_PCB); if (m == 0) { error = ENOBUFS; goto bad; diff --git a/usr/src/sys/net/raw_cb.c b/usr/src/sys/net/raw_cb.c index 50a247a5fe..da383af4c3 100644 --- a/usr/src/sys/net/raw_cb.c +++ b/usr/src/sys/net/raw_cb.c @@ -1,4 +1,4 @@ -/* raw_cb.c 4.14 82/11/13 */ +/* raw_cb.c 4.15 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -29,7 +29,7 @@ raw_attach(so) struct mbuf *m; register struct rawcb *rp; - m = m_getclr(M_DONTWAIT); + m = m_getclr(M_DONTWAIT, MT_PCB); if (m == 0) return (ENOBUFS); if (sbreserve(&so->so_snd, RAWSNDQ) == 0) diff --git a/usr/src/sys/net/raw_usrreq.c b/usr/src/sys/net/raw_usrreq.c index df108fd24f..f008f85e8e 100644 --- a/usr/src/sys/net/raw_usrreq.c +++ b/usr/src/sys/net/raw_usrreq.c @@ -1,4 +1,4 @@ -/* raw_usrreq.c 4.22 82/10/20 */ +/* raw_usrreq.c 4.23 82/12/14 */ #include "../h/param.h" #include "../h/mbuf.h" @@ -36,7 +36,7 @@ raw_input(m0, proto, src, dst) /* * Rip off an mbuf for a generic header. */ - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { m_freem(m0); return; diff --git a/usr/src/sys/net/route.c b/usr/src/sys/net/route.c index 7abb741a05..e03cf2549e 100644 --- a/usr/src/sys/net/route.c +++ b/usr/src/sys/net/route.c @@ -1,4 +1,4 @@ -/* route.c 4.13 82/10/17 */ +/* route.c 4.14 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -153,7 +153,7 @@ rtrequest(req, entry) goto bad; } } - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_RTABLE); if (m == 0) { error = ENOBUFS; goto bad; diff --git a/usr/src/sys/netinet/in_pcb.c b/usr/src/sys/netinet/in_pcb.c index 3a8417e003..a52e99aab7 100644 --- a/usr/src/sys/netinet/in_pcb.c +++ b/usr/src/sys/netinet/in_pcb.c @@ -1,4 +1,4 @@ -/* in_pcb.c 4.36 82/11/03 */ +/* in_pcb.c 4.37 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -23,7 +23,7 @@ in_pcballoc(so, head) struct mbuf *m; register struct inpcb *inp; - m = m_getclr(M_DONTWAIT); + m = m_getclr(M_DONTWAIT, MT_PCB); if (m == 0) return (ENOBUFS); inp = mtod(m, struct inpcb *); diff --git a/usr/src/sys/netinet/ip_icmp.c b/usr/src/sys/netinet/ip_icmp.c index 7f11fa979b..42f9c240e9 100644 --- a/usr/src/sys/netinet/ip_icmp.c +++ b/usr/src/sys/netinet/ip_icmp.c @@ -1,4 +1,4 @@ -/* ip_icmp.c 4.25 82/11/13 */ +/* ip_icmp.c 4.26 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -47,7 +47,7 @@ icmp_error(oip, type, code) /* * First, formulate icmp message */ - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) goto free; m->m_len = oiplen + 8 + ICMP_MINLEN; diff --git a/usr/src/sys/netinet/ip_input.c b/usr/src/sys/netinet/ip_input.c index 4ba7a0754d..9bc871c990 100644 --- a/usr/src/sys/netinet/ip_input.c +++ b/usr/src/sys/netinet/ip_input.c @@ -1,4 +1,4 @@ -/* ip_input.c 1.58 82/11/03 */ +/* ip_input.c 1.59 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -234,7 +234,7 @@ ip_reass(ip, fp) * If first fragment to arrive, create a reassembly queue. */ if (fp == 0) { - if ((t = m_get(M_WAIT)) == NULL) + if ((t = m_get(M_WAIT, MT_FTABLE)) == NULL) goto dropfrag; fp = mtod(t, struct ipq *); insque(fp, &ipq); @@ -612,7 +612,7 @@ ip_forward(ip) goto sendicmp; } ip->ip_ttl -= IPTTLDEC; - mopt = m_get(M_DONTWAIT); + mopt = m_get(M_DONTWAIT, MT_DATA); if (mopt == 0) { m_freem(dtom(ip)); return; diff --git a/usr/src/sys/netinet/raw_ip.c b/usr/src/sys/netinet/raw_ip.c index 4840265a3f..194279bc38 100644 --- a/usr/src/sys/netinet/raw_ip.c +++ b/usr/src/sys/netinet/raw_ip.c @@ -1,4 +1,4 @@ -/* raw_ip.c 4.15 82/10/17 */ +/* raw_ip.c 4.16 82/12/14 */ #include "../h/param.h" #include "../h/mbuf.h" @@ -58,7 +58,7 @@ rip_output(m0, so) */ for (m = m0; m; m = m->m_next) len += m->m_len; - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto bad; diff --git a/usr/src/sys/netinet/tcp_input.c b/usr/src/sys/netinet/tcp_input.c index ad0a397d79..26e3676879 100644 --- a/usr/src/sys/netinet/tcp_input.c +++ b/usr/src/sys/netinet/tcp_input.c @@ -1,4 +1,4 @@ -/* tcp_input.c 1.82 82/10/30 */ +/* tcp_input.c 1.83 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -98,7 +98,7 @@ tcp_input(m0) goto drop; } ti = mtod(m, struct tcpiphdr *); - om = m_get(M_DONTWAIT); + om = m_get(M_DONTWAIT, MT_DATA); if (om == 0) goto drop; om->m_len = off - sizeof (struct tcphdr); @@ -196,7 +196,7 @@ tcp_input(m0) * segment in this state. */ case TCPS_LISTEN: { - struct mbuf *am = m_get(M_DONTWAIT); + struct mbuf *am = m_get(M_DONTWAIT, MT_SONAME); register struct sockaddr_in *sin; if (am == 0) diff --git a/usr/src/sys/netinet/tcp_output.c b/usr/src/sys/netinet/tcp_output.c index 866ca28467..6dc94b5376 100644 --- a/usr/src/sys/netinet/tcp_output.c +++ b/usr/src/sys/netinet/tcp_output.c @@ -1,4 +1,4 @@ -/* tcp_output.c 4.48 82/10/30 */ +/* tcp_output.c 4.49 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -141,7 +141,7 @@ send: * be transmitted, and initialize the header from * the template for sends on this connection. */ - MGET(m, 0); + MGET(m, M_DONTWAIT, MT_DATA); if (m == 0) return (ENOBUFS); m->m_off = MMAXOFF - sizeof (struct tcpiphdr); @@ -183,7 +183,7 @@ send: } if (opt) { m0 = m->m_next; - m->m_next = m_get(M_DONTWAIT); + m->m_next = m_get(M_DONTWAIT, MT_DATA); if (m->m_next == 0) { (void) m_free(m); m_freem(m0); diff --git a/usr/src/sys/netinet/tcp_subr.c b/usr/src/sys/netinet/tcp_subr.c index ff1d606034..0995957ef4 100644 --- a/usr/src/sys/netinet/tcp_subr.c +++ b/usr/src/sys/netinet/tcp_subr.c @@ -1,4 +1,4 @@ -/* tcp_subr.c 4.35 82/11/13 */ +/* tcp_subr.c 4.36 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -48,7 +48,7 @@ tcp_template(tp) register struct mbuf *m; register struct tcpiphdr *n; - m = m_get(M_WAIT); + m = m_get(M_WAIT, MT_HEADER); if (m == 0) return (0); m->m_off = MMAXOFF - sizeof (struct tcpiphdr); @@ -101,7 +101,7 @@ tcp_respond(tp, ti, ack, seq, flags) ro = &tp->t_inpcb->inp_route; } if (flags == 0) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) return; m->m_len = sizeof (struct tcpiphdr) + 1; @@ -146,7 +146,7 @@ struct tcpcb * tcp_newtcpcb(inp) struct inpcb *inp; { - struct mbuf *m = m_getclr(M_DONTWAIT); + struct mbuf *m = m_getclr(M_DONTWAIT, MT_PCB); register struct tcpcb *tp; if (m == 0) diff --git a/usr/src/sys/netinet/udp_usrreq.c b/usr/src/sys/netinet/udp_usrreq.c index b7432ed5b7..cd4131f03a 100644 --- a/usr/src/sys/netinet/udp_usrreq.c +++ b/usr/src/sys/netinet/udp_usrreq.c @@ -1,4 +1,4 @@ -/* udp_usrreq.c 4.40 82/11/03 */ +/* udp_usrreq.c 4.41 82/12/14 */ #include "../h/param.h" #include "../h/dir.h" @@ -170,7 +170,7 @@ udp_output(inp, m0) */ for (m = m0; m; m = m->m_next) len += m->m_len; - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { m_freem(m0); return (ENOBUFS); diff --git a/usr/src/sys/sys/mbuf.h b/usr/src/sys/sys/mbuf.h index 0c91e49c6d..7595804a0a 100644 --- a/usr/src/sys/sys/mbuf.h +++ b/usr/src/sys/sys/mbuf.h @@ -1,4 +1,4 @@ -/* mbuf.h 4.15 82/10/20 */ +/* mbuf.h 4.16 82/12/14 */ /* * Constants related to memory allocator. @@ -29,11 +29,25 @@ struct mbuf { struct mbuf *m_next; /* next buffer in chain */ u_long m_off; /* offset of data */ short m_len; /* amount of data in this mbuf */ - short m_free; /* is mbuf free? (consistency check) */ + short m_type; /* mbuf type (0 == free) */ u_char m_dat[MLEN]; /* data storage */ struct mbuf *m_act; /* link in higher-level mbuf list */ }; +/* mbuf types */ +#define MT_FREE 0 /* should be on free list */ +#define MT_DATA 1 /* dynamic (data) allocation */ +#define MT_HEADER 2 /* packet header */ +#define MT_SOCKET 3 /* socket structure */ +#define MT_PCB 4 /* protocol control block */ +#define MT_RTABLE 5 /* routing tables */ +#define MT_HTABLE 6 /* IMP host tables */ +#define MT_ATABLE 7 /* address resolution tables */ +#define MT_SONAME 8 /* socket name */ +#define MT_ZOMBIE 9 /* zombie proc status */ +#define MT_SOOPTS 10 /* socket options */ +#define MT_FTABLE 11 /* fragment reassembly header */ + /* flags to m_get */ #define M_DONTWAIT 0 #define M_WAIT 1 @@ -46,14 +60,15 @@ struct mbuf { /* length to m_copy to copy all */ #define M_COPYALL 1000000000 -#define MGET(m, i) \ +#define MGET(m, i, t) \ { int ms = splimp(); \ if ((m)=mfree) \ - { if ((m)->m_free == 0) panic("mget"); (m)->m_free = 0; \ - mbstat.m_mbfree--; mfree = (m)->m_next; (m)->m_next = 0; \ + { if ((m)->m_type != MT_FREE) panic("mget"); (m)->m_type = t; \ + mbstat.m_mbfree--; mbstat.m_mtypes[t]++; \ + mfree = (m)->m_next; (m)->m_next = 0; \ (m)->m_off = MMINOFF; } \ else \ - (m) = m_more(i); \ + (m) = m_more(i, t); \ splx(ms); } #define MCLGET(m, i) \ { int ms = splimp(); \ @@ -62,7 +77,8 @@ struct mbuf { splx(ms); } #define MFREE(m, n) \ { int ms = splimp(); \ - if ((m)->m_free) panic("mfree"); (m)->m_free = 1; \ + if ((m)->m_type == MT_FREE) panic("mfree"); \ + mbstat.m_mtypes[(m)->m_type]--; (m)->m_type = MT_FREE; \ if ((m)->m_off > MSIZE) { \ (n) = (struct mbuf *)(mtod(m, int)&~0x3ff); \ if (--mclrefcnt[mtocl(n)] == 0) \ @@ -76,11 +92,12 @@ struct mbuf { * Mbuf statistics. */ struct mbstat { - short m_mbufs; /* mbufs obtained from page pool */ - short m_mbfree; /* mbufs on our free list */ - short m_clusters; /* clusters obtained from page pool */ - short m_clfree; /* free clusters */ - short m_drops; /* times failed to find space */ + short m_mbufs; /* mbufs obtained from page pool */ + short m_mbfree; /* mbufs on our free list */ + short m_clusters; /* clusters obtained from page pool */ + short m_clfree; /* free clusters */ + short m_drops; /* times failed to find space */ + short m_mtypes[32]; /* type specific mbuf allocations */ }; #ifdef KERNEL diff --git a/usr/src/sys/vax/if/if_ec.c b/usr/src/sys/vax/if/if_ec.c index 97526b4034..531ab2e793 100644 --- a/usr/src/sys/vax/if/if_ec.c +++ b/usr/src/sys/vax/if/if_ec.c @@ -1,4 +1,4 @@ -/* if_ec.c 4.29 82/11/13 */ +/* if_ec.c 4.30 82/12/14 */ #include "ec.h" @@ -559,7 +559,7 @@ gottype: */ if (m->m_off > MMAXOFF || MMINOFF + sizeof (struct ec_header) > m->m_off) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto bad; @@ -695,7 +695,7 @@ ecget(ecbuf, totlen, off0) register int words; u_char *mcp; - MGET(m, 0); + MGET(m, M_DONTWAIT, MT_DATA); if (m == 0) goto bad; if (off) { diff --git a/usr/src/sys/vax/if/if_en.c b/usr/src/sys/vax/if/if_en.c index d24efd6b9b..5f8972e5a4 100644 --- a/usr/src/sys/vax/if/if_en.c +++ b/usr/src/sys/vax/if/if_en.c @@ -1,4 +1,4 @@ -/* if_en.c 4.73 82/11/17 */ +/* if_en.c 4.74 82/12/14 */ #include "en.h" @@ -513,7 +513,7 @@ gottype: */ if (m->m_off > MMAXOFF || MMINOFF + sizeof (struct en_header) > m->m_off) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto bad; diff --git a/usr/src/sys/vax/if/if_il.c b/usr/src/sys/vax/if/if_il.c index 60fc050881..b0376bc793 100644 --- a/usr/src/sys/vax/if/if_il.c +++ b/usr/src/sys/vax/if/if_il.c @@ -1,4 +1,4 @@ -/* if_il.c 4.14 82/11/13 */ +/* if_il.c 4.15 82/12/14 */ #include "il.h" @@ -510,7 +510,7 @@ gottype: */ if (m->m_off > MMAXOFF || MMINOFF + sizeof (struct il_xheader) > m->m_off) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto bad; diff --git a/usr/src/sys/vax/if/if_uba.c b/usr/src/sys/vax/if/if_uba.c index 27533fdfc7..037c8de203 100644 --- a/usr/src/sys/vax/if/if_uba.c +++ b/usr/src/sys/vax/if/if_uba.c @@ -1,4 +1,4 @@ -/* if_uba.c 4.14 82/10/10 */ +/* if_uba.c 4.15 82/12/14 */ #include "../h/param.h" #include "../h/systm.h" @@ -115,7 +115,7 @@ if_rubaget(ifu, totlen, off0) top = 0; mp = ⊤ while (totlen > 0) { - MGET(m, 0); + MGET(m, M_DONTWAIT, MT_DATA); if (m == 0) goto bad; if (off) { diff --git a/usr/src/sys/vax/if/if_vv.c b/usr/src/sys/vax/if/if_vv.c index 5738afbe3d..1937a309bf 100644 --- a/usr/src/sys/vax/if/if_vv.c +++ b/usr/src/sys/vax/if/if_vv.c @@ -1,4 +1,4 @@ -/* if_vv.c 4.9 82/10/31 */ +/* if_vv.c 4.10 82/12/14 */ /* * Proteon 10 Meg Ring Driver. @@ -238,7 +238,7 @@ vvidentify(unit) addr = (struct vvreg *)ui->ui_addr; attempts = 0; /* total attempts, including bad msg type */ retrying = 0; /* first time through */ - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { printf("vvinit: can't get mbuf"); return (0); @@ -598,7 +598,7 @@ gottype: */ if (m->m_off > MMAXOFF || MMINOFF + sizeof (struct vv_header) > m->m_off) { - m = m_get(M_DONTWAIT); + m = m_get(M_DONTWAIT, MT_HEADER); if (m == 0) { error = ENOBUFS; goto bad; -- 2.20.1