From owner-svn-src-all@FreeBSD.ORG Fri Jan 10 10:20:35 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 5FF8A5E3; Fri, 10 Jan 2014 10:20:35 +0000 (UTC) Received: from cell.glebius.int.ru (glebius.int.ru [81.19.69.10]) (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 BF3461D0F; Fri, 10 Jan 2014 10:20:33 +0000 (UTC) Received: from cell.glebius.int.ru (localhost [127.0.0.1]) by cell.glebius.int.ru (8.14.7/8.14.7) with ESMTP id s0AAKWLK033447 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 10 Jan 2014 14:20:32 +0400 (MSK) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebius.int.ru (8.14.7/8.14.7/Submit) id s0AAKW1D033446; Fri, 10 Jan 2014 14:20:32 +0400 (MSK) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebius.int.ru: glebius set sender to glebius@FreeBSD.org using -f Date: Fri, 10 Jan 2014 14:20:32 +0400 From: Gleb Smirnoff To: Kevin Lo Subject: Re: svn commit: r260501 - head/sys/dev/usb/wlan Message-ID: <20140110102032.GC73147@FreeBSD.org> References: <201401100247.s0A2lK9q066888@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201401100247.s0A2lK9q066888@svn.freebsd.org> User-Agent: Mutt/1.5.22 (2013-10-16) 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 10:20:35 -0000 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.