Message ID | 20191217183057.24586-1-greearb@candelatech.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Johannes Berg |
Headers | show |
Series | [v2] mac80211: Fix setting txpower to zero. | expand |
On Tue, 2019-12-17 at 10:30 -0800, greearb@candelatech.com wrote: > > drivers/net/wireless/ath/ath10k/mac.c | 3 ++- > drivers/net/wireless/ath/ath9k/main.c | 3 +++ > drivers/net/wireless/ath/ath9k/xmit.c | 7 +++++-- All these driver changes worry me a bit - wouldn't that affect other drivers as well? johannes
On 02/07/2020 04:03 AM, Johannes Berg wrote: > On Tue, 2019-12-17 at 10:30 -0800, greearb@candelatech.com wrote: >> >> drivers/net/wireless/ath/ath10k/mac.c | 3 ++- >> drivers/net/wireless/ath/ath9k/main.c | 3 +++ >> drivers/net/wireless/ath/ath9k/xmit.c | 7 +++++-- > > All these driver changes worry me a bit - wouldn't that affect other > drivers as well? > > johannes > The goal was to NOT adversely affect the drivers when the default (not-set) value changed. I changed the name of the variable and then touched every driver that used it as a way of making sure that I found everything in the tree. Hopefully that found everything... I did not specifically test ath9k, only ath10k driver with this change. (I then changed the variable name back before submitting the patch). Thanks, Ben
On Fri, 2020-02-07 at 09:55 -0800, Ben Greear wrote: > On 02/07/2020 04:03 AM, Johannes Berg wrote: > > On Tue, 2019-12-17 at 10:30 -0800, greearb@candelatech.com wrote: > > > drivers/net/wireless/ath/ath10k/mac.c | 3 ++- > > > drivers/net/wireless/ath/ath9k/main.c | 3 +++ > > > drivers/net/wireless/ath/ath9k/xmit.c | 7 +++++-- > > > > All these driver changes worry me a bit - wouldn't that affect other > > drivers as well? > The goal was to NOT adversely affect the drivers when the default (not-set) > value changed. Right. > I changed the name of the variable and then touched every driver that used it > as a way of making sure that I found everything in the tree. > > Hopefully that found everything... I did not specifically test ath9k, only ath10k > driver with this change. > > (I then changed the variable name back before submitting the patch). OK, great, thanks :) johannes
On 02/07/2020 11:19 AM, Johannes Berg wrote: > On Fri, 2020-02-07 at 09:55 -0800, Ben Greear wrote: >> On 02/07/2020 04:03 AM, Johannes Berg wrote: >>> On Tue, 2019-12-17 at 10:30 -0800, greearb@candelatech.com wrote: >>>> drivers/net/wireless/ath/ath10k/mac.c | 3 ++- >>>> drivers/net/wireless/ath/ath9k/main.c | 3 +++ >>>> drivers/net/wireless/ath/ath9k/xmit.c | 7 +++++-- >>> >>> All these driver changes worry me a bit - wouldn't that affect other >>> drivers as well? > >> The goal was to NOT adversely affect the drivers when the default (not-set) >> value changed. > > Right. > >> I changed the name of the variable and then touched every driver that used it >> as a way of making sure that I found everything in the tree. >> >> Hopefully that found everything... I did not specifically test ath9k, only ath10k >> driver with this change. >> >> (I then changed the variable name back before submitting the patch). > > OK, great, thanks :) Come to think of it, I did not do an 'all mod config' build, so possibly I missed some things. I think my kernel compiles most of the drivers though. Thanks, Ben
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 83cc8778ca1e..3ca4ccaee32a 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -5103,7 +5103,8 @@ static int ath10k_mac_txpower_recalc(struct ath10k *ar) lockdep_assert_held(&ar->conf_mutex); list_for_each_entry(arvif, &ar->arvifs, list) { - if (arvif->txpower <= 0) + /* txpower not initialized yet? */ + if (arvif->txpower == INT_MIN) continue; if (txpower == -1) diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 0548aa3702e3..983b6d6c89f0 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1196,6 +1196,9 @@ static void ath9k_tpc_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif) { int *power = data; + if (vif->bss_conf.txpower == INT_MIN) + return; + if (*power < vif->bss_conf.txpower) *power = vif->bss_conf.txpower; } diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 31e7b108279c..e60d4737fc6e 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c @@ -2095,10 +2095,13 @@ static void setup_frame_info(struct ieee80211_hw *hw, if (tx_info->control.vif) { struct ieee80211_vif *vif = tx_info->control.vif; - + if (vif->bss_conf.txpower == INT_MIN) + goto nonvifpower; txpower = 2 * vif->bss_conf.txpower; } else { - struct ath_softc *sc = hw->priv; + struct ath_softc *sc; + nonvifpower: + sc = hw->priv; txpower = sc->cur_chan->cur_txpower; } diff --git a/include/net/mac80211.h b/include/net/mac80211.h index aa145808e57a..927647791004 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -573,7 +573,7 @@ struct ieee80211_ftm_responder_params { * @ssid: The SSID of the current vif. Valid in AP and IBSS mode. * @ssid_len: Length of SSID given in @ssid. * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. - * @txpower: TX power in dBm + * @txpower: TX power in dBm. INT_MIN means not configured. * @txpower_type: TX power adjustment used to control per packet Transmit * Power Control (TPC) in lower driver for the current vif. In particular * TPC is enabled if value passed in %txpower_type is diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index af8b09214786..f8facaea8790 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1402,6 +1402,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, sdata->control_port_no_encrypt = false; sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM; sdata->vif.bss_conf.idle = true; + sdata->vif.bss_conf.txpower = INT_MIN; /* unset */ sdata->noack_map = 0; diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 6cca0853f183..413484d07838 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -146,6 +146,8 @@ static u32 ieee80211_hw_conf_chan(struct ieee80211_local *local) continue; if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) continue; + if (sdata->vif.bss_conf.txpower == INT_MIN) + continue; power = min(power, sdata->vif.bss_conf.txpower); } rcu_read_unlock();