Date: Tue, 18 Jun 2013 22:22:00 +0000 (UTC) From: Marius Strobl <marius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r251971 - stable/9/sys/dev/bce Message-ID: <201306182222.r5IMM0Zl038751@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marius Date: Tue Jun 18 22:21:59 2013 New Revision: 251971 URL: http://svnweb.freebsd.org/changeset/base/251971 Log: Now that r251221 has been MFC'ed to stable/9 in r251939, merge the remainder of r251146 previously partially MFC'ed in r251573: In bce_get_pg_buf(), take advantage of bus_dmamap_load_mbuf_sg(9). Modified: stable/9/sys/dev/bce/if_bce.c Modified: stable/9/sys/dev/bce/if_bce.c ============================================================================== --- stable/9/sys/dev/bce/if_bce.c Tue Jun 18 22:21:59 2013 (r251970) +++ stable/9/sys/dev/bce/if_bce.c Tue Jun 18 22:21:59 2013 (r251971) @@ -5466,10 +5466,10 @@ bce_get_rx_buf_exit: static int bce_get_pg_buf(struct bce_softc *sc, u16 prod, u16 prod_idx) { - bus_addr_t busaddr; + bus_dma_segment_t segs[1]; struct mbuf *m_new = NULL; struct rx_bd *pgbd; - int error, rc = 0; + int error, nsegs, rc = 0; #ifdef BCE_DEBUG u16 debug_prod_idx = prod_idx; #endif @@ -5512,12 +5512,11 @@ bce_get_pg_buf(struct bce_softc *sc, u16 /* ToDo: Consider calling m_fragment() to test error handling. */ /* Map the mbuf cluster into device memory. */ - error = bus_dmamap_load(sc->pg_mbuf_tag, sc->pg_mbuf_map[prod_idx], - mtod(m_new, void *), MCLBYTES, bce_dma_map_addr, &busaddr, - BUS_DMA_NOWAIT); + error = bus_dmamap_load_mbuf_sg(sc->pg_mbuf_tag, + sc->pg_mbuf_map[prod_idx], m_new, segs, &nsegs, BUS_DMA_NOWAIT); /* Handle any mapping errors. */ - if (error || busaddr == 0) { + if (error) { BCE_PRINTF("%s(%d): Error mapping mbuf into page chain!\n", __FILE__, __LINE__); @@ -5528,6 +5527,10 @@ bce_get_pg_buf(struct bce_softc *sc, u16 goto bce_get_pg_buf_exit; } + /* All mbufs must map to a single segment. */ + KASSERT(nsegs == 1, ("%s(): Too many segments returned (%d)!", + __FUNCTION__, nsegs)); + /* ToDo: Do we need bus_dmamap_sync(,,BUS_DMASYNC_PREREAD) here? */ /* @@ -5536,8 +5539,8 @@ bce_get_pg_buf(struct bce_softc *sc, u16 */ pgbd = &sc->pg_bd_chain[PG_PAGE(prod_idx)][PG_IDX(prod_idx)]; - pgbd->rx_bd_haddr_lo = htole32(BCE_ADDR_LO(busaddr)); - pgbd->rx_bd_haddr_hi = htole32(BCE_ADDR_HI(busaddr)); + pgbd->rx_bd_haddr_lo = htole32(BCE_ADDR_LO(segs[0].ds_addr)); + pgbd->rx_bd_haddr_hi = htole32(BCE_ADDR_HI(segs[0].ds_addr)); pgbd->rx_bd_len = htole32(MCLBYTES); pgbd->rx_bd_flags = htole32(RX_BD_FLAGS_START | RX_BD_FLAGS_END);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306182222.r5IMM0Zl038751>