summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordlg <dlg@openbsd.org>2020-12-26 11:49:43 +0000
committerdlg <dlg@openbsd.org>2020-12-26 11:49:43 +0000
commitd1bf2e3923e5f7a416e8567c202cb8ce2bb0d011 (patch)
tree4e1df48e1faa860373e893e7d90d4b9918d9c5a5
parentsprinkle some bus_dmamap_syncs around the cq handling. (diff)
downloadwireguard-openbsd-d1bf2e3923e5f7a416e8567c202cb8ce2bb0d011.tar.xz
wireguard-openbsd-d1bf2e3923e5f7a416e8567c202cb8ce2bb0d011.zip
add some bus_dmamap_syncs around the rq.
ok jmatthew@
-rw-r--r--sys/dev/pci/if_mcx.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sys/dev/pci/if_mcx.c b/sys/dev/pci/if_mcx.c
index 4c17053ed27..079df42abd1 100644
--- a/sys/dev/pci/if_mcx.c
+++ b/sys/dev/pci/if_mcx.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_mcx.c,v 1.84 2020/12/26 11:40:44 dlg Exp $ */
+/* $OpenBSD: if_mcx.c,v 1.85 2020/12/26 11:49:43 dlg Exp $ */
/*
* Copyright (c) 2017 David Gwynne <dlg@openbsd.org>
@@ -4661,6 +4661,9 @@ mcx_create_rq(struct mcx_softc *sc, struct mcx_rx *rx, int db, int cqn)
mbin->rq_wq.wq_log_stride = htobe16(4);
mbin->rq_wq.wq_log_size = MCX_LOG_RQ_SIZE;
+ bus_dmamap_sync(sc->sc_dmat, MCX_DMA_MAP(&rx->rx_rq_mem),
+ 0, MCX_DMA_LEN(&rx->rx_rq_mem), BUS_DMASYNC_PREWRITE);
+
/* physical addresses follow the mailbox in data */
mcx_cmdq_mboxes_pas(&mxm, sizeof(*mbin) + 0x10, npages, &rx->rx_rq_mem);
mcx_cmdq_post(sc, cqe, 0);
@@ -4693,6 +4696,8 @@ mcx_create_rq(struct mcx_softc *sc, struct mcx_rx *rx, int db, int cqn)
return (0);
free_mxm:
+ bus_dmamap_sync(sc->sc_dmat, MCX_DMA_MAP(&rx->rx_rq_mem),
+ 0, MCX_DMA_LEN(&rx->rx_rq_mem), BUS_DMASYNC_POSTWRITE);
mcx_dmamem_free(sc, &mxm);
free_rq:
mcx_dmamem_free(sc, &rx->rx_rq_mem);
@@ -4791,8 +4796,11 @@ mcx_destroy_rq(struct mcx_softc *sc, struct mcx_rx *rx)
return -1;
}
- rx->rx_rqn = 0;
+ bus_dmamap_sync(sc->sc_dmat, MCX_DMA_MAP(&rx->rx_rq_mem),
+ 0, MCX_DMA_LEN(&rx->rx_rq_mem), BUS_DMASYNC_POSTWRITE);
mcx_dmamem_free(sc, &rx->rx_rq_mem);
+
+ rx->rx_rqn = 0;
return 0;
}
@@ -6529,6 +6537,9 @@ mcx_rx_fill_slots(struct mcx_softc *sc, struct mcx_rx *rx,
struct mbuf *m;
uint slot, p, fills;
+ bus_dmamap_sync(sc->sc_dmat, MCX_DMA_MAP(&rx->rx_rq_mem),
+ 0, MCX_DMA_LEN(&rx->rx_rq_mem), BUS_DMASYNC_POSTWRITE);
+
p = *prod;
slot = (p % (1 << MCX_LOG_RQ_SIZE));
rqe = ring;
@@ -6559,6 +6570,9 @@ mcx_rx_fill_slots(struct mcx_softc *sc, struct mcx_rx *rx,
slot = 0;
}
+ bus_dmamap_sync(sc->sc_dmat, MCX_DMA_MAP(&rx->rx_rq_mem),
+ 0, MCX_DMA_LEN(&rx->rx_rq_mem), BUS_DMASYNC_PREWRITE);
+
if (fills != 0) {
*rx->rx_doorbell = htobe32(p & MCX_WQ_DOORBELL_MASK);
/* barrier? */