iwlwifi: fix enqueue hcmd race conditions
authorStanislaw Gruszka <sgruszka@redhat.com>
Thu, 31 Mar 2011 15:36:26 +0000 (17:36 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 7 Apr 2011 19:34:11 +0000 (15:34 -0400)
commit3598e1774c94e55c71b585340e7dc4538f310e3f
tree09f7d500b76090f3cdb66bf2162d63d222696898
parent08b8099c128d601fd675b212ef8b10397706b633
iwlwifi: 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.

On the way fix whitespace.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-tx.c