Index: src/sys/dev/an/if_an.c =================================================================== RCS file: /home/ncvs/src/sys/dev/an/if_an.c,v retrieving revision 1.36 diff -u -r1.36 if_an.c --- src/sys/dev/an/if_an.c 27 Jul 2002 21:28:40 -0000 1.36 +++ src/sys/dev/an/if_an.c 20 Aug 2002 17:32:20 -0000 @@ -596,14 +596,8 @@ bpf_tap(ifp, bpf_buf, len); } } else { - MGETHDR(m, M_DONTWAIT, MT_DATA); + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) { - ifp->if_ierrors++; - return; - } - MCLGET(m, M_DONTWAIT); - if (!(m->m_flags & M_EXT)) { - m_freem(m); ifp->if_ierrors++; return; } Index: src/sys/dev/ar/if_ar.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ar/if_ar.c,v retrieving revision 1.52 diff -u -r1.52 if_ar.c --- src/sys/dev/ar/if_ar.c 9 May 2002 18:01:19 -0000 1.52 +++ src/sys/dev/ar/if_ar.c 20 Aug 2002 17:32:20 -0000 @@ -1679,35 +1679,27 @@ while(ar_packet_avail(sc, &len, &rxstat)) { TRC(printf("apa: len %d, rxstat %x\n", len, rxstat)); if(((rxstat & SCA_DESC_ERRORS) == 0) && (len < MCLBYTES)) { - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (len > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if(m == NULL) { /* eat packet if get mbuf fail!! */ ar_eat_packet(sc, 1); continue; } -#ifndef NETGRAPH - m->m_pkthdr.rcvif = &sc->ifsppp.pp_if; -#else /* NETGRAPH */ - m->m_pkthdr.rcvif = NULL; - sc->inbytes += len; - sc->inlast = 0; -#endif /* NETGRAPH */ m->m_pkthdr.len = m->m_len = len; - if(len > MHLEN) { - MCLGET(m, M_DONTWAIT); - if((m->m_flags & M_EXT) == 0) { - m_freem(m); - ar_eat_packet(sc, 1); - continue; - } - } ar_copy_rxbuf(m, sc, len); #ifndef NETGRAPH + m->m_pkthdr.rcvif = &sc->ifsppp.pp_if; if(sc->ifsppp.pp_if.if_bpf) bpf_mtap(&sc->ifsppp.pp_if, m); sppp_input(&sc->ifsppp.pp_if, m); sc->ifsppp.pp_if.if_ipackets++; #else /* NETGRAPH */ + m->m_pkthdr.rcvif = NULL; + sc->inbytes += len; + sc->inlast = 0; NG_SEND_DATA_ONLY(error, sc->hook, m); sc->ipackets++; #endif /* NETGRAPH */ Index: src/sys/dev/awi/awi.c =================================================================== RCS file: /home/ncvs/src/sys/dev/awi/awi.c,v retrieving revision 1.20 diff -u -r1.20 awi.c --- src/sys/dev/awi/awi.c 31 May 2002 03:27:34 -0000 1.20 +++ src/sys/dev/awi/awi.c 20 Aug 2002 17:32:20 -0000 @@ -2241,8 +2241,7 @@ struct ieee80211_frame *wh; u_int8_t *deauth; - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) + if ((m = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) return; if (ifp->if_flags & IFF_DEBUG) printf("%s: sending deauth to %s\n", sc->sc_dev.dv_xname, @@ -2278,8 +2277,7 @@ struct ieee80211_frame *wh; u_int8_t *auth; - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) + if ((m = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) return; sc->sc_status = AWI_ST_AUTH; if (ifp->if_flags & IFF_DEBUG) @@ -2379,8 +2377,7 @@ u_int16_t capinfo, lintval; u_int8_t *asreq; - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) + if ((m = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) return; sc->sc_status = AWI_ST_ASSOC; if (ifp->if_flags & IFF_DEBUG) Index: src/sys/dev/bge/if_bge.c =================================================================== RCS file: /home/ncvs/src/sys/dev/bge/if_bge.c,v retrieving revision 1.18 diff -u -r1.18 if_bge.c --- src/sys/dev/bge/if_bge.c 26 Jul 2002 03:47:07 -0000 1.18 +++ src/sys/dev/bge/if_bge.c 20 Aug 2002 17:32:20 -0000 @@ -710,16 +710,10 @@ struct bge_rx_bd *r; if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { return(ENOBUFS); } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - m_freem(m_new); - return(ENOBUFS); - } m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; } else { m_new = m; @@ -756,8 +750,7 @@ caddr_t *buf = NULL; /* Allocate the mbuf. */ - MGETHDR(m_new, M_DONTWAIT, MT_DATA); - if (m_new == NULL) { + if ((m_new = m_gethdr(M_DONTWAIT, MT_DATA)) == NULL) { return(ENOBUFS); } Index: src/sys/dev/cm/smc90cx6.c =================================================================== RCS file: /home/ncvs/src/sys/dev/cm/smc90cx6.c,v retrieving revision 1.2 diff -u -r1.2 smc90cx6.c --- src/sys/dev/cm/smc90cx6.c 20 Mar 2002 02:04:09 -0000 1.2 +++ src/sys/dev/cm/smc90cx6.c 20 Aug 2002 17:32:20 -0000 @@ -645,29 +645,12 @@ buffer = sc->sc_rx_act ^ 1; splx(s); - /* Allocate header mbuf */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - - if (m == 0) { - /* - * in case s.th. goes wrong with mem, drop it - * to make sure the receiver can be started again - * count it as input error (we dont have any other - * detectable) - */ - ifp->if_ierrors++; - goto cleanup; - } - - m->m_pkthdr.rcvif = ifp; - /* * Align so that IP packet will be longword aligned. Here we * assume that m_data of new packet is longword aligned. * When implementing PHDS, we might have to change it to 2, * (2*sizeof(ulong) - CM_HDRNEWLEN)), packet type dependent. */ - cm_ram_ptr = buffer*512; offset = GETMEM(cm_ram_ptr + 2); if (offset) @@ -681,21 +664,15 @@ * first +2 bytes for align fixup below * second +2 bytes are for src/dst addresses */ - if ((len + 2 + 2) > MHLEN) { - /* attach an mbuf cluster */ - MCLGET(m, M_DONTWAIT); - - /* Insist on getting a cluster */ - if ((m->m_flags & M_EXT) == 0) { - ifp->if_ierrors++; - goto cleanup; - } - } - - if (m == 0) { + if ((len + 2 + 2) > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); + if (m == NULL) { ifp->if_ierrors++; goto cleanup; } + m->m_pkthdr.rcvif = ifp; type = GETMEM(cm_ram_ptr + offset); m->m_data += 1 + arc_isphds(type); Index: src/sys/dev/cs/if_cs.c =================================================================== RCS file: /home/ncvs/src/sys/dev/cs/if_cs.c,v retrieving revision 1.20 diff -u -r1.20 if_cs.c --- src/sys/dev/cs/if_cs.c 23 Feb 2001 08:08:21 -0000 1.20 +++ src/sys/dev/cs/if_cs.c 20 Aug 2002 17:32:20 -0000 @@ -785,17 +785,12 @@ return -1; } - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (length > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if (m==NULL) return -1; - - if (length > MHLEN) { - MCLGET(m, M_DONTWAIT); - if (!(m->m_flags & M_EXT)) { - m_freem(m); - return -1; - } - } /* Initialize packet's header info */ m->m_pkthdr.rcvif = ifp; Index: src/sys/dev/ed/if_ed.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ed/if_ed.c,v retrieving revision 1.208 diff -u -r1.208 if_ed.c --- src/sys/dev/ed/if_ed.c 20 Mar 2002 02:07:18 -0000 1.208 +++ src/sys/dev/ed/if_ed.c 20 Aug 2002 17:32:20 -0000 @@ -2685,29 +2685,20 @@ struct ether_header *eh; struct mbuf *m; - /* Allocate a header mbuf */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) - return; - m->m_pkthdr.rcvif = &sc->arpcom.ac_if; - m->m_pkthdr.len = m->m_len = len; - /* * We always put the received packet in a single buffer - * either with just an mbuf header or in a cluster attached * to the header. The +2 is to compensate for the alignment * fixup below. */ - if ((len + 2) > MHLEN) { - /* Attach an mbuf cluster */ - MCLGET(m, M_DONTWAIT); - - /* Insist on getting a cluster */ - if ((m->m_flags & M_EXT) == 0) { - m_freem(m); - return; - } - } + if ((len + 2) > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); + if (m == NULL) + return; + m->m_pkthdr.rcvif = &sc->arpcom.ac_if; + m->m_pkthdr.len = m->m_len = len; /* * The +2 is to longword align the start of the real packet. Index: src/sys/dev/em/if_em.c =================================================================== RCS file: /home/ncvs/src/sys/dev/em/if_em.c,v retrieving revision 1.9 diff -u -r1.9 if_em.c --- src/sys/dev/em/if_em.c 16 Jul 2002 16:55:02 -0000 1.9 +++ src/sys/dev/em/if_em.c 20 Aug 2002 17:32:20 -0000 @@ -1686,14 +1686,13 @@ ifp = &adapter->interface_data.ac_if; if (mp == NULL) { - MGETHDR(nmp, M_DONTWAIT, MT_DATA); + nmp = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (nmp == NULL) { + /* + * XXX: bad, we should just have one + * stat variables for "failed allocations." + */ adapter->mbuf_alloc_failed++; - return(ENOBUFS); - } - MCLGET(nmp, M_DONTWAIT); - if ((nmp->m_flags & M_EXT) == 0) { - m_freem(nmp); adapter->mbuf_cluster_failed++; return(ENOBUFS); } Index: src/sys/dev/en/midway.c =================================================================== RCS file: /home/ncvs/src/sys/dev/en/midway.c,v retrieving revision 1.28 diff -u -r1.28 midway.c --- src/sys/dev/en/midway.c 20 Mar 2002 02:07:19 -0000 1.28 +++ src/sys/dev/en/midway.c 20 Aug 2002 17:32:20 -0000 @@ -1766,18 +1766,11 @@ d -= off; m->m_data = (caddr_t)d; } else { - /* can't write to an M_EXT mbuf since it may be shared */ - MGET(new, M_DONTWAIT, MT_DATA); + new = m_getcl(M_DONTWAIT, MT_DATA, 0); if (!new) { EN_COUNT(sc->mfixfail); return(0); } - MCLGET(new, M_DONTWAIT); - if ((new->m_flags & M_EXT) == 0) { - m_free(new); - EN_COUNT(sc->mfixfail); - return(0); - } bcopy(d, new->m_data, m->m_len); /* ALIGN! (with costly data copy...) */ new->m_len = m->m_len; new->m_next = m->m_next; @@ -1834,19 +1827,13 @@ if (MEXT_IS_REF(m)) { /* make a real copy of the M_EXT mbuf since it is shared */ - MGET(new, M_DONTWAIT, MT_DATA); + new = m_getcl(M_DONTWAIT, MT_DATA, 0); if (!new) { EN_COUNT(sc->mfixfail); return(0); } if (m->m_flags & M_PKTHDR) M_COPY_PKTHDR(new, m); - MCLGET(new, M_DONTWAIT); - if ((new->m_flags & M_EXT) == 0) { - m_free(new); - EN_COUNT(sc->mfixfail); - return(0); - } bcopy(m->m_data, new->m_data, m->m_len); new->m_len = m->m_len; new->m_next = m->m_next; Index: src/sys/dev/ep/if_ep.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ep/if_ep.c,v retrieving revision 1.109 diff -u -r1.109 if_ep.c --- src/sys/dev/ep/if_ep.c 20 Mar 2002 02:07:19 -0000 1.109 +++ src/sys/dev/ep/if_ep.c 20 Aug 2002 17:32:20 -0000 @@ -689,11 +689,12 @@ rx_fifo = rx_fifo2 = status & RX_BYTES_MASK; if (EP_FTST(sc, F_RX_FIRST)) { - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (rx_fifo >= MINCLSIZE) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if (!m) goto out; - if (rx_fifo >= MINCLSIZE) - MCLGET(m, M_DONTWAIT); sc->top = sc->mcur = top = m; #define EROUND ((sizeof(struct ether_header) + 3) & ~3) #define EOFF (EROUND - sizeof(struct ether_header)) @@ -717,11 +718,12 @@ lenthisone = min(rx_fifo, M_TRAILINGSPACE(m)); if (lenthisone == 0) { /* no room in this one */ mcur = m; - MGET(m, M_DONTWAIT, MT_DATA); + if (rx_fifo >= MINCLSIZE) + m = m_getcl(M_DONTWAIT, MT_DATA, 0); + else + m = m_get(M_DONTWAIT, MT_DATA); if (!m) goto out; - if (rx_fifo >= MINCLSIZE) - MCLGET(m, M_DONTWAIT); m->m_len = 0; mcur->m_next = m; lenthisone = min(rx_fifo, M_TRAILINGSPACE(m)); Index: src/sys/dev/fe/if_fe.c =================================================================== RCS file: /home/ncvs/src/sys/dev/fe/if_fe.c,v retrieving revision 1.71 diff -u -r1.71 if_fe.c --- src/sys/dev/fe/if_fe.c 2 Sep 2001 13:05:00 -0000 1.71 +++ src/sys/dev/fe/if_fe.c 20 Aug 2002 17:32:20 -0000 @@ -1854,18 +1854,12 @@ */ /* Allocate an mbuf with packet header info. */ - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (len > MHLEN - NFS_MAGIC_OFFSET) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if (m == NULL) return -1; - - /* Attach a cluster if this packet doesn't fit in a normal mbuf. */ - if (len > MHLEN - NFS_MAGIC_OFFSET) { - MCLGET(m, M_DONTWAIT); - if (!(m->m_flags & M_EXT)) { - m_freem(m); - return -1; - } - } /* Initialize packet header info. */ m->m_pkthdr.rcvif = &sc->sc_if; Index: src/sys/dev/fxp/if_fxp.c =================================================================== RCS file: /home/ncvs/src/sys/dev/fxp/if_fxp.c,v retrieving revision 1.139 diff -u -r1.139 if_fxp.c --- src/sys/dev/fxp/if_fxp.c 18 Aug 2002 07:04:58 -0000 1.139 +++ src/sys/dev/fxp/if_fxp.c 20 Aug 2002 17:32:20 -0000 @@ -1063,18 +1063,13 @@ * mbuf chain first. Bail out if we can't get the * new buffers. */ - MGETHDR(mn, M_DONTWAIT, MT_DATA); + if (mb_head->m_pkthdr.len > MHLEN) + mn = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + mn = m_gethdr(M_DONTWAIT, MT_DATA); if (mn == NULL) { m_freem(mb_head); break; - } - if (mb_head->m_pkthdr.len > MHLEN) { - MCLGET(mn, M_DONTWAIT); - if ((mn->m_flags & M_EXT) == 0) { - m_freem(mn); - m_freem(mb_head); - break; - } } m_copydata(mb_head, 0, mb_head->m_pkthdr.len, mtod(mn, caddr_t)); Index: src/sys/dev/gem/if_gem.c =================================================================== RCS file: /home/ncvs/src/sys/dev/gem/if_gem.c,v retrieving revision 1.7 diff -u -r1.7 if_gem.c --- src/sys/dev/gem/if_gem.c 24 Jul 2002 01:09:38 -0000 1.7 +++ src/sys/dev/gem/if_gem.c 20 Aug 2002 17:32:20 -0000 @@ -1165,24 +1165,17 @@ break; } if (txmfail > 0) { - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (m0->m_pkthdr.len > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if (m == NULL) { device_printf(sc->sc_dev, "unable to " - "allocate Tx mbuf\n"); + "allocate Tx mbuf resources\n"); /* Failed; requeue. */ IF_PREPEND(&ifp->if_snd, m0); break; } - if (m0->m_pkthdr.len > MHLEN) { - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - device_printf(sc->sc_dev, "unable to " - "allocate Tx cluster\n"); - IF_PREPEND(&ifp->if_snd, m0); - m_freem(m); - break; - } - } m_copydata(m0, 0, m0->m_pkthdr.len, mtod(m, caddr_t)); m->m_pkthdr.len = m->m_len = m0->m_pkthdr.len; txmfail = gem_dmamap_load_mbuf(sc, m, @@ -1583,15 +1576,9 @@ struct mbuf *m; int error; - MGETHDR(m, M_DONTWAIT, MT_DATA); + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) return (ENOBUFS); - - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - m_freem(m); - return (ENOBUFS); - } #ifdef GEM_DEBUG /* bzero the packet to check dma */ Index: src/sys/dev/gx/if_gx.c =================================================================== RCS file: /home/ncvs/src/sys/dev/gx/if_gx.c,v retrieving revision 1.5 diff -u -r1.5 if_gx.c --- src/sys/dev/gx/if_gx.c 28 Apr 2002 20:34:19 -0000 1.5 +++ src/sys/dev/gx/if_gx.c 20 Aug 2002 17:32:20 -0000 @@ -1071,17 +1071,10 @@ struct gx_rx_desc *r; if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { device_printf(gx->gx_dev, "mbuf allocation failed -- packet dropped\n"); - return (ENOBUFS); - } - MCLGET(m_new, M_DONTWAIT); - if ((m_new->m_flags & M_EXT) == 0) { - device_printf(gx->gx_dev, - "cluster allocation failed -- packet dropped\n"); - m_freem(m_new); return (ENOBUFS); } m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; Index: src/sys/dev/lmc/if_lmc.c =================================================================== RCS file: /home/ncvs/src/sys/dev/lmc/if_lmc.c,v retrieving revision 1.16 diff -u -r1.16 if_lmc.c --- src/sys/dev/lmc/if_lmc.c 21 Jul 2002 05:16:14 -0000 1.16 +++ src/sys/dev/lmc/if_lmc.c 20 Aug 2002 17:32:20 -0000 @@ -621,14 +621,7 @@ */ if (accept || ms == NULL) { struct mbuf *m0; - MGETHDR(m0, M_DONTWAIT, MT_DATA); - if (m0 != NULL) { - MCLGET(m0, M_DONTWAIT); - if ((m0->m_flags & M_EXT) == 0) { - m_freem(m0); - m0 = NULL; - } - } + m0 = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (accept) { int error; @@ -830,46 +823,40 @@ { struct mbuf *m0; #if MCLBYTES >= LMC_MTU + PPP_HEADER_LEN && !defined(BIG_PACKET) - MGETHDR(m0, M_DONTWAIT, MT_DATA); - if (m0 != NULL) { - if (m->m_pkthdr.len > MHLEN) { - MCLGET(m0, M_DONTWAIT); - if ((m0->m_flags & M_EXT) == 0) { - m_freem(m); - m_freem(m0); - return NULL; - } - } - m_copydata(m, 0, m->m_pkthdr.len, mtod(m0, caddr_t)); - m0->m_pkthdr.len = m0->m_len = m->m_pkthdr.len; - } + if (m->m_pkthdr.len > MHLEN) + m0 = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m0 = m_gethdr(M_DONTWAIT, MT_DATA); + if (m0 == NULL) + return NULL; + m_copydata(m, 0, m->m_pkthdr.len, mtod(m0, caddr_t)); + m0->m_pkthdr.len = m0->m_len = m->m_pkthdr.len; #else int mlen = MHLEN; + int flags = 0; int len = m->m_pkthdr.len; struct mbuf **mp = &m0; while (len > 0) { - if (mlen == MHLEN) { - MGETHDR(*mp, M_DONTWAIT, MT_DATA); + if (mlen == MHLEN) + flags = M_PKTHDR; + if (len > MLEN) { + *mp = m_getcl(M_DONTWAIT, MT_DATA, flags); } else { - MGET(*mp, M_DONTWAIT, MT_DATA); + if (flags == M_PKTHDR) + *mp = m_gethdr(M_DONTWAIT, MT_DATA); + else + *mp = m_get(M_DONTWAIT, MT_DATA); } if (*mp == NULL) { m_freem(m0); m0 = NULL; break; } - if (len > MLEN) { - MCLGET(*mp, M_DONTWAIT); - if (((*mp)->m_flags & M_EXT) == 0) { - m_freem(m0); - m0 = NULL; - break; - } + if (len > MLEN) (*mp)->m_len = (len <= MCLBYTES ? len : MCLBYTES); - } else { + else (*mp)->m_len = (len <= mlen ? len : mlen); - } m_copydata(m, m->m_pkthdr.len - len, (*mp)->m_len, mtod((*mp), caddr_t)); len -= (*mp)->m_len; @@ -877,7 +864,8 @@ mlen = MLEN; } #endif - m_freem(m); + if (m != NULL) + m_freem(m); return m0; } Index: src/sys/dev/lnc/if_lnc.c =================================================================== RCS file: /home/ncvs/src/sys/dev/lnc/if_lnc.c,v retrieving revision 1.91 diff -u -r1.91 if_lnc.c --- src/sys/dev/lnc/if_lnc.c 20 Mar 2002 02:07:27 -0000 1.91 +++ src/sys/dev/lnc/if_lnc.c 20 Aug 2002 17:32:20 -0000 @@ -314,16 +314,10 @@ sc->mbufs = m->m_next; /* XXX m->m_data = m->m_ext.ext_buf;*/ } else { - MGET(m, M_DONTWAIT, MT_DATA); - if (!m) + m = m_getcl(M_DONTWAIT, MT_DATA, 0); + if (m == NULL) return(1); - MCLGET(m, M_DONTWAIT); - if (!m->m_ext.ext_buf) { - m_free(m); - return(1); - } } - desc->buff.mbuf = m; addr = kvtop(m->m_data); md->md0 = addr; @@ -409,13 +403,14 @@ if (amount == 0) { /* mbuf must be empty */ m_prev = m; - MGET(m, M_DONTWAIT, MT_DATA); - if (!m) { + if (pkt_len >= MINCLSIZE) + m = m_getcl(M_DONTWAIT, MT_DATA, 0); + else + m = m_get(M_DONTWAIT, MT_DATA); + if (m == NULL) { m_freem(head); return(0); } - if (pkt_len >= MINCLSIZE) - MCLGET(m, M_DONTWAIT); m->m_len = 0; m_prev->m_next = m; amount = min(blen, M_TRAILINGSPACE(m)); @@ -1222,15 +1217,10 @@ { struct mbuf *new; - MGET(new, M_DONTWAIT, MT_DATA); - if (new) { - MCLGET(new, M_DONTWAIT); - if (new->m_ext.ext_buf) { - new->m_len = mbuf_to_buffer(m, new->m_data); - m_freem(m); - return(new); - } else - m_free(new); + new = m_getcl(M_DONTWAIT, MT_DATA, 0); + if (new != NULL) { + new->m_len = mbuf_to_buffer(m, new->m_data); + return (new); } return(0); } Index: src/sys/dev/musycc/musycc.c =================================================================== RCS file: /home/ncvs/src/sys/dev/musycc/musycc.c,v retrieving revision 1.22 diff -u -r1.22 musycc.c --- src/sys/dev/musycc/musycc.c 15 Jun 2001 00:19:43 -0000 1.22 +++ src/sys/dev/musycc/musycc.c 20 Aug 2002 17:32:20 -0000 @@ -695,35 +695,23 @@ m->m_len = m->m_pkthdr.len = status & 0x3fff; error = (status >> 16) & 0xf; if (error == 0) { - MGETHDR(m2, M_DONTWAIT, MT_DATA); + m2 = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m2 != NULL) { - MCLGET(m2, M_DONTWAIT); - if((m2->m_flags & M_EXT) != 0) { - /* Substitute the mbuf+cluster. */ - md->m = m2; - md->data = vtophys(m2->m_data); - /* Pass the received mbuf upwards. */ - sch->last_recv = time_second; - NG_SEND_DATA_ONLY(error, sch->hook, m); - } else { - /* - * We didn't get a mbuf cluster, - * drop received packet, free the - * mbuf we cannot use and recycle - * the mbuf+cluster we already had. - */ - m_freem(m2); - sch->last_rdrop = time_second; - sch->rx_drop++; - } - } else { - /* - * We didn't get a mbuf, drop received packet - * and recycle the "old" mbuf+cluster. - */ - sch->last_rdrop = time_second; - sch->rx_drop++; - } + /* Substitute the mbuf+cluster. */ + md->m = m2; + md->data = vtophys(m2->m_data); + /* Pass the received mbuf upwards. */ + sch->last_recv = time_second; + NG_SEND_DATA_ONLY(error, sch->hook, m); + } else { + /* + * We didn't get a mbuf cluster, + * drop received packet and recycle + * the mbuf+cluster we already had. + */ + sch->last_rdrop = time_second; + sch->rx_drop++; + } } else if (error == 9) { sch->last_rxerr = time_second; sch->crc_error++; @@ -1286,18 +1274,9 @@ sc->mdt[ch][i].m = NULL; sc->mdt[ch][i].data = 0; - MGETHDR(m, M_TRYWAIT, MT_DATA); + m = m_getcl(M_TRYWAIT, MT_DATA, M_PKTHDR); if (m == NULL) goto errfree; - MCLGET(m, M_TRYWAIT); - if ((m->m_flags & M_EXT) == 0) { - /* We've waited mbuf_wait and still got nothing. - We're calling with M_TRYWAIT anyway - a little - defensive programming costs us very little - if - anything at all in the case of error. */ - m_free(m); - goto errfree; - } sc->mdr[ch][i].m = m; sc->mdr[ch][i].data = vtophys(m->m_data); sc->mdr[ch][i].status = 1600; /* MTU */ Index: src/sys/dev/my/if_my.c =================================================================== RCS file: /home/ncvs/src/sys/dev/my/if_my.c,v retrieving revision 1.9 diff -u -r1.9 if_my.c --- src/sys/dev/my/if_my.c 30 May 2002 23:41:51 -0000 1.9 +++ src/sys/dev/my/if_my.c 20 Aug 2002 17:32:20 -0000 @@ -1178,22 +1178,13 @@ { struct mbuf *m_new = NULL; - MY_LOCK(sc); - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { printf("my%d: no memory for rx list -- packet dropped!\n", sc->my_unit); - MY_UNLOCK(sc); - return (ENOBUFS); - } - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("my%d: no memory for rx list -- packet dropped!\n", - sc->my_unit); - m_freem(m_new); - MY_UNLOCK(sc); return (ENOBUFS); } + MY_LOCK(sc); c->my_mbuf = m_new; c->my_ptr->my_data = vtophys(mtod(m_new, caddr_t)); c->my_ptr->my_ctl = (MCLBYTES - 1) << MY_RBSShift; @@ -1453,20 +1444,14 @@ * chain. */ m = m_head; - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + if (m_head->m_pkthdr.len > MHLEN) + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m_new = m_gethdr(M_DONTWAIT, MT_DATA); if (m_new == NULL) { printf("my%d: no memory for tx list", sc->my_unit); MY_UNLOCK(sc); return (1); - } - if (m_head->m_pkthdr.len > MHLEN) { - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - m_freem(m_new); - printf("my%d: no memory for tx list", sc->my_unit); - MY_UNLOCK(sc); - return (1); - } } m_copydata(m_head, 0, m_head->m_pkthdr.len, mtod(m_new, caddr_t)); m_new->m_pkthdr.len = m_new->m_len = m_head->m_pkthdr.len; Index: src/sys/dev/ray/if_ray.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ray/if_ray.c,v retrieving revision 1.57 diff -u -r1.57 if_ray.c --- src/sys/dev/ray/if_ray.c 1 Jun 2002 18:50:35 -0000 1.57 +++ src/sys/dev/ray/if_ray.c 20 Aug 2002 17:32:20 -0000 @@ -1789,21 +1789,14 @@ goto skip_read; } - MGETHDR(m0, M_DONTWAIT, MT_DATA); + if (pktlen > MHLEN) + m0 = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m0 = m_gethdr(M_DONTWAIT, MT_DATA); if (m0 == NULL) { - RAY_RECERR(sc, "MGETHDR failed"); + RAY_RECERR(sc, "mbuf resource alloc failed"); ifp->if_ierrors++; goto skip_read; - } - if (pktlen > MHLEN) { - MCLGET(m0, M_DONTWAIT); - if (!(m0->m_flags & M_EXT)) { - RAY_RECERR(sc, "MCLGET failed"); - ifp->if_ierrors++; - m_freem(m0); - m0 = NULL; - goto skip_read; - } } m0->m_pkthdr.rcvif = ifp; m0->m_pkthdr.len = pktlen; Index: src/sys/dev/sbni/if_sbni.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sbni/if_sbni.c,v retrieving revision 1.5 diff -u -r1.5 if_sbni.c --- src/sys/dev/sbni/if_sbni.c 5 Aug 2002 18:14:16 -0000 1.5 +++ src/sys/dev/sbni/if_sbni.c 20 Aug 2002 17:32:20 -0000 @@ -815,29 +815,22 @@ { struct mbuf *m; - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) { - printf("sbni%d: cannot allocate header mbuf\n", - sc->arpcom.ac_if.if_unit); - return (0); - } - /* * We always put the received packet in a single buffer - * either with just an mbuf header or in a cluster attached * to the header. The +2 is to compensate for the alignment * fixup below. */ - if (ETHER_MAX_LEN + 2 > MHLEN) { - /* Attach an mbuf cluster */ - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - m_freem(m); - return (0); - } + if (ETHER_MAX_LEN + 2 > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); + if (m == NULL) { + printf("sbni%d: cannot allocate mbuf resources\n", + sc->arpcom.ac_if.if_unit); + return (0); } m->m_pkthdr.len = m->m_len = ETHER_MAX_LEN + 2; - /* * The +2 is to longword align the start of the real packet. * (sizeof ether_header == 14) Index: src/sys/dev/sn/if_sn.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sn/if_sn.c,v retrieving revision 1.20 diff -u -r1.20 if_sn.c --- src/sys/dev/sn/if_sn.c 21 Jul 2002 04:24:30 -0000 1.20 +++ src/sys/dev/sn/if_sn.c 20 Aug 2002 17:32:20 -0000 @@ -1060,35 +1060,20 @@ packet_length++; /* - * Allocate a header mbuf from the kernel. + * Allocate mbuf + cluster. */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) - goto out; - - m->m_pkthdr.rcvif = &sc->arpcom.ac_if; - m->m_pkthdr.len = m->m_len = packet_length; - - /* - * Attach an mbuf cluster - */ - MCLGET(m, M_DONTWAIT); - - /* - * Insist on getting a cluster - */ - if ((m->m_flags & M_EXT) == 0) { - m_freem(m); + if ((m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR)) == NULL) { ++sc->arpcom.ac_if.if_ierrors; - printf("sn: snread() kernel memory allocation problem\n"); + printf("sn: snread() cannot allocate mbuf resources\n"); goto out; } + m->m_pkthdr.rcvif = &sc->arpcom.ac_if; + m->m_pkthdr.len = m->m_len = packet_length; eh = mtod(m, struct ether_header *); /* * Get packet, including link layer address, from interface. */ - data = (u_char *) eh; insw(BASE + DATA_REG_W, data, packet_length >> 1); if (packet_length & 1) { Index: src/sys/dev/sr/if_sr.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sr/if_sr.c,v retrieving revision 1.49 diff -u -r1.49 if_sr.c --- src/sys/dev/sr/if_sr.c 21 Jul 2002 04:25:30 -0000 1.49 +++ src/sys/dev/sr/if_sr.c 20 Aug 2002 17:32:20 -0000 @@ -2089,7 +2089,10 @@ sc->unit, rxstat, len); #endif - MGETHDR(m, M_DONTWAIT, MT_DATA); + if (len > MHLEN) + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m = m_gethdr(M_DONTWAIT, MT_DATA); if (m == NULL) { /* * eat (flush) packet if get mbuf fail!! @@ -2106,19 +2109,6 @@ m->m_pkthdr.rcvif = NULL; #endif /* NETGRAPH */ m->m_pkthdr.len = m->m_len = len; - if (len > MHLEN) { - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - /* - * We couldn't get a big enough - * message packet, so we'll send the - * packet to /dev/null... - */ - m_freem(m); - sr_eat_packet(sc, 1); - continue; - } - } /* * OK, we've got a good message buffer. Now we can * copy the received message into it Index: src/sys/dev/tx/if_txvar.h =================================================================== RCS file: /home/ncvs/src/sys/dev/tx/if_txvar.h,v retrieving revision 1.12 diff -u -r1.12 if_txvar.h --- src/sys/dev/tx/if_txvar.h 19 Aug 2002 20:36:08 -0000 1.12 +++ src/sys/dev/tx/if_txvar.h 20 Aug 2002 17:32:20 -0000 @@ -153,14 +153,4 @@ epic_write_phy_reg((sc),(phy),(reg),(val)) /* Macro to get either mbuf cluster or nothing */ -#define EPIC_MGETCLUSTER(m) \ - { MGETHDR((m),M_DONTWAIT,MT_DATA); \ - if (m) { \ - MCLGET((m),M_DONTWAIT); \ - if( 0 == ((m)->m_flags & M_EXT) ) { \ - m_freem(m); \ - (m) = NULL; \ - } \ - } \ - } - +#define EPIC_MGETCLUSTER(m) (m) = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR) Index: src/sys/dev/txp/if_txp.c =================================================================== RCS file: /home/ncvs/src/sys/dev/txp/if_txp.c,v retrieving revision 1.11 diff -u -r1.11 if_txp.c --- src/sys/dev/txp/if_txp.c 4 Apr 2002 21:03:17 -0000 1.11 +++ src/sys/dev/txp/if_txp.c 20 Aug 2002 17:32:20 -0000 @@ -769,19 +769,14 @@ */ struct mbuf *mnew; - MGETHDR(mnew, M_DONTWAIT, MT_DATA); + if (m->m_len > (MHLEN - 2)) + mnew = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + mnew = m_gethdr(M_DONTWAIT, MT_DATA); if (mnew == NULL) { m_freem(m); goto next; } - if (m->m_len > (MHLEN - 2)) { - MCLGET(mnew, M_DONTWAIT); - if (!(mnew->m_flags & M_EXT)) { - m_freem(mnew); - m_freem(m); - goto next; - } - } mnew->m_pkthdr.rcvif = ifp; m_adj(mnew, 2); mnew->m_pkthdr.len = mnew->m_len = m->m_len; @@ -852,13 +847,9 @@ if (sd->sd_mbuf != NULL) break; - MGETHDR(sd->sd_mbuf, M_DONTWAIT, MT_DATA); + sd->sd_mbuf = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (sd->sd_mbuf == NULL) goto err_sd; - - MCLGET(sd->sd_mbuf, M_DONTWAIT); - if ((sd->sd_mbuf->m_flags & M_EXT) == 0) - goto err_mbuf; sd->sd_mbuf->m_pkthdr.rcvif = ifp; sd->sd_mbuf->m_pkthdr.len = sd->sd_mbuf->m_len = MCLBYTES; @@ -1157,15 +1148,9 @@ for (i = 0; i < RXBUF_ENTRIES; i++) { sd = sc->sc_rxbufs[i].rb_sd; - MGETHDR(sd->sd_mbuf, M_DONTWAIT, MT_DATA); + sd->sd_mbuf = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (sd->sd_mbuf == NULL) return(ENOBUFS); - - MCLGET(sd->sd_mbuf, M_DONTWAIT); - if ((sd->sd_mbuf->m_flags & M_EXT) == 0) { - m_freem(sd->sd_mbuf); - return(ENOBUFS); - } sd->sd_mbuf->m_pkthdr.len = sd->sd_mbuf->m_len = MCLBYTES; sd->sd_mbuf->m_pkthdr.rcvif = ifp; Index: src/sys/dev/usb/if_aue.c =================================================================== RCS file: /home/ncvs/src/sys/dev/usb/if_aue.c,v retrieving revision 1.62 diff -u -r1.62 if_aue.c --- src/sys/dev/usb/if_aue.c 30 Jul 2002 23:30:14 -0000 1.62 +++ src/sys/dev/usb/if_aue.c 20 Aug 2002 17:32:20 -0000 @@ -812,18 +812,10 @@ struct mbuf *m_new = NULL; if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { printf("aue%d: no memory for rx list " "-- packet dropped!\n", sc->aue_unit); - return (ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("aue%d: no memory for rx list " - "-- packet dropped!\n", sc->aue_unit); - m_freem(m_new); return (ENOBUFS); } m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; Index: src/sys/dev/usb/if_cue.c =================================================================== RCS file: /home/ncvs/src/sys/dev/usb/if_cue.c,v retrieving revision 1.28 diff -u -r1.28 if_cue.c --- src/sys/dev/usb/if_cue.c 7 Apr 2002 12:19:50 -0000 1.28 +++ src/sys/dev/usb/if_cue.c 20 Aug 2002 17:32:20 -0000 @@ -568,18 +568,10 @@ struct mbuf *m_new = NULL; if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { printf("cue%d: no memory for rx list " "-- packet dropped!\n", sc->cue_unit); - return(ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("cue%d: no memory for rx list " - "-- packet dropped!\n", sc->cue_unit); - m_freem(m_new); return(ENOBUFS); } m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; Index: src/sys/dev/usb/if_kue.c =================================================================== RCS file: /home/ncvs/src/sys/dev/usb/if_kue.c,v retrieving revision 1.41 diff -u -r1.41 if_kue.c --- src/sys/dev/usb/if_kue.c 15 Jul 2002 14:37:36 -0000 1.41 +++ src/sys/dev/usb/if_kue.c 20 Aug 2002 17:32:20 -0000 @@ -542,18 +542,10 @@ struct mbuf *m_new = NULL; if (m == NULL) { - MGETHDR(m_new, M_DONTWAIT, MT_DATA); + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m_new == NULL) { printf("kue%d: no memory for rx list " "-- packet dropped!\n", sc->kue_unit); - return(ENOBUFS); - } - - MCLGET(m_new, M_DONTWAIT); - if (!(m_new->m_flags & M_EXT)) { - printf("kue%d: no memory for rx list " - "-- packet dropped!\n", sc->kue_unit); - m_freem(m_new); return(ENOBUFS); } m_new->m_len = m_new->m_pkthdr.len = MCLBYTES; Index: src/sys/dev/wi/if_wi.c =================================================================== RCS file: /home/ncvs/src/sys/dev/wi/if_wi.c,v retrieving revision 1.112 diff -u -r1.112 if_wi.c --- src/sys/dev/wi/if_wi.c 15 Aug 2002 07:13:17 -0000 1.112 +++ src/sys/dev/wi/if_wi.c 20 Aug 2002 17:32:20 -0000 @@ -588,18 +588,11 @@ int datlen, hdrlen; /* first allocate mbuf for packet storage */ - MGETHDR(m, M_DONTWAIT, MT_DATA); + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) { ifp->if_ierrors++; return; } - MCLGET(m, M_DONTWAIT); - if (!(m->m_flags & M_EXT)) { - m_freem(m); - ifp->if_ierrors++; - return; - } - m->m_pkthdr.rcvif = ifp; /* now read wi_frame first so we know how much data to read */ @@ -692,18 +685,11 @@ return; } - MGETHDR(m, M_DONTWAIT, MT_DATA); + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) { ifp->if_ierrors++; return; } - MCLGET(m, M_DONTWAIT); - if (!(m->m_flags & M_EXT)) { - m_freem(m); - ifp->if_ierrors++; - return; - } - eh = mtod(m, struct ether_header *); m->m_pkthdr.rcvif = ifp; Index: src/sys/dev/xe/if_xe.c =================================================================== RCS file: /home/ncvs/src/sys/dev/xe/if_xe.c,v retrieving revision 1.30 diff -u -r1.30 if_xe.c --- src/sys/dev/xe/if_xe.c 26 Feb 2002 03:37:35 -0000 1.30 +++ src/sys/dev/xe/if_xe.c 20 Aug 2002 17:32:20 -0000 @@ -654,26 +654,20 @@ if (len & 0x01) len++; - MGETHDR(mbp, M_DONTWAIT, MT_DATA); /* Allocate a header mbuf */ + /* + * If the mbuf header isn't big enough for the packet, attach an + * mbuf cluster to hold it. The +2 is to allow for the nasty little + * alignment hack below. + */ + if (len + 2 > MHLEN) + mbp = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + mbp = m_gethdr(M_DONTWAIT, MT_DATA); + if (mbp != NULL) { mbp->m_pkthdr.rcvif = ifp; mbp->m_pkthdr.len = mbp->m_len = len; - /* - * If the mbuf header isn't big enough for the packet, attach an - * mbuf cluster to hold it. The +2 is to allow for the nasty little - * alignment hack below. - */ - if (len + 2 > MHLEN) { - MCLGET(mbp, M_DONTWAIT); - if ((mbp->m_flags & M_EXT) == 0) { - m_freem(mbp); - mbp = NULL; - } - } - } - - if (mbp != NULL) { /* * The Ethernet header is 14 bytes long; thus the actual packet data * won't be 32-bit aligned when it's dumped into the mbuf. We