diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c index 60067c7f0de..f69aecb554e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | |||
@@ -406,6 +406,7 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id) | |||
406 | struct iwl_tx_queue *txq = &trans_pcie->txq[txq_id]; | 406 | struct iwl_tx_queue *txq = &trans_pcie->txq[txq_id]; |
407 | struct iwl_queue *q = &txq->q; | 407 | struct iwl_queue *q = &txq->q; |
408 | enum dma_data_direction dma_dir; | 408 | enum dma_data_direction dma_dir; |
409 | unsigned long flags; | ||
409 | 410 | ||
410 | if (!q->n_bd) | 411 | if (!q->n_bd) |
411 | return; | 412 | return; |
@@ -418,12 +419,14 @@ static void iwl_tx_queue_unmap(struct iwl_trans *trans, int txq_id) | |||
418 | else | 419 | else |
419 | dma_dir = DMA_TO_DEVICE; | 420 | dma_dir = DMA_TO_DEVICE; |
420 | 421 | ||
422 | spin_lock_irqsave(&trans->shrd->sta_lock, flags); | ||
421 | while (q->write_ptr != q->read_ptr) { | 423 | while (q->write_ptr != q->read_ptr) { |
422 | /* The read_ptr needs to bound by q->n_window */ | 424 | /* The read_ptr needs to bound by q->n_window */ |
423 | iwlagn_txq_free_tfd(trans, txq, get_cmd_index(q, q->read_ptr), | 425 | iwlagn_txq_free_tfd(trans, txq, get_cmd_index(q, q->read_ptr), |
424 | dma_dir); | 426 | dma_dir); |
425 | q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd); | 427 | q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd); |
426 | } | 428 | } |
429 | spin_unlock_irqrestore(&trans->shrd->sta_lock, flags); | ||
427 | } | 430 | } |
428 | 431 | ||
429 | /** | 432 | /** |