Message ID | 20230816100412.e2677a05ffd3.I062e026efafb59b026ab72fc7f7fce54f43dd29b@changeid |
---|---|
State | Superseded |
Headers | show |
Series | wifi: mac80211: fix puncturing bitmap handling in CSA | expand |
On Wed, 2023-08-16 at 10:22 -0700, Aloka Dixit wrote: > > Looks okay, though I remember there was a reason I had put it at the > top. Odd. I wonder why? It seems wrong here - in some cases it might apply it before it even goes to the new channel? To be fair, we should maybe split this work and not use it for the whole "once reservation is complete" part? > If this causes any issue I will send a follow-up later. Oh, I can wait with this too - clearly puncturing with CSA isn't really even on my list - I was just trying to make sense of this code due to some other (syzbot maybe, I was looking at those a bit) issue, and this stood out as "looks wrong". So if you have any tests you'd like to run with the patch first, just let me know and I can just hold off applying this. johannes
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index e7ac24603892..1657ff09a83a 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -3648,12 +3648,6 @@ static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) lockdep_assert_held(&local->mtx); lockdep_assert_held(&local->chanctx_mtx); - if (sdata->vif.bss_conf.eht_puncturing != sdata->vif.bss_conf.csa_punct_bitmap) { - sdata->vif.bss_conf.eht_puncturing = - sdata->vif.bss_conf.csa_punct_bitmap; - changed |= BSS_CHANGED_EHT_PUNCTURING; - } - /* * using reservation isn't immediate as it may be deferred until later * with multi-vif. once reservation is complete it will re-schedule the @@ -3683,6 +3677,12 @@ static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) if (err) return err; + if (link_data->conf->eht_puncturing != link_data->conf->csa_punct_bitmap) { + link_data->conf->eht_puncturing = + link_data->conf->csa_punct_bitmap; + changed |= BSS_CHANGED_EHT_PUNCTURING; + } + ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed); if (sdata->deflink.csa_block_tx) {