aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/pcie
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-02-27 08:36:19 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-04-13 02:35:53 -0400
commit42646ba046e99d185bbf02373b733e9c5009eac5 (patch)
tree9b8f2a11da142540b962ff11b2818a9ba9052422 /drivers/net/wireless/iwlwifi/pcie
parent43aa616f325554ed20dafce3678c2adaddd15f08 (diff)
iwlwifi: pcie: fix TX queue locking
When updating the write pointer, the TX queue should be locked to get consistent state, fix that in the interrupt handler. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/rx.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
index 57e98cca4e97..152c763082b4 100644
--- a/drivers/net/wireless/iwlwifi/pcie/rx.c
+++ b/drivers/net/wireless/iwlwifi/pcie/rx.c
@@ -1042,8 +1042,11 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
1042 if (inta & CSR_INT_BIT_WAKEUP) { 1042 if (inta & CSR_INT_BIT_WAKEUP) {
1043 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); 1043 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n");
1044 iwl_pcie_rxq_check_wrptr(trans); 1044 iwl_pcie_rxq_check_wrptr(trans);
1045 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) 1045 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) {
1046 spin_lock(&trans_pcie->txq[i].lock);
1046 iwl_pcie_txq_inc_wr_ptr(trans, &trans_pcie->txq[i]); 1047 iwl_pcie_txq_inc_wr_ptr(trans, &trans_pcie->txq[i]);
1048 spin_unlock(&trans_pcie->txq[i].lock);
1049 }
1047 1050
1048 isr_stats->wakeup++; 1051 isr_stats->wakeup++;
1049 1052