> Running these packets through regular buffering queues could cause them > to hang, especially when the packets were for stations that in disassoc > state. > > Fixes: dedf2ec30fe4 ("wifi: mt76: fix queue assignment for deauth packets") > Signed-off-by: Felix Fietkau Acked-by: Lorenzo Bianconi > --- > drivers/net/wireless/mediatek/mt76/mt7915/main.c | 2 ++ > drivers/net/wireless/mediatek/mt76/mt7996/main.c | 1 + > drivers/net/wireless/mediatek/mt76/tx.c | 3 ++- > 3 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c > index a8286f8becf9..a03d89aabe80 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c > @@ -805,6 +805,7 @@ __mt7915_drop_sta(void *ptr, u8 *mac, struct ieee80211_vif *vif) > > msta = (struct mt7915_sta *)sta->drv_priv; > mt7915_mcu_add_sta(data->dev, vif, sta, CONN_STATE_DISCONNECT, false); > + msta->wcid.tx_info &= ~MT_WCID_TX_INFO_SET; > msta->wcid.sta_disabled = 1; > msta->wcid.sta = 0; > } > @@ -871,6 +872,7 @@ int mt7915_mac_sta_event(struct mt76_dev *mdev, struct ieee80211_vif *vif, > mutex_unlock(&dev->mt76.mutex); > > mt7915_mcu_add_sta(dev, vif, sta, CONN_STATE_DISCONNECT, false); > + msta->wcid.tx_info &= ~MT_WCID_TX_INFO_SET; > msta->wcid.sta_disabled = 1; > msta->wcid.sta = 0; > return 0; > diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c > index d17d1dbb2038..dd7a01c02a7c 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c > @@ -1433,6 +1433,7 @@ mt7996_mac_sta_event(struct mt7996_dev *dev, struct ieee80211_vif *vif, > else if (sta->mlo && links == BIT(link_id)) /* last link */ > mt7996_mcu_teardown_mld_sta(dev, link, > msta_link); > + msta_link->wcid.tx_info &= ~MT_WCID_TX_INFO_SET; > msta_link->wcid.sta_disabled = 1; > msta_link->wcid.sta = 0; > links = links & ~BIT(link_id); > diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c > index b1e894b19cbd..3c623df2e741 100644 > --- a/drivers/net/wireless/mediatek/mt76/tx.c > +++ b/drivers/net/wireless/mediatek/mt76/tx.c > @@ -680,7 +680,8 @@ mt76_txq_schedule_pending_wcid(struct mt76_phy *phy, struct mt76_wcid *wcid, > if ((dev->drv->drv_flags & MT_DRV_HW_MGMT_TXQ) && > !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) && > !ieee80211_is_data_present(hdr->frame_control) && > - (!ieee80211_is_bufferable_mmpdu(skb) || > + (!(wcid->tx_info & MT_WCID_TX_INFO_SET) || > + !ieee80211_is_bufferable_mmpdu(skb) || > ieee80211_is_deauth(hdr->frame_control) || > ieee80211_is_disassoc(hdr->frame_control) || > head == &wcid->tx_offchannel)) > -- > 2.47.3 > >