forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'openwrt:openwrt-23.05' into openwrt-23.05
- Loading branch information
Showing
5 changed files
with
874 additions
and
0 deletions.
There are no files selected for viewing
32 changes: 32 additions & 0 deletions
32
...ge/kernel/mac80211/patches/subsys/346-v6.4-wifi-mac80211-warn-only-once-on-AP-probe.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
From a1e91ef92392e5da15a1a16f8545ede2c02f7049 Mon Sep 17 00:00:00 2001 | ||
From: Johannes Berg <[email protected]> | ||
Date: Wed, 1 Mar 2023 12:09:24 +0200 | ||
Subject: [PATCH] wifi: mac80211: warn only once on AP probe | ||
|
||
We should perhaps support this API for MLO, but it's not | ||
clear that it makes sense, in any case then we'd have to | ||
update it to probe the correct BSS. | ||
|
||
For now, if it happens, warn only once so that we don't | ||
get flooded with messages if the driver misbehaves and | ||
calls this. | ||
|
||
Signed-off-by: Johannes Berg <[email protected]> | ||
Signed-off-by: Gregory Greenman <[email protected]> | ||
Link: https://lore.kernel.org/r/20230301115906.1c8499b6fbe6.I1a76a2be3b42ff93904870ac069f0319507adc23@changeid | ||
Signed-off-by: Johannes Berg <[email protected]> | ||
--- | ||
net/mac80211/mlme.c | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
--- a/net/mac80211/mlme.c | ||
+++ b/net/mac80211/mlme.c | ||
@@ -3233,7 +3233,7 @@ static void ieee80211_mgd_probe_ap(struc | ||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; | ||
bool already = false; | ||
|
||
- if (WARN_ON(sdata->vif.valid_links)) | ||
+ if (WARN_ON_ONCE(sdata->vif.valid_links)) | ||
return; | ||
|
||
if (!ieee80211_sdata_running(sdata)) |
171 changes: 171 additions & 0 deletions
171
package/kernel/mac80211/patches/subsys/347-v6.5-wifi-mac80211-HW-restart-for-MLO.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
From acb8bca343f8d5b8697d027771abf8a371580d53 Mon Sep 17 00:00:00 2001 | ||
From: Johannes Berg <[email protected]> | ||
Date: Thu, 4 May 2023 16:45:05 +0300 | ||
Subject: [PATCH] wifi: mac80211: HW restart for MLO | ||
|
||
Implement proper reconfiguration for interfaces that are | ||
doing MLO, in order to be able to recover from HW restart | ||
correctly. | ||
|
||
Signed-off-by: Johannes Berg <[email protected]> | ||
Signed-off-by: Gregory Greenman <[email protected]> | ||
Link: https://lore.kernel.org/r/[email protected] | ||
Signed-off-by: Johannes Berg <[email protected]> | ||
--- | ||
net/mac80211/util.c | 107 ++++++++++++++++++++++++++++++-------------- | ||
1 file changed, 73 insertions(+), 34 deletions(-) | ||
|
||
--- a/net/mac80211/util.c | ||
+++ b/net/mac80211/util.c | ||
@@ -2493,21 +2493,55 @@ int ieee80211_reconfig(struct ieee80211_ | ||
|
||
/* Finally also reconfigure all the BSS information */ | ||
list_for_each_entry(sdata, &local->interfaces, list) { | ||
+ /* common change flags for all interface types - link only */ | ||
+ u32 changed = BSS_CHANGED_ERP_CTS_PROT | | ||
+ BSS_CHANGED_ERP_PREAMBLE | | ||
+ BSS_CHANGED_ERP_SLOT | | ||
+ BSS_CHANGED_HT | | ||
+ BSS_CHANGED_BASIC_RATES | | ||
+ BSS_CHANGED_BEACON_INT | | ||
+ BSS_CHANGED_BSSID | | ||
+ BSS_CHANGED_CQM | | ||
+ BSS_CHANGED_QOS | | ||
+ BSS_CHANGED_TXPOWER | | ||
+ BSS_CHANGED_MCAST_RATE; | ||
+ struct ieee80211_link_data *link = NULL; | ||
unsigned int link_id; | ||
- u32 changed; | ||
+ u32 active_links = 0; | ||
|
||
if (!ieee80211_sdata_running(sdata)) | ||
continue; | ||
|
||
sdata_lock(sdata); | ||
+ if (sdata->vif.valid_links) { | ||
+ struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS] = { | ||
+ [0] = &sdata->vif.bss_conf, | ||
+ }; | ||
+ | ||
+ if (sdata->vif.type == NL80211_IFTYPE_STATION) { | ||
+ /* start with a single active link */ | ||
+ active_links = sdata->vif.active_links; | ||
+ link_id = ffs(active_links) - 1; | ||
+ sdata->vif.active_links = BIT(link_id); | ||
+ } | ||
+ | ||
+ drv_change_vif_links(local, sdata, 0, | ||
+ sdata->vif.active_links, | ||
+ old); | ||
+ } | ||
+ | ||
for (link_id = 0; | ||
link_id < ARRAY_SIZE(sdata->vif.link_conf); | ||
link_id++) { | ||
- struct ieee80211_link_data *link; | ||
+ if (sdata->vif.valid_links && | ||
+ !(sdata->vif.active_links & BIT(link_id))) | ||
+ continue; | ||
|
||
link = sdata_dereference(sdata->link[link_id], sdata); | ||
- if (link) | ||
- ieee80211_assign_chanctx(local, sdata, link); | ||
+ if (!link) | ||
+ continue; | ||
+ | ||
+ ieee80211_assign_chanctx(local, sdata, link); | ||
} | ||
|
||
switch (sdata->vif.type) { | ||
@@ -2527,42 +2561,42 @@ int ieee80211_reconfig(struct ieee80211_ | ||
&sdata->deflink.tx_conf[i]); | ||
break; | ||
} | ||
- sdata_unlock(sdata); | ||
- | ||
- /* common change flags for all interface types */ | ||
- changed = BSS_CHANGED_ERP_CTS_PROT | | ||
- BSS_CHANGED_ERP_PREAMBLE | | ||
- BSS_CHANGED_ERP_SLOT | | ||
- BSS_CHANGED_HT | | ||
- BSS_CHANGED_BASIC_RATES | | ||
- BSS_CHANGED_BEACON_INT | | ||
- BSS_CHANGED_BSSID | | ||
- BSS_CHANGED_CQM | | ||
- BSS_CHANGED_QOS | | ||
- BSS_CHANGED_IDLE | | ||
- BSS_CHANGED_TXPOWER | | ||
- BSS_CHANGED_MCAST_RATE; | ||
|
||
if (sdata->vif.bss_conf.mu_mimo_owner) | ||
changed |= BSS_CHANGED_MU_GROUPS; | ||
|
||
+ if (!sdata->vif.valid_links) | ||
+ changed |= BSS_CHANGED_IDLE; | ||
+ | ||
switch (sdata->vif.type) { | ||
case NL80211_IFTYPE_STATION: | ||
- changed |= BSS_CHANGED_ASSOC | | ||
- BSS_CHANGED_ARP_FILTER | | ||
- BSS_CHANGED_PS; | ||
- | ||
- /* Re-send beacon info report to the driver */ | ||
- if (sdata->deflink.u.mgd.have_beacon) | ||
- changed |= BSS_CHANGED_BEACON_INFO; | ||
- | ||
- if (sdata->vif.bss_conf.max_idle_period || | ||
- sdata->vif.bss_conf.protected_keep_alive) | ||
- changed |= BSS_CHANGED_KEEP_ALIVE; | ||
- | ||
- sdata_lock(sdata); | ||
- ieee80211_bss_info_change_notify(sdata, changed); | ||
- sdata_unlock(sdata); | ||
+ if (!sdata->vif.valid_links) { | ||
+ changed |= BSS_CHANGED_ASSOC | | ||
+ BSS_CHANGED_ARP_FILTER | | ||
+ BSS_CHANGED_PS; | ||
+ | ||
+ /* Re-send beacon info report to the driver */ | ||
+ if (sdata->deflink.u.mgd.have_beacon) | ||
+ changed |= BSS_CHANGED_BEACON_INFO; | ||
+ | ||
+ if (sdata->vif.bss_conf.max_idle_period || | ||
+ sdata->vif.bss_conf.protected_keep_alive) | ||
+ changed |= BSS_CHANGED_KEEP_ALIVE; | ||
+ | ||
+ if (sdata->vif.bss_conf.eht_puncturing) | ||
+ changed |= BSS_CHANGED_EHT_PUNCTURING; | ||
+ | ||
+ ieee80211_bss_info_change_notify(sdata, | ||
+ changed); | ||
+ } else if (!WARN_ON(!link)) { | ||
+ ieee80211_link_info_change_notify(sdata, link, | ||
+ changed); | ||
+ changed = BSS_CHANGED_ASSOC | | ||
+ BSS_CHANGED_IDLE | | ||
+ BSS_CHANGED_PS | | ||
+ BSS_CHANGED_ARP_FILTER; | ||
+ ieee80211_vif_cfg_change_notify(sdata, changed); | ||
+ } | ||
break; | ||
case NL80211_IFTYPE_OCB: | ||
changed |= BSS_CHANGED_OCB; | ||
@@ -2597,6 +2631,7 @@ int ieee80211_reconfig(struct ieee80211_ | ||
case NL80211_IFTYPE_NAN: | ||
res = ieee80211_reconfig_nan(sdata); | ||
if (res < 0) { | ||
+ sdata_unlock(sdata); | ||
ieee80211_handle_reconfig_failure(local); | ||
return res; | ||
} | ||
@@ -2614,6 +2649,10 @@ int ieee80211_reconfig(struct ieee80211_ | ||
WARN_ON(1); | ||
break; | ||
} | ||
+ sdata_unlock(sdata); | ||
+ | ||
+ if (active_links) | ||
+ ieee80211_set_active_links(&sdata->vif, active_links); | ||
} | ||
|
||
ieee80211_recalc_ps(local); |
84 changes: 84 additions & 0 deletions
84
...l/mac80211/patches/subsys/348-v6.5-wifi-mac80211-implement-proper-AP-MLD-HW-restart.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
From 61403414e1719f929386dda8fb954bb302628ef3 Mon Sep 17 00:00:00 2001 | ||
From: Johannes Berg <[email protected]> | ||
Date: Thu, 4 May 2023 16:45:11 +0300 | ||
Subject: [PATCH] wifi: mac80211: implement proper AP MLD HW restart | ||
|
||
Previously, I didn't implement restarting here at all if the | ||
interface is an MLD, so it only worked for non-MLO. Add the | ||
needed code to restart an AP MLD correctly. | ||
|
||
Signed-off-by: Johannes Berg <[email protected]> | ||
Signed-off-by: Gregory Greenman <[email protected]> | ||
Link: https://lore.kernel.org/r/[email protected] | ||
Signed-off-by: Johannes Berg <[email protected]> | ||
--- | ||
net/mac80211/util.c | 44 +++++++++++++++++++++++++++++++++++++++++++- | ||
1 file changed, 43 insertions(+), 1 deletion(-) | ||
|
||
--- a/net/mac80211/util.c | ||
+++ b/net/mac80211/util.c | ||
@@ -2344,6 +2344,35 @@ static int ieee80211_reconfig_nan(struct | ||
return 0; | ||
} | ||
|
||
+static void ieee80211_reconfig_ap_links(struct ieee80211_local *local, | ||
+ struct ieee80211_sub_if_data *sdata, | ||
+ u32 changed) | ||
+{ | ||
+ int link_id; | ||
+ | ||
+ for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { | ||
+ struct ieee80211_link_data *link; | ||
+ | ||
+ if (!(sdata->vif.active_links & BIT(link_id))) | ||
+ continue; | ||
+ | ||
+ link = sdata_dereference(sdata->link[link_id], sdata); | ||
+ if (!link) | ||
+ continue; | ||
+ | ||
+ if (rcu_access_pointer(link->u.ap.beacon)) | ||
+ drv_start_ap(local, sdata, link->conf); | ||
+ | ||
+ if (!link->conf->enable_beacon) | ||
+ continue; | ||
+ | ||
+ changed |= BSS_CHANGED_BEACON | | ||
+ BSS_CHANGED_BEACON_ENABLED; | ||
+ | ||
+ ieee80211_link_info_change_notify(sdata, link, changed); | ||
+ } | ||
+} | ||
+ | ||
int ieee80211_reconfig(struct ieee80211_local *local) | ||
{ | ||
struct ieee80211_hw *hw = &local->hw; | ||
@@ -2606,7 +2635,13 @@ int ieee80211_reconfig(struct ieee80211_ | ||
changed |= BSS_CHANGED_IBSS; | ||
fallthrough; | ||
case NL80211_IFTYPE_AP: | ||
- changed |= BSS_CHANGED_SSID | BSS_CHANGED_P2P_PS; | ||
+ changed |= BSS_CHANGED_P2P_PS; | ||
+ | ||
+ if (sdata->vif.valid_links) | ||
+ ieee80211_vif_cfg_change_notify(sdata, | ||
+ BSS_CHANGED_SSID); | ||
+ else | ||
+ changed |= BSS_CHANGED_SSID; | ||
|
||
if (sdata->vif.bss_conf.ftm_responder == 1 && | ||
wiphy_ext_feature_isset(sdata->local->hw.wiphy, | ||
@@ -2616,6 +2651,13 @@ int ieee80211_reconfig(struct ieee80211_ | ||
if (sdata->vif.type == NL80211_IFTYPE_AP) { | ||
changed |= BSS_CHANGED_AP_PROBE_RESP; | ||
|
||
+ if (sdata->vif.valid_links) { | ||
+ ieee80211_reconfig_ap_links(local, | ||
+ sdata, | ||
+ changed); | ||
+ break; | ||
+ } | ||
+ | ||
if (rcu_access_pointer(sdata->deflink.u.ap.beacon)) | ||
drv_start_ap(local, sdata, | ||
sdata->deflink.conf); |
Oops, something went wrong.