summaryrefslogtreecommitdiffstats
path: root/sys/dev/e1000/if_em.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-12-17 13:18:41 +0000
committerkib <kib@FreeBSD.org>2013-12-17 13:18:41 +0000
commit3e0674d8073161d9702f24c4bea374b3391de589 (patch)
treea482490d8f4402a9211c298f9c8f0f14ca16b49f /sys/dev/e1000/if_em.c
parent293c11687ede082f16e5f20e6fa5328b1330cf99 (diff)
downloadFreeBSD-src-3e0674d8073161d9702f24c4bea374b3391de589.zip
FreeBSD-src-3e0674d8073161d9702f24c4bea374b3391de589.tar.gz
MFC r257541:
Fix several issues with the busdma(9) KPI use in the e1000 drivers.
Diffstat (limited to 'sys/dev/e1000/if_em.c')
-rw-r--r--sys/dev/e1000/if_em.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 16e1d6f..516e84b 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -4059,8 +4059,7 @@ em_allocate_receive_buffers(struct rx_ring *rxr)
rxbuf = rxr->rx_buffers;
for (int i = 0; i < adapter->num_rx_desc; i++, rxbuf++) {
rxbuf = &rxr->rx_buffers[i];
- error = bus_dmamap_create(rxr->rxtag, BUS_DMA_NOWAIT,
- &rxbuf->map);
+ error = bus_dmamap_create(rxr->rxtag, 0, &rxbuf->map);
if (error) {
device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
__func__, error);
@@ -4465,6 +4464,7 @@ em_rxeof(struct rx_ring *rxr, int count, int *done)
em_rx_discard(rxr, i);
goto next_desc;
}
+ bus_dmamap_unload(rxr->rxtag, rxr->rx_buffers[i].map);
/* Assign correct length to the current fragment */
mp = rxr->rx_buffers[i].m_head;
@@ -4551,6 +4551,8 @@ em_rx_discard(struct rx_ring *rxr, int i)
struct em_buffer *rbuf;
rbuf = &rxr->rx_buffers[i];
+ bus_dmamap_unload(rxr->rxtag, rbuf->map);
+
/* Free any previous pieces */
if (rxr->fmp != NULL) {
rxr->fmp->m_flags |= M_PKTHDR;
OpenPOWER on IntegriCloud