Kevin, On Fri, Jan 10, 2014 at 02:47:20AM +0000, Kevin Lo wrote: K> Author: kevlo K> Date: Fri Jan 10 02:47:20 2014 K> New Revision: 260501 K> URL: http://svnweb.freebsd.org/changeset/base/260501 K> K> Log: K> Use m_getcl() instead of MGETHDR/MCLGET macros. K> K> Suggested by: glebius K> K> Modified: K> head/sys/dev/usb/wlan/if_rsu.c K> K> Modified: head/sys/dev/usb/wlan/if_rsu.c K> ============================================================================== K> --- head/sys/dev/usb/wlan/if_rsu.c Fri Jan 10 01:44:34 2014 (r260500) K> +++ head/sys/dev/usb/wlan/if_rsu.c Fri Jan 10 02:47:20 2014 (r260501) K> @@ -1145,16 +1145,9 @@ rsu_event_survey(struct rsu_softc *sc, u K> pktlen = sizeof(*wh) + le32toh(bss->ieslen); K> if (__predict_false(pktlen > MCLBYTES)) K> return; K> - MGETHDR(m, M_NOWAIT, MT_DATA); K> + m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); K> if (__predict_false(m == NULL)) K> return; K> - if (pktlen > MHLEN) { K> - MCLGET(m, M_NOWAIT); K> - if (!(m->m_flags & M_EXT)) { K> - m_free(m); K> - return; K> - } K> - } K> wh = mtod(m, struct ieee80211_frame *); K> wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT | K> IEEE80211_FC0_SUBTYPE_BEACON; K> @@ -1358,19 +1351,11 @@ rsu_rx_frame(struct rsu_softc *sc, uint8 K> DPRINTFN(5, "Rx frame len=%d rate=%d infosz=%d rssi=%d\n", K> pktlen, rate, infosz, *rssi); K> K> - MGETHDR(m, M_NOWAIT, MT_DATA); K> + m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); K> if (__predict_false(m == NULL)) { K> ifp->if_ierrors++; K> return NULL; K> } K> - if (pktlen > MHLEN) { K> - MCLGET(m, M_NOWAIT); K> - if (__predict_false(!(m->m_flags & M_EXT))) { K> - ifp->if_ierrors++; K> - m_freem(m); K> - return NULL; K> - } K> - } K> /* Finalize mbuf. */ K> m->m_pkthdr.rcvif = ifp; K> /* Hardware does Rx TCP checksum offload. */
Sorry, but the correct code would be: if (pktlen > MHLEN) m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); else m = m_gethdr(M_NOWAIT, MT_DATA); if (__predict_false(m == NULL)) { ifp->if_ierrors++; return NULL; } Alternatively, you can use: m = m_get2(pktlen, M_NOWAIT, MT_DATA, M_PKTHDR); if (__predict_false(m == NULL)) { ifp->if_ierrors++; return NULL; } With committed code we are wasting memory for small packets. -- Totus tuus, Glebius. _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"