diff mbox

[10/47] iwlwifi: pcie: fix TX queue locking

Message ID 1397416802-32403-10-git-send-email-egrumbach@gmail.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Emmanuel Grumbach April 13, 2014, 7:19 p.m. UTC
From: Johannes Berg <johannes.berg@intel.com>

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 | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c
index 57e98cc..152c763 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)
 	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++;