diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2011-04-28 11:51:31 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-29 21:36:14 +0200 |
commit | 81e63263aa3c5bfa64aa3206f4be3e59afc1c183 (patch) | |
tree | 6574c26f54772f16231aac2b329134c63a1a7376 /drivers/net/wireless/iwlegacy/iwl-dev.h | |
parent | iwlegacy: comment typo fix diable -> disable (diff) | |
download | linux-81e63263aa3c5bfa64aa3206f4be3e59afc1c183.tar.xz linux-81e63263aa3c5bfa64aa3206f4be3e59afc1c183.zip |
iwlegacy: fix enqueue hcmd race conditions
We mark command as huge by using meta->flags from other (non huge) command,
but flags can be possibly overridden, when non huge command is enqueued,
what can lead to:
WARNING: at lib/dma-debug.c:696 dma_debug_device_change+0x1a3/0x1f0()
DMA-API: device driver has pending DMA allocations while released from device [count=1]
To fix introduce additional CMD_MAPPED to mark command as mapped and
serialize iwl_enqueue_hcmd() with iwl_tx_cmd_complete() using
hcmd_lock. Serialization will also fix possible race conditions,
because q->read_ptr, q->write_ptr are modified/used in parallel.
Do not change callback, I did (and fixed) that mistake in iwlagn.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlegacy/iwl-dev.h')
-rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-dev.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlegacy/iwl-dev.h b/drivers/net/wireless/iwlegacy/iwl-dev.h index 36c01aa3b7c2..df19d5c69e7f 100644 --- a/drivers/net/wireless/iwlegacy/iwl-dev.h +++ b/drivers/net/wireless/iwlegacy/iwl-dev.h @@ -290,6 +290,7 @@ enum { CMD_SIZE_HUGE = (1 << 0), CMD_ASYNC = (1 << 1), CMD_WANT_SKB = (1 << 2), + CMD_MAPPED = (1 << 3), }; #define DEF_CMD_PAYLOAD_SIZE 320 |