iwlwifi: stop interrupts before stopping device
authorDavid Spinadel <david.spinadel@intel.com>
Sun, 12 Aug 2012 05:14:04 +0000 (08:14 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 10 Sep 2012 17:11:53 +0000 (19:11 +0200)
If an RX interrupt is signalled after or during apm_stop
we may try to access the peripherals which are already
down. Prevent this by disabling interrupts first.

Signed-off-by: David Spinadel <david.spinadel@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/pcie/trans.c

index 913ad46a668615cc5d2a96bc2521f59f18620e5d..7da075f5bffa39a495689211e57069fdeb81f848 100644 (file)
@@ -1453,6 +1453,10 @@ static void iwl_trans_pcie_stop_hw(struct iwl_trans *trans,
        bool hw_rfkill;
        unsigned long flags;
 
+       spin_lock_irqsave(&trans_pcie->irq_lock, flags);
+       iwl_disable_interrupts(trans);
+       spin_unlock_irqrestore(&trans_pcie->irq_lock, flags);
+
        iwl_apm_stop(trans);
 
        spin_lock_irqsave(&trans_pcie->irq_lock, flags);