Skip to content

Commit 1a22262

Browse files
committed
wifi: iwlwifi: mld: always take beacon ies in link grading
One of the factors of a link's grade is the channel load, which is calculated from the AP's bss load element. The current code takes this element from the beacon for an active link, and from bss->ies for an inactive link. bss->ies is set to either the beacon's ies or to the probe response ones, with preference to the probe response (meaning that if there was even one probe response, the ies of it will be stored in bss->ies and won't be overiden by the beacon ies). The probe response can be very old, i.e. from the connection time, where a beacon is updated before each link selection (which is triggered only after a passive scan). In such case, the bss load element in the probe response will not include the channel load caused by the STA, where the beacon will. This will cause the inactive link to always have a lower channel load, and therefore an higher grade than the active link's one. This causes repeated link switches, causing the throughput to drop. Fix this by always taking the ies from the beacon, as those are for sure new. Fixes: d1e879e ("wifi: iwlwifi: add iwlmld sub-driver") Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20251110145652.b493dbb1853a.I058ba7309c84159f640cc9682d1bda56dd56a536@changeid Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
1 parent 3592c00 commit 1a22262

1 file changed

Lines changed: 1 addition & 6 deletions

File tree

  • drivers/net/wireless/intel/iwlwifi/mld

drivers/net/wireless/intel/iwlwifi/mld/link.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -708,18 +708,13 @@ static int
708708
iwl_mld_get_chan_load_from_element(struct iwl_mld *mld,
709709
struct ieee80211_bss_conf *link_conf)
710710
{
711-
struct ieee80211_vif *vif = link_conf->vif;
712711
const struct cfg80211_bss_ies *ies;
713712
const struct element *bss_load_elem = NULL;
714713
const struct ieee80211_bss_load_elem *bss_load;
715714

716715
guard(rcu)();
717716

718-
if (ieee80211_vif_link_active(vif, link_conf->link_id))
719-
ies = rcu_dereference(link_conf->bss->beacon_ies);
720-
else
721-
ies = rcu_dereference(link_conf->bss->ies);
722-
717+
ies = rcu_dereference(link_conf->bss->beacon_ies);
723718
if (ies)
724719
bss_load_elem = cfg80211_find_elem(WLAN_EID_QBSS_LOAD,
725720
ies->data, ies->len);

0 commit comments

Comments
 (0)