aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2025-11-10 19:41:08 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2025-11-10 19:41:08 +0000
commitb568711f8ef1afd7c86ea2d8bd2f94f399f54dc1 (patch)
tree1b5fb92aa3977d13e98a6dc6191f47b465e3b1d1
parent59d7865d3c20e86b3c42096f4a8c06a5e2eebd29 (diff)
LinuxKPI: 802.11: clear CONF_IDLE earlier
When starting to scan and ending a scan we clear/set the hardware to idle. Similarly we set the hw to idle when we remove the channel context but when starting we only set it to non-idle when we went from assoc to run. This apparently was not a problem most of the time as the switch from a failed hardware scan to a software scan was racing against net80211. ad4ddc83ebf8 fixed that specifically for rtw88 and while we were more consistently scanning, this broke authentication as the setting of idle at the end of the scan was now happening reliably. Move the unsetting of idle from assoc_to_run to scan_to_auth for when we create the chanctx to keep it symmetrical. This makes authentication work again for rtw88. This likely also fixes the problems in the listed PRs. iwlwifi(4) mvm and mld driver parts do not use this information at all and were never affected. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reported by: Oleg Nauman (oleg.nauman gmail.com) PR: 290850, 288186, 281979 PR: 272145 (the non skb-mem-limit parts)
-rw-r--r--sys/compat/linuxkpi/common/src/linux_80211.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c
index 0dc3b2631804..f025f191a3bd 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -2308,6 +2308,10 @@ lkpi_sta_scan_to_auth(struct ieee80211vap *vap, enum ieee80211_state nstate, int
changed |= IEEE80211_CHANCTX_CHANGE_WIDTH;
lkpi_80211_mo_change_chanctx(hw, chanctx_conf, changed);
} else {
+ /* The device is no longer idle. */
+ IMPROVE("Once we do multi-vif, only do for 1st chanctx");
+ lkpi_hw_conf_idle(hw, false);
+
error = lkpi_80211_mo_add_chanctx(hw, chanctx_conf);
if (error == 0 || error == EOPNOTSUPP) {
vif->bss_conf.chanreq.oper.chan = chanctx_conf->def.chan;
@@ -3081,8 +3085,6 @@ lkpi_sta_assoc_to_run(struct ieee80211vap *vap, enum ieee80211_state nstate, int
lsta->in_mgd = false;
}
- lkpi_hw_conf_idle(hw, false);
-
/*
* And then:
* - (more packets)?