aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dillon <dillon@FreeBSD.org>2002-02-13 00:43:12 +0000
committerMatthew Dillon <dillon@FreeBSD.org>2002-02-13 00:43:12 +0000
commit11e5972b27ca0975b0af536fd94ecd4e46446113 (patch)
tree664182c1d38d31a49b5468c942af3d170870c2b3
parent54916bb85902893abd07bee1cdcdcbba18bcf21a (diff)
downloadsrc-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.c15
-rw-r--r--sys/dev/vx/if_vx.c17
-rw-r--r--sys/i386/isa/if_lnc.c10
-rw-r--r--sys/kern/uipc_mbuf.c41
-rw-r--r--sys/kern/uipc_socket.c7
-rw-r--r--sys/kern/uipc_socket2.c13
-rw-r--r--sys/net/if_ppp.c5
-rw-r--r--sys/net/if_sl.c4
-rw-r--r--sys/net/if_tap.c5
-rw-r--r--sys/net/if_tun.c5
-rw-r--r--sys/net/ppp_tty.c4
-rw-r--r--sys/netatm/port.h8
-rw-r--r--sys/netgraph/ng_async.c8
-rw-r--r--sys/netgraph/ng_tty.c4
-rw-r--r--sys/sys/mbuf.h28
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'.