]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: refine link handling for link_sta_rc_update
authorZong-Zhe Yang <kevin_yang@realtek.com>
Thu, 28 Nov 2024 05:54:32 +0000 (13:54 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Thu, 5 Dec 2024 06:27:30 +0000 (14:27 +0800)
The original handling will iterate all active links under the given sta
and apply the changes to each. Now, stack tweaks ops from sta_rc_update
to link_sta_rc_update, which means targeting a given link. Then, our link
iteration looks redundant. So, refine it to apply the changes to the link
directly.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20241128055433.11851-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac80211.c
drivers/net/wireless/realtek/rtw89/phy.c
drivers/net/wireless/realtek/rtw89/phy.h

index bf7a674bce284d3e722a362246343ca677990f48..5eac0b524060d5845c209a169efa4d2a61031427 100644 (file)
@@ -1307,10 +1307,15 @@ static void rtw89_ops_sta_rc_update(struct ieee80211_hw *hw,
                                    struct ieee80211_link_sta *link_sta,
                                    u32 changed)
 {
-       struct ieee80211_sta *sta = link_sta->sta;
+       struct rtw89_sta *rtwsta = sta_to_rtwsta(link_sta->sta);
        struct rtw89_dev *rtwdev = hw->priv;
+       struct rtw89_sta_link *rtwsta_link;
+
+       rtwsta_link = rtwsta->links[link_sta->link_id];
+       if (unlikely(!rtwsta_link))
+               return;
 
-       rtw89_phy_ra_update_sta(rtwdev, sta, changed);
+       rtw89_phy_ra_update_sta_link(rtwdev, rtwsta_link, changed);
 }
 
 static int rtw89_ops_add_chanctx(struct ieee80211_hw *hw,
index be2f5338c3a0b7759a883b8c0e72f5c20905e764..e88ed9ec57c5b0e0376652346d138812ae3cb44d 100644 (file)
@@ -467,11 +467,11 @@ static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev,
        ra->csi_mode = csi_mode;
 }
 
-static void __rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev,
-                                     struct rtw89_vif_link *rtwvif_link,
-                                     struct rtw89_sta_link *rtwsta_link,
-                                     u32 changed)
+void rtw89_phy_ra_update_sta_link(struct rtw89_dev *rtwdev,
+                                 struct rtw89_sta_link *rtwsta_link,
+                                 u32 changed)
 {
+       struct rtw89_vif_link *rtwvif_link = rtwsta_link->rtwvif_link;
        struct ieee80211_vif *vif = rtwvif_link_to_vif(rtwvif_link);
        struct rtw89_ra_info *ra = &rtwsta_link->ra;
        struct ieee80211_link_sta *link_sta;
@@ -504,14 +504,11 @@ void rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta
                             u32 changed)
 {
        struct rtw89_sta *rtwsta = sta_to_rtwsta(sta);
-       struct rtw89_vif_link *rtwvif_link;
        struct rtw89_sta_link *rtwsta_link;
        unsigned int link_id;
 
-       rtw89_sta_for_each_link(rtwsta, rtwsta_link, link_id) {
-               rtwvif_link = rtwsta_link->rtwvif_link;
-               __rtw89_phy_ra_update_sta(rtwdev, rtwvif_link, rtwsta_link, changed);
-       }
+       rtw89_sta_for_each_link(rtwsta, rtwsta_link, link_id)
+               rtw89_phy_ra_update_sta_link(rtwdev, rtwsta_link, changed);
 }
 
 static bool __check_rate_pattern(struct rtw89_phy_rate_pattern *next,
index f4ef7f5fb0814255e5d77b4a48eed10504ba5872..08a026ac9d386ffd14b37b8d5dd566f966ce92ac 100644 (file)
@@ -926,6 +926,9 @@ void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_
 void rtw89_phy_ra_update(struct rtw89_dev *rtwdev);
 void rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
                             u32 changed);
+void rtw89_phy_ra_update_sta_link(struct rtw89_dev *rtwdev,
+                                 struct rtw89_sta_link *rtwsta_link,
+                                 u32 changed);
 void rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev,
                                struct ieee80211_vif *vif,
                                const struct cfg80211_bitrate_mask *mask);