wifi: iwlwifi: mvm: adjust radar detection to MLO
authorGregory Greenman <gregory.greenman@intel.com>
Wed, 29 Mar 2023 07:05:15 +0000 (10:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 30 Mar 2023 10:08:38 +0000 (12:08 +0200)
Make the decision about radar detection status depending
on each active MLO link.

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

index 45a652cce491a645efa1becbabbfa32cbe5bd40c..2033d89dc9e5606ad85e66a52a25a75b617976e2 100644 (file)
@@ -279,18 +279,24 @@ static bool iwl_mvm_power_allow_uapsd(struct iwl_mvm *mvm,
 static bool iwl_mvm_power_is_radar(struct ieee80211_vif *vif)
 {
        struct ieee80211_chanctx_conf *chanctx_conf;
-       struct ieee80211_channel *chan;
+       struct ieee80211_bss_conf *link_conf;
        bool radar_detect = false;
+       unsigned int link_id;
 
        rcu_read_lock();
-       chanctx_conf = rcu_dereference(vif->bss_conf.chanctx_conf);
-       WARN_ON(!chanctx_conf);
-       if (chanctx_conf) {
-               chan = chanctx_conf->def.chan;
-               radar_detect = chan->flags & IEEE80211_CHAN_RADAR;
+       for_each_vif_active_link(vif, link_conf, link_id) {
+               chanctx_conf = rcu_dereference(link_conf->chanctx_conf);
+               if (WARN_ON(!chanctx_conf))
+                       continue;
+
+               radar_detect = !!(chanctx_conf->def.chan->flags &
+                                 IEEE80211_CHAN_RADAR);
+               if (radar_detect)
+                       goto out;
        }
-       rcu_read_unlock();
 
+out:
+       rcu_read_unlock();
        return radar_detect;
 }