diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2013-11-02 09:16:11 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2013-11-02 09:16:11 +0000 |
commit | d480f5b820678ebaac1d89eda833999d40281ce9 (patch) | |
tree | 91eaafd14fbb397ac3e428cf8d35112ef5c594ff /sys/dev/e1000/if_lem.c | |
parent | 7ac2e58818468e54d67b36998a1a140a0c9f3b63 (diff) |
Fix several issues with the busdma(9) KPI use in the e1000 drivers.
The problems do not affect bouncing busdma in a visible way, but are
critical for the dmar backend.
- The bus_dmamap_create(9) is not documented to take BUS_DMA_NOWAIT flag.
- Unload descriptor map after receive.
- Do not reset descriptor map to NULL, bus_dmamap_load(9) requires
valid map, and also this leaks the map.
Reported and tested by: pho
Approved by: jfv
Sponsored by: The FreeBSD Foundation
MFC after: 2 weeks
Notes
Notes:
svn path=/head/; revision=257541
Diffstat (limited to 'sys/dev/e1000/if_lem.c')
-rw-r--r-- | sys/dev/e1000/if_lem.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/dev/e1000/if_lem.c b/sys/dev/e1000/if_lem.c index 676bf8fe1e85..1df8de951ab6 100644 --- a/sys/dev/e1000/if_lem.c +++ b/sys/dev/e1000/if_lem.c @@ -3183,8 +3183,7 @@ lem_allocate_receive_structures(struct adapter *adapter) } /* Create the spare map (used by getbuf) */ - error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT, - &adapter->rx_sparemap); + error = bus_dmamap_create(adapter->rxtag, 0, &adapter->rx_sparemap); if (error) { device_printf(dev, "%s: bus_dmamap_create failed: %d\n", __func__, error); @@ -3193,8 +3192,7 @@ lem_allocate_receive_structures(struct adapter *adapter) rx_buffer = adapter->rx_buffer_area; for (i = 0; i < adapter->num_rx_desc; i++, rx_buffer++) { - error = bus_dmamap_create(adapter->rxtag, BUS_DMA_NOWAIT, - &rx_buffer->map); + error = bus_dmamap_create(adapter->rxtag, 0, &rx_buffer->map); if (error) { device_printf(dev, "%s: bus_dmamap_create failed: %d\n", __func__, error); |