wifi: iwlwifi: pull from TXQs with softirqs disabled
authorJohannes Berg <johannes.berg@intel.com>
Wed, 14 Jun 2023 09:41:22 +0000 (12:41 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 19 Jun 2023 10:05:25 +0000 (12:05 +0200)
In mac80211, it's required that we pull from TXQs by calling
ieee80211_tx_dequeue() only with softirqs disabled. However,
in iwl_mvm_queue_state_change() we're often called with them
enabled, e.g. from flush if anything was flushed, triggering
a mac80211 warning.

Fix that by disabling the softirqs across the TX call.

Fixes: cfbc6c4c5b91 ("iwlwifi: mvm: support mac80211 TXQs model")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123446.0feef7fa81db.I4dd62542d955b40dd8f0af34fa4accb9d0d17c7e@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/ops.c

index 4306425..cc04d7c 100644 (file)
@@ -1740,8 +1740,11 @@ static void iwl_mvm_queue_state_change(struct iwl_op_mode *op_mode,
                else
                        set_bit(IWL_MVM_TXQ_STATE_STOP_FULL, &mvmtxq->state);
 
-               if (start && mvmsta->sta_state != IEEE80211_STA_NOTEXIST)
+               if (start && mvmsta->sta_state != IEEE80211_STA_NOTEXIST) {
+                       local_bh_disable();
                        iwl_mvm_mac_itxq_xmit(mvm->hw, txq);
+                       local_bh_enable();
+               }
        }
 
 out: