OSDN Git Service

wifi: iwlwifi: mvm: fix narrow RU check for MLO
authorJohannes Berg <johannes.berg@intel.com>
Wed, 29 Mar 2023 07:05:08 +0000 (10:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 30 Mar 2023 10:08:36 +0000 (12:08 +0200)
This needs to apply to the link, not deflink.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230329100039.0347fa77d522.Ibdf7a40cbe86e64ce086f243330fc27f43aeb3aa@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index c76c6b1..9eb95ed 100644 (file)
@@ -3392,20 +3392,27 @@ static void iwl_mvm_check_he_obss_narrow_bw_ru_iter(struct wiphy *wiphy,
        rcu_read_unlock();
 }
 
-static void iwl_mvm_check_he_obss_narrow_bw_ru(struct ieee80211_hw *hw,
-                                              struct ieee80211_vif *vif)
+static void
+iwl_mvm_check_he_obss_narrow_bw_ru(struct ieee80211_hw *hw,
+                                  struct ieee80211_vif *vif,
+                                  unsigned int link_id,
+                                  struct ieee80211_bss_conf *link_conf)
 {
        struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct iwl_mvm_he_obss_narrow_bw_ru_data iter_data = {
                .tolerated = true,
        };
 
-       if (!(vif->bss_conf.chandef.chan->flags & IEEE80211_CHAN_RADAR)) {
-               mvmvif->deflink.he_ru_2mhz_block = false;
+       if (WARN_ON_ONCE(!link_conf->chandef.chan ||
+                        !mvmvif->link[link_id]))
+               return;
+
+       if (!(link_conf->chandef.chan->flags & IEEE80211_CHAN_RADAR)) {
+               mvmvif->link[link_id]->he_ru_2mhz_block = false;
                return;
        }
 
-       cfg80211_bss_iter(hw->wiphy, &vif->bss_conf.chandef,
+       cfg80211_bss_iter(hw->wiphy, &link_conf->chandef,
                          iwl_mvm_check_he_obss_narrow_bw_ru_iter,
                          &iter_data);
 
@@ -3413,7 +3420,7 @@ static void iwl_mvm_check_he_obss_narrow_bw_ru(struct ieee80211_hw *hw,
         * If there is at least one AP on radar channel that cannot
         * tolerate 26-tone RU UL OFDMA transmissions using HE TB PPDU.
         */
-       mvmvif->deflink.he_ru_2mhz_block = !iter_data.tolerated;
+       mvmvif->link[link_id]->he_ru_2mhz_block = !iter_data.tolerated;
 }
 
 static void iwl_mvm_reset_cca_40mhz_workaround(struct iwl_mvm *mvm,
@@ -3615,7 +3622,8 @@ static void iwl_mvm_vif_set_he_support(struct ieee80211_hw *hw,
                if (is_sta) {
                        mvmvif->link[i]->he_ru_2mhz_block = false;
                        if (link_sta->he_cap.has_he)
-                               iwl_mvm_check_he_obss_narrow_bw_ru(hw, vif);
+                               iwl_mvm_check_he_obss_narrow_bw_ru(hw, vif, i,
+                                                                  link_conf);
                }
        }
 }