@@ -3079,6 +3079,7 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
struct ieee80211_local *local = wiphy_priv(wiphy);
struct ieee80211_sub_if_data *sdata;
enum nl80211_tx_power_setting txp_type = type;
+ struct ieee80211_chanctx_conf *conf;
bool update_txp_type = false;
bool has_monitor = false;
int user_power_level;
@@ -3154,6 +3155,12 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
if (!link)
continue;
+ if (radio_id < wiphy->n_radio) {
+ conf = wiphy_dereference(wiphy, link->conf->chanctx_conf);
+ if (!conf || conf->radio_idx != radio_id)
+ continue;
+ }
+
link->user_power_level = local->user_power_level;
if (txp_type != link->conf->txpower_type)
update_txp_type = true;
@@ -3174,6 +3181,12 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
if (!link)
continue;
+ if (radio_id < wiphy->n_radio) {
+ conf = wiphy_dereference(wiphy, link->conf->chanctx_conf);
+ if (!conf || conf->radio_idx != radio_id)
+ continue;
+ }
+
ieee80211_recalc_txpower(link, update_txp_type);
}
}