diff options
author | 2016-01-07 06:49:04 +0000 | |
---|---|---|
committer | 2016-01-07 06:49:04 +0000 | |
commit | de35ca94614beb4aa93f9ec9900b4a5f6a787f22 (patch) | |
tree | 194a5703df609579477b8a680e277e6eb5a6289e | |
parent | unify the bus_dmamap_sync calls around the tx and rx rings. (diff) | |
download | wireguard-openbsd-de35ca94614beb4aa93f9ec9900b4a5f6a787f22.tar.xz wireguard-openbsd-de35ca94614beb4aa93f9ec9900b4a5f6a787f22.zip |
host the rx ring dmamap syncs out of em_get_buf into em_rxfill.
this lets us do the syncs once for a fill of the ring instead of
once for every packet put onto the ring. it mirrors how we try to
do things for tx.
-rw-r--r-- | sys/dev/pci/if_em.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/sys/dev/pci/if_em.c b/sys/dev/pci/if_em.c index fec8271333a..e386f38a21a 100644 --- a/sys/dev/pci/if_em.c +++ b/sys/dev/pci/if_em.c @@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE. ***************************************************************************/ -/* $OpenBSD: if_em.c,v 1.321 2016/01/07 06:37:45 dlg Exp $ */ +/* $OpenBSD: if_em.c,v 1.322 2016/01/07 06:49:04 dlg Exp $ */ /* $FreeBSD: if_em.c,v 1.46 2004/09/29 18:28:28 mlaier Exp $ */ #include <dev/pci/if_em.h> @@ -2454,17 +2454,9 @@ em_get_buf(struct em_softc *sc, int i) BUS_DMASYNC_PREREAD); pkt->m_head = m; - bus_dmamap_sync(sc->sc_dmat, sc->rxdma.dma_map, - sizeof(*desc) * i, sizeof(*desc), - BUS_DMASYNC_POSTWRITE); - bzero(desc, sizeof(*desc)); desc->buffer_addr = htole64(pkt->map->dm_segs[0].ds_addr); - bus_dmamap_sync(sc->sc_dmat, sc->rxdma.dma_map, - sizeof(*desc) * i, sizeof(*desc), - BUS_DMASYNC_PREWRITE); - return (0); } @@ -2703,6 +2695,10 @@ em_rxfill(struct em_softc *sc) i = sc->last_rx_desc_filled; + bus_dmamap_sync(sc->sc_dmat, sc->rxdma.dma_map, + 0, sc->rxdma.dma_map->dm_mapsize, + BUS_DMASYNC_POSTWRITE); + for (slots = if_rxr_get(&sc->rx_ring, sc->num_rx_desc); slots > 0; slots--) { if (++i == sc->num_rx_desc) @@ -2717,6 +2713,10 @@ em_rxfill(struct em_softc *sc) if_rxr_put(&sc->rx_ring, slots); + bus_dmamap_sync(sc->sc_dmat, sc->rxdma.dma_map, + 0, sc->rxdma.dma_map->dm_mapsize, + BUS_DMASYNC_PREWRITE); + return (post); } |