From owner-p4-projects@FreeBSD.ORG Fri Nov 3 00:20:28 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7FF9916A416; Fri, 3 Nov 2006 00:20:28 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5816316A412 for ; Fri, 3 Nov 2006 00:20:28 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6E48043D5E for ; Fri, 3 Nov 2006 00:20:27 +0000 (GMT) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kA30KRx9000878 for ; Fri, 3 Nov 2006 00:20:27 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kA30KRkn000875 for perforce@freebsd.org; Fri, 3 Nov 2006 00:20:27 GMT (envelope-from imp@freebsd.org) Date: Fri, 3 Nov 2006 00:20:27 GMT Message-Id: <200611030020.kA30KRkn000875@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 109084 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Nov 2006 00:20:28 -0000 http://perforce.freebsd.org/chv.cgi?CH=109084 Change 109084 by imp@imp_lighthouse on 2006/11/03 00:19:45 Avoid a copy and alloc/free pair when there's only one mbuf. Suggested by: scottl@, sam@ Affected files ... .. //depot/projects/arm/src/sys/arm/at91/if_ate.c#60 edit Differences ... ==== //depot/projects/arm/src/sys/arm/at91/if_ate.c#60 (text+ko) ==== @@ -778,7 +778,7 @@ struct ate_softc *sc = ifp->if_softc; struct mbuf *m, *mdefrag; bus_dma_segment_t segs[1]; - int nseg; + int nseg, e; ATE_ASSERT_LOCKED(sc); if (ifp->if_drv_flags & IFF_DRV_OACTIVE) @@ -800,14 +800,19 @@ ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; return; } - mdefrag = m_defrag(m, M_DONTWAIT); - if (mdefrag == NULL) { - IFQ_DRV_PREPEND(&ifp->if_snd, m); - return; + e = bus_dmamap_load_mbuf_sg(sc->mtag, sc->tx_map[sc->txcur], m, + segs, &nseg, 0); + if (e == EFBIG) { + mdefrag = m_defrag(m, M_DONTWAIT); + if (mdefrag == NULL) { + IFQ_DRV_PREPEND(&ifp->if_snd, m); + return; + } + m = mdefrag; + e = bus_dmamap_load_mbuf_sg(sc->mtag, + sc->tx_map[sc->txcur], m, segs, &nseg, 0); } - m = mdefrag; - if (bus_dmamap_load_mbuf_sg(sc->mtag, sc->tx_map[sc->txcur], m, - segs, &nseg, 0) != 0) { + if (e == EFBIG) { m_freem(m); continue; }