wifi: iwlwifi: mvm: check the right csa_active
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 20 Jun 2023 10:03:49 +0000 (13:03 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 21 Jun 2023 12:02:14 +0000 (14:02 +0200)
When the firmware says that the channel switch is happening, we check
that we know about that switch by checking the csa_active bit.

Until now, we checked the bss_conf from the vif instead of taking the
bss_conf of the link.
Fix that.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230620125813.63f835a4f578.I0bb2a231e4da506b7c751dc23a428558f9ecfa75@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c

index b8143ae..7369a45 100644 (file)
@@ -1763,6 +1763,7 @@ void iwl_mvm_channel_switch_start_notif(struct iwl_mvm *mvm,
        u32 id;
        u8 notif_ver = iwl_fw_lookup_notif_ver(mvm->fw, MAC_CONF_GROUP,
                                               CHANNEL_SWITCH_START_NOTIF, 0);
+       bool csa_active;
 
        rcu_read_lock();
 
@@ -1778,6 +1779,7 @@ void iwl_mvm_channel_switch_start_notif(struct iwl_mvm *mvm,
                        goto out_unlock;
 
                id = mac_id;
+               csa_active = vif->bss_conf.csa_active;
        } else {
                struct iwl_channel_switch_start_notif *notif = (void *)pkt->data;
                u32 link_id = le32_to_cpu(notif->link_id);
@@ -1789,6 +1791,7 @@ void iwl_mvm_channel_switch_start_notif(struct iwl_mvm *mvm,
 
                id = link_id;
                vif = bss_conf->vif;
+               csa_active = bss_conf->csa_active;
        }
 
        mvmvif = iwl_mvm_vif_from_mac80211(vif);
@@ -1828,7 +1831,7 @@ void iwl_mvm_channel_switch_start_notif(struct iwl_mvm *mvm,
                 */
                if (iwl_fw_lookup_notif_ver(mvm->fw, MAC_CONF_GROUP,
                                            CHANNEL_SWITCH_ERROR_NOTIF,
-                                           0) && !vif->bss_conf.csa_active) {
+                                           0) && !csa_active) {
                        IWL_DEBUG_INFO(mvm, "Channel Switch was canceled\n");
                        iwl_mvm_cancel_channel_switch(mvm, vif, id);
                        break;