diff options
author | Matthew Dillon <dillon@FreeBSD.org> | 2002-02-13 00:43:12 +0000 |
---|---|---|
committer | Matthew Dillon <dillon@FreeBSD.org> | 2002-02-13 00:43:12 +0000 |
commit | 11e5972b27ca0975b0af536fd94ecd4e46446113 (patch) | |
tree | 664182c1d38d31a49b5468c942af3d170870c2b3 | |
parent | 54916bb85902893abd07bee1cdcdcbba18bcf21a (diff) | |
download | src-11e5972b27ca0975b0af536fd94ecd4e46446113.tar.gz src-11e5972b27ca0975b0af536fd94ecd4e46446113.zip |
MFC remove the MFREE() mbuf macro and cleanup twists in related code.
Notes
Notes:
svn path=/stable/4/; revision=90593
-rw-r--r-- | sys/alpha/tc/am7990.c | 15 | ||||
-rw-r--r-- | sys/dev/vx/if_vx.c | 17 | ||||
-rw-r--r-- | sys/i386/isa/if_lnc.c | 10 | ||||
-rw-r--r-- | sys/kern/uipc_mbuf.c | 41 | ||||
-rw-r--r-- | sys/kern/uipc_socket.c | 7 | ||||
-rw-r--r-- | sys/kern/uipc_socket2.c | 13 | ||||
-rw-r--r-- | sys/net/if_ppp.c | 5 | ||||
-rw-r--r-- | sys/net/if_sl.c | 4 | ||||
-rw-r--r-- | sys/net/if_tap.c | 5 | ||||
-rw-r--r-- | sys/net/if_tun.c | 5 | ||||
-rw-r--r-- | sys/net/ppp_tty.c | 4 | ||||
-rw-r--r-- | sys/netatm/port.h | 8 | ||||
-rw-r--r-- | sys/netgraph/ng_async.c | 8 | ||||
-rw-r--r-- | sys/netgraph/ng_tty.c | 4 | ||||
-rw-r--r-- | sys/sys/mbuf.h | 28 |
15 files changed, 75 insertions, 99 deletions
diff --git a/sys/alpha/tc/am7990.c b/sys/alpha/tc/am7990.c index 4ec33fcd722e..e56694e2dbd6 100644 --- a/sys/alpha/tc/am7990.c +++ b/sys/alpha/tc/am7990.c @@ -442,19 +442,16 @@ am7990_put(sc, boff, m) int boff; register struct mbuf *m; { - register struct mbuf *n; register int len, tlen = 0; - for (; m; m = n) { + while (m) { len = m->m_len; - if (len == 0) { - MFREE(m, n); - continue; + if (len != 0) { + (*sc->sc_copytobuf)(sc, mtod(m, caddr_t), boff, len); + boff += len; + tlen += len; } - (*sc->sc_copytobuf)(sc, mtod(m, caddr_t), boff, len); - boff += len; - tlen += len; - MFREE(m, n); + m = m_free(m); } if (tlen < LEMINSIZE) { (*sc->sc_zerobuf)(sc, boff, LEMINSIZE - tlen); diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index bba51b4d3229..b7f8097d69fd 100644 --- a/sys/dev/vx/if_vx.c +++ b/sys/dev/vx/if_vx.c @@ -436,7 +436,7 @@ vxstart(ifp) struct ifnet *ifp; { register struct vx_softc *sc = vx_softc[ifp->if_unit]; - register struct mbuf *m, *m0; + register struct mbuf *m0; int sh, len, pad; /* Don't transmit if interface is busy or not running */ @@ -480,7 +480,7 @@ startagain: } outw(BASE + VX_COMMAND, SET_TX_AVAIL_THRESH | (8188 >> 2)); IF_DEQUEUE(&ifp->if_snd, m0); - if (m0 == 0) { /* not really needed */ + if (m0 == NULL) { /* not really needed */ return; } @@ -500,14 +500,13 @@ startagain: outl(BASE + VX_W1_TX_PIO_WR_1, len | TX_INDICATE); - for (m = m0; m != 0;) { - if (m->m_len > 3) - outsl(BASE + VX_W1_TX_PIO_WR_1, mtod(m, caddr_t), m->m_len / 4); - if (m->m_len & 3) + while (m0) { + if (m0->m_len > 3) + outsl(BASE + VX_W1_TX_PIO_WR_1, mtod(m0, caddr_t), m0->m_len / 4); + if (m0->m_len & 3) outsb(BASE + VX_W1_TX_PIO_WR_1, - mtod(m, caddr_t) + (m->m_len & ~3) , m->m_len & 3); - MFREE(m, m0); - m = m0; + mtod(m0, caddr_t) + (m0->m_len & ~3) , m0->m_len & 3); + m0 = m_free(m0); } while (pad--) outb(BASE + VX_W1_TX_PIO_WR_1, 0); /* Padding */ diff --git a/sys/i386/isa/if_lnc.c b/sys/i386/isa/if_lnc.c index bfe0e3b89929..7e291ec8eefd 100644 --- a/sys/i386/isa/if_lnc.c +++ b/sys/i386/isa/if_lnc.c @@ -839,9 +839,9 @@ lnc_tint(struct lnc_softc *sc) sc->mbuf_count++; start->buff.mbuf = 0; } else { - struct mbuf *junk; - MFREE(start->buff.mbuf, junk); - start->buff.mbuf = 0; + /* XXX shouldn't this be m_freem ?? */ + m_free(start->buff.mbuf); + start->buff.mbuf = NULL; } } sc->pending_transmits--; @@ -1702,8 +1702,8 @@ lnc_start(struct ifnet *ifp) m->m_len -= chunk; m->m_data += chunk; if (m->m_len <= 0) { - MFREE(m, head->m_next); - m = head->m_next; + m = m_free(m); + head->m_next = m; } } } diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c index 66a23b2a87ae..34a9a0befe24 100644 --- a/sys/kern/uipc_mbuf.c +++ b/sys/kern/uipc_mbuf.c @@ -611,6 +611,34 @@ failed: return (NULL); } +/* + * MFREE(struct mbuf *m, struct mbuf *n) + * Free a single mbuf and associated external storage. + * Place the successor, if any, in n. + * + * we do need to check non-first mbuf for m_aux, since some of existing + * code does not call M_PREPEND properly. + * (example: call to bpf_mtap from drivers) + */ +#define MFREE(m, n) MBUFLOCK( \ + struct mbuf *_mm = (m); \ + \ + KASSERT(_mm->m_type != MT_FREE, ("freeing free mbuf")); \ + mbtypes[_mm->m_type]--; \ + if ((_mm->m_flags & M_PKTHDR) != 0 && _mm->m_pkthdr.aux) { \ + m_freem(_mm->m_pkthdr.aux); \ + _mm->m_pkthdr.aux = NULL; \ + } \ + if (_mm->m_flags & M_EXT) \ + MEXTFREE1(m); \ + (n) = _mm->m_next; \ + _mm->m_type = MT_FREE; \ + mbtypes[MT_FREE]++; \ + _mm->m_next = mmbfree; \ + mmbfree = _mm; \ + MMBWAKEUP(); \ +) + struct mbuf * m_free(m) struct mbuf *m; @@ -623,16 +651,11 @@ m_free(m) void m_freem(m) - register struct mbuf *m; + struct mbuf *m; { - register struct mbuf *n; - - if (m == NULL) - return; - do { - MFREE(m, n); - m = n; - } while (m); + while (m) { + m = m_free(m); + } } /* diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 5b51afd3de7b..06ece869fd74 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -782,7 +782,7 @@ dontblock: m = m->m_next; } else { sbfree(&so->so_rcv, m); - MFREE(m, so->so_rcv.sb_mb); + so->so_rcv.sb_mb = m_free(m); m = so->so_rcv.sb_mb; } } @@ -803,7 +803,7 @@ dontblock: m->m_next = 0; m = so->so_rcv.sb_mb; } else { - MFREE(m, so->so_rcv.sb_mb); + so->so_rcv.sb_mb = m_free(m); m = so->so_rcv.sb_mb; } } @@ -867,8 +867,7 @@ dontblock: so->so_rcv.sb_mb = m = m->m_next; *mp = (struct mbuf *)0; } else { - MFREE(m, so->so_rcv.sb_mb); - m = so->so_rcv.sb_mb; + so->so_rcv.sb_mb = m = m_free(m); } if (m) m->m_nextpkt = nextrecord; diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index c06669989365..4694bdcbc4eb 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -782,7 +782,7 @@ sbdrop(sb, len) register struct sockbuf *sb; register int len; { - register struct mbuf *m, *mn; + register struct mbuf *m; struct mbuf *next; next = (m = sb->sb_mb) ? m->m_nextpkt : 0; @@ -802,13 +802,11 @@ sbdrop(sb, len) } len -= m->m_len; sbfree(sb, m); - MFREE(m, mn); - m = mn; + m = m_free(m); } while (m && m->m_len == 0) { sbfree(sb, m); - MFREE(m, mn); - m = mn; + m = m_free(m); } if (m) { sb->sb_mb = m; @@ -825,15 +823,14 @@ void sbdroprecord(sb) register struct sockbuf *sb; { - register struct mbuf *m, *mn; + register struct mbuf *m; m = sb->sb_mb; if (m) { sb->sb_mb = m->m_nextpkt; do { sbfree(sb, m); - MFREE(m, mn); - m = mn; + m = m_free(m); } while (m); } } diff --git a/sys/net/if_ppp.c b/sys/net/if_ppp.c index 00505297d069..3675deb260c4 100644 --- a/sys/net/if_ppp.c +++ b/sys/net/if_ppp.c @@ -1381,9 +1381,10 @@ ppp_inproc(sc, m) if (m->m_len <= M_TRAILINGSPACE(mp)) { bcopy(mtod(m, u_char *), mtod(mp, u_char *) + mp->m_len, m->m_len); mp->m_len += m->m_len; - MFREE(m, mp->m_next); - } else + mp->m_next = m_free(m); + } else { mp->m_next = m; + } m = mp; ilen += hlen - xlen; diff --git a/sys/net/if_sl.c b/sys/net/if_sl.c index a2c03a6f4876..2a1a4fdd2e3e 100644 --- a/sys/net/if_sl.c +++ b/sys/net/if_sl.c @@ -548,7 +548,6 @@ slstart(tp) register u_char *cp; register struct ip *ip; int s; - struct mbuf *m2; u_char bpfbuf[SLTMAX + SLIP_HDRLEN]; register int len = 0; @@ -702,8 +701,7 @@ slstart(tp) sc->sc_if.if_obytes += 2; } } - MFREE(m, m2); - m = m2; + m = m_free(m); } if (putc(FRAME_END, &tp->t_outq)) { diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c index aad9101b8b29..13ee52fb9669 100644 --- a/sys/net/if_tap.c +++ b/sys/net/if_tap.c @@ -642,7 +642,7 @@ tapread(dev, uio, flag) { struct tap_softc *tp = dev->si_drv1; struct ifnet *ifp = &tp->tap_if; - struct mbuf *m = NULL, *m0 = NULL; + struct mbuf *m0 = NULL; int error = 0, len, s; TAPDEBUG("%s%d reading, minor = %#x\n", @@ -686,8 +686,7 @@ tapread(dev, uio, flag) break; error = uiomove(mtod(m0, caddr_t), len, uio); - MFREE(m0, m); - m0 = m; + m0 = m_free(m0); } if (m0 != NULL) { diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index 20a8b858159f..b80ac24597d6 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -538,7 +538,7 @@ tunread(dev, uio, flag) { struct tun_softc *tp = dev->si_drv1; struct ifnet *ifp = &tp->tun_if; - struct mbuf *m, *m0; + struct mbuf *m0; int error=0, len, s; TUNDEBUG ("%s%d: read\n", ifp->if_name, ifp->if_unit); @@ -572,8 +572,7 @@ tunread(dev, uio, flag) len = min(uio->uio_resid, m0->m_len); if (len != 0) error = uiomove(mtod(m0, caddr_t), len, uio); - MFREE(m0, m); - m0 = m; + m0 = m_free(m0); } if (m0) { diff --git a/sys/net/ppp_tty.c b/sys/net/ppp_tty.c index 2c4a1cfa9628..c9ca20fc7c11 100644 --- a/sys/net/ppp_tty.c +++ b/sys/net/ppp_tty.c @@ -574,7 +574,6 @@ pppasyncstart(sc) register int len; register u_char *start, *stop, *cp; int n, ndone, done, idle; - struct mbuf *m2; int s; idle = 0; @@ -712,8 +711,7 @@ pppasyncstart(sc) } /* Finished with this mbuf; free it and move on. */ - MFREE(m, m2); - m = m2; + m = m_free(m); if (m == NULL) { /* Finished a packet */ break; diff --git a/sys/netatm/port.h b/sys/netatm/port.h index d9a0b133c4ec..6defe410fd56 100644 --- a/sys/netatm/port.h +++ b/sys/netatm/port.h @@ -274,10 +274,10 @@ typedef struct mbuf KBuffer; (prev)->m_next = (new); \ } #define KB_UNLINKHEAD(head, next) { \ - MFREE((head), (next)); \ + next = m_free((head)); \ } #define KB_UNLINK(old, prev, next) { \ - MFREE((old), (next)); \ + next = m_free((old)); \ (prev)->m_next = (next); \ } #define KB_ISPKT(bfr) (((bfr)->m_flags & M_PKTHDR) != 0) @@ -407,10 +407,10 @@ typedef struct mbuf KBuffer; (prev)->m_next = (new); \ } #define KB_UNLINKHEAD(head, next) { \ - MFREE((head), (next)); \ + next = m_free((head)); \ } #define KB_UNLINK(old, prev, next) { \ - MFREE((old), (next)); \ + next = m_free((old)); \ (prev)->m_next = (next); \ } #define KB_ISPKT(bfr) (0) diff --git a/sys/netgraph/ng_async.c b/sys/netgraph/ng_async.c index 6783ae58f2fb..9320f4353ca5 100644 --- a/sys/netgraph/ng_async.c +++ b/sys/netgraph/ng_async.c @@ -452,15 +452,12 @@ nga_rcv_sync(const sc_p sc, struct mbuf *m, meta_p meta) /* Add packet payload */ while (m != NULL) { - struct mbuf *n; - while (m->m_len > 0) { ADD_BYTE(*mtod(m, u_char *)); m->m_data++; m->m_len--; } - MFREE(m, n); - m = n; + m = m_free(m); } /* Add checksum and final sync flag */ @@ -567,8 +564,7 @@ reset: sc->fcs = PPP_FCS(sc->fcs, ch); } } - MFREE(m, n); - m = n; + m = m_free(m); } return (0); } diff --git a/sys/netgraph/ng_tty.c b/sys/netgraph/ng_tty.c index e85962a93bf4..ce58e2f59c98 100644 --- a/sys/netgraph/ng_tty.c +++ b/sys/netgraph/ng_tty.c @@ -429,7 +429,6 @@ ngt_start(struct tty *tp) /* Send as much of it as possible */ while (m) { - struct mbuf *m2; int sent; sent = m->m_len @@ -438,8 +437,7 @@ ngt_start(struct tty *tp) m->m_len -= sent; if (m->m_len > 0) break; /* device can't take no more */ - MFREE(m, m2); - m = m2; + m = m_free(m); } /* Put remainder of mbuf chain (if any) back on queue */ diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index afa8c72d8a3d..bac520da10c6 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -412,34 +412,6 @@ union mcluster { ) /* - * MFREE(struct mbuf *m, struct mbuf *n) - * Free a single mbuf and associated external storage. - * Place the successor, if any, in n. - * - * we do need to check non-first mbuf for m_aux, since some of existing - * code does not call M_PREPEND properly. - * (example: call to bpf_mtap from drivers) - */ -#define MFREE(m, n) MBUFLOCK( \ - struct mbuf *_mm = (m); \ - \ - KASSERT(_mm->m_type != MT_FREE, ("freeing free mbuf")); \ - mbtypes[_mm->m_type]--; \ - if ((_mm->m_flags & M_PKTHDR) != 0 && _mm->m_pkthdr.aux) { \ - m_freem(_mm->m_pkthdr.aux); \ - _mm->m_pkthdr.aux = NULL; \ - } \ - if (_mm->m_flags & M_EXT) \ - MEXTFREE1(m); \ - (n) = _mm->m_next; \ - _mm->m_type = MT_FREE; \ - mbtypes[MT_FREE]++; \ - _mm->m_next = mmbfree; \ - mmbfree = _mm; \ - MMBWAKEUP(); \ -) - -/* * Copy mbuf pkthdr from "from" to "to". * from must have M_PKTHDR set, and to must be empty. * aux pointer will be moved to `to'. |