> From: Dylan Eskew > > 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 Acked-by: Lorenzo Bianconi > --- > v2: > - Assign to correct tree > - Fix spelling error in commit message > --- > drivers/net/wireless/mediatek/mt76/mt7996/main.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c > index a8a6552d49f6..26b8c91db0a8 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c > @@ -1959,7 +1959,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 = rcu_dereference(msta->link[msta->deflink_id]); > if (msta_link) > @@ -1972,7 +1976,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; > > @@ -1985,7 +1988,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; > -- > 2.52.0 >