Message ID | 20250110-fix_link_sta_bandwidth_update-v1-2-61b6f3ef2ea3@quicinc.com |
---|---|
State | New |
Headers | show |
Series | wifi: ath12k: handle ath12k_mac_ieee80211_sta_bw_to_wmi() for link sta | expand |
On 1/9/2025 10:43 AM, Aditya Kumar Singh wrote: > Currently ath12k_mac_ieee80211_sta_bw_to_wmi() handles the bandwidth from > sta's deflink member. This works only for non-ML station. Now that MLO > support is there, extend this function to use link sta instead of deflink. > > Additionally, in ath12k_mac_handle_link_sta_state(), the link sta structure > is not accessible, making it difficult to fetch the bandwidth there. > However, ath12k_mac_station_assoc() does reference the link sta structure. > Therefore, move the initial assignment of the arsta bandwidth member to > ath12k_mac_station_assoc(). > > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> Acked-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
Aditya Kumar Singh <quic_adisi@quicinc.com> writes: > Currently ath12k_mac_ieee80211_sta_bw_to_wmi() handles the bandwidth from > sta's deflink member. This works only for non-ML station. Now that MLO > support is there, extend this function to use link sta instead of deflink. > > Additionally, in ath12k_mac_handle_link_sta_state(), the link sta structure > is not accessible, making it difficult to fetch the bandwidth there. > However, ath12k_mac_station_assoc() does reference the link sta structure. > Therefore, move the initial assignment of the arsta bandwidth member to > ath12k_mac_station_assoc(). > > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> So how does this help in practice? Ie. what are the user visible symptoms this patch is fixing?
On 1/15/25 00:09, Kalle Valo wrote: > Aditya Kumar Singh <quic_adisi@quicinc.com> writes: > >> Currently ath12k_mac_ieee80211_sta_bw_to_wmi() handles the bandwidth from >> sta's deflink member. This works only for non-ML station. Now that MLO >> support is there, extend this function to use link sta instead of deflink. >> >> Additionally, in ath12k_mac_handle_link_sta_state(), the link sta structure >> is not accessible, making it difficult to fetch the bandwidth there. >> However, ath12k_mac_station_assoc() does reference the link sta structure. >> Therefore, move the initial assignment of the arsta bandwidth member to >> ath12k_mac_station_assoc(). >> >> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 >> >> Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> > > So how does this help in practice? Ie. what are the user visible > symptoms this patch is fixing? > For MLO station, any bandwidth change post initial association, the data will not go in the latest bandwidth of that link. Since to firmware, only deflink's bandwidth will always be configured. For non-ML stations, no affect.
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c index 750b41ec29e2c329fe98b7b717ec183fd6807eb0..67ae213a1dcd7bc3be0838d7948097c559dde625 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -3139,11 +3139,11 @@ static int ath12k_setup_peer_smps(struct ath12k *ar, struct ath12k_link_vif *arv } static u32 ath12k_mac_ieee80211_sta_bw_to_wmi(struct ath12k *ar, - struct ieee80211_sta *sta) + struct ieee80211_link_sta *link_sta) { - u32 bw = WMI_PEER_CHWIDTH_20MHZ; + u32 bw; - switch (sta->deflink.bandwidth) { + switch (link_sta->bandwidth) { case IEEE80211_STA_RX_BW_20: bw = WMI_PEER_CHWIDTH_20MHZ; break; @@ -3160,8 +3160,8 @@ static u32 ath12k_mac_ieee80211_sta_bw_to_wmi(struct ath12k *ar, bw = WMI_PEER_CHWIDTH_320MHZ; break; default: - ath12k_warn(ar->ab, "Invalid bandwidth %d in rc update for %pM\n", - sta->deflink.bandwidth, sta->addr); + ath12k_warn(ar->ab, "Invalid bandwidth %d for link station %pM\n", + link_sta->bandwidth, link_sta->addr); bw = WMI_PEER_CHWIDTH_20MHZ; break; } @@ -4934,6 +4934,11 @@ static int ath12k_mac_station_assoc(struct ath12k *ar, return -EINVAL; } + spin_lock_bh(&ar->data_lock); + arsta->bw = ath12k_mac_ieee80211_sta_bw_to_wmi(ar, link_sta); + arsta->bw_prev = link_sta->bandwidth; + spin_unlock_bh(&ar->data_lock); + if (link_sta->vht_cap.vht_supported && num_vht_rates == 1) { ret = ath12k_mac_set_peer_vht_fixed_rate(arvif, arsta, mask, band); @@ -5523,7 +5528,6 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw, enum ieee80211_sta_state new_state) { struct ieee80211_vif *vif = ath12k_ahvif_to_vif(arvif->ahvif); - struct ieee80211_sta *sta = ath12k_ahsta_to_sta(arsta->ahsta); struct ath12k *ar = arvif->ar; int ret = 0; @@ -5566,13 +5570,6 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw, ath12k_warn(ar->ab, "Failed to associate station: %pM\n", arsta->addr); - spin_lock_bh(&ar->data_lock); - - arsta->bw = ath12k_mac_ieee80211_sta_bw_to_wmi(ar, sta); - arsta->bw_prev = sta->deflink.bandwidth; - - spin_unlock_bh(&ar->data_lock); - /* IEEE80211_STA_ASSOC -> IEEE80211_STA_AUTHORIZED: set peer status as * authorized */ @@ -5840,7 +5837,7 @@ static void ath12k_mac_op_link_sta_rc_update(struct ieee80211_hw *hw, spin_lock_bh(&ar->data_lock); if (changed & IEEE80211_RC_BW_CHANGED) { - bw = ath12k_mac_ieee80211_sta_bw_to_wmi(ar, sta); + bw = ath12k_mac_ieee80211_sta_bw_to_wmi(ar, link_sta); arsta->bw_prev = arsta->bw; arsta->bw = bw; }
Currently ath12k_mac_ieee80211_sta_bw_to_wmi() handles the bandwidth from sta's deflink member. This works only for non-ML station. Now that MLO support is there, extend this function to use link sta instead of deflink. Additionally, in ath12k_mac_handle_link_sta_state(), the link sta structure is not accessible, making it difficult to fetch the bandwidth there. However, ath12k_mac_station_assoc() does reference the link sta structure. Therefore, move the initial assignment of the arsta bandwidth member to ath12k_mac_station_assoc(). Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> --- drivers/net/wireless/ath/ath12k/mac.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-)