iwlwifi: pcie: fix TX queue locking
authorJohannes Berg <johannes.berg@intel.com>
Thu, 27 Feb 2014 13:36:19 +0000 (14:36 +0100)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 13 Apr 2014 06:35:53 +0000 (09:35 +0300)
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>
drivers/net/wireless/iwlwifi/pcie/rx.c

index 57e98cca4e97be3360ac226fe1578c3fa2791b31..152c763082b4d64ada8872f725e620a108d55069 100644 (file)
@@ -1042,8 +1042,11 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
        if (inta & CSR_INT_BIT_WAKEUP) {
                IWL_DEBUG_ISR(trans, "Wakeup interrupt\n");
                iwl_pcie_rxq_check_wrptr(trans);
-               for (i = 0; i < trans->cfg->base_params->num_of_queues; i++)
+               for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) {
+                       spin_lock(&trans_pcie->txq[i].lock);
                        iwl_pcie_txq_inc_wr_ptr(trans, &trans_pcie->txq[i]);
+                       spin_unlock(&trans_pcie->txq[i].lock);
+               }
 
                isr_stats->wakeup++;