From owner-svn-src-all@FreeBSD.ORG Fri Jan 10 14:49:46 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 71643EA9; Fri, 10 Jan 2014 14:49:46 +0000 (UTC) Received: from ns.kevlo.org (220-135-115-6.HINET-IP.hinet.net [220.135.115.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id F3B8A1208; Fri, 10 Jan 2014 14:49:45 +0000 (UTC) Received: from srg.kevlo.org (mail.kevlo.org [220.135.115.6]) by ns.kevlo.org (8.14.6/8.14.6) with ESMTP id s0AEnclQ022766; Fri, 10 Jan 2014 22:49:39 +0800 (CST) (envelope-from kevlo@FreeBSD.org) Message-ID: <52D00886.9090603@FreeBSD.org> Date: Fri, 10 Jan 2014 22:49:42 +0800 From: Kevin Lo User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Gleb Smirnoff Subject: Re: svn commit: r260501 - head/sys/dev/usb/wlan References: <201401100247.s0A2lK9q066888@svn.freebsd.org> <20140110102032.GC73147@FreeBSD.org> In-Reply-To: <20140110102032.GC73147@FreeBSD.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jan 2014 14:49:46 -0000 On 2014/01/10 18:20, Gleb Smirnoff wrote: > 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. > Fixed. Thanks for pointing that out! Seems like I was not clear headed. I thought I used m_get2 but apparently not. Kevin