aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/e1000/if_lem.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2013-11-02 09:16:11 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2013-11-02 09:16:11 +0000
commitd480f5b820678ebaac1d89eda833999d40281ce9 (patch)
tree91eaafd14fbb397ac3e428cf8d35112ef5c594ff /sys/dev/e1000/if_lem.c
parent7ac2e58818468e54d67b36998a1a140a0c9f3b63 (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.c6
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);