]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mt76: mt7996: limit work in set_bitrate_mask
authorDylan Eskew <dylan.eskew@candelatech.com>
Wed, 8 Apr 2026 14:50:58 +0000 (07:50 -0700)
committerFelix Fietkau <nbd@nbd.name>
Tue, 9 Jun 2026 10:15:22 +0000 (10:15 +0000)
Calls to mt7996_set_bitrate_mask() would propagate work for all stations
on the ieee80211_hw regardless of the vif specified in the call. To
prevent unnecessary work in FW, limit setting the sta_rate to only the
specified vif in mt7996_sta_rate_ctrl_update().

Fixes: afff4325548f0 ("wifi: mt76: mt7996: Use proper link_id in link_sta_rc_update callback")
Signed-off-by: Dylan Eskew <dylan.eskew@candelatech.com>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260408145057.2356878-2-dylan.eskew@candelatech.com
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/main.c

index b3cbf68bb53d66cf4646a5f0d0a39f297be3353d..afbcc8c7b18b2fddd16fbf364bf32a4e2e1a4213 100644 (file)
@@ -1961,7 +1961,11 @@ static void mt7996_sta_rate_ctrl_update(void *data, struct ieee80211_sta *sta)
 {
        struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
        struct mt7996_sta_link *msta_link;
-       u32 *changed = data;
+       struct mt7996_vif *mvif = data;
+       u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
+
+       if (msta->vif != mvif)
+               return;
 
        msta_link = mt7996_sta_link(msta, msta->deflink_id);
        if (msta_link)
@@ -1974,7 +1978,6 @@ mt7996_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 {
        struct mt7996_dev *dev = mt7996_hw_dev(hw);
        struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-       u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
 
        mvif->deflink.bitrate_mask = *mask;
 
@@ -1987,7 +1990,7 @@ mt7996_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
         * then multiple MCS setting (MCS 4,5,6) is not supported.
         */
        ieee80211_iterate_stations_atomic(hw, mt7996_sta_rate_ctrl_update,
-                                         &changed);
+                                         mvif);
        ieee80211_queue_work(hw, &dev->rc_work);
 
        return 0;