summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordlg <dlg@openbsd.org>2016-01-07 06:49:04 +0000
committerdlg <dlg@openbsd.org>2016-01-07 06:49:04 +0000
commitde35ca94614beb4aa93f9ec9900b4a5f6a787f22 (patch)
tree194a5703df609579477b8a680e277e6eb5a6289e
parentunify the bus_dmamap_sync calls around the tx and rx rings. (diff)
downloadwireguard-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.c18
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);
}