mt76_change_chanctx() ignores a change that only sets IEEE80211_CHANCTX_CHANGE_PUNCTURING, so the driver keeps the old puncturing bitmap. mac80211 sends such a change from ieee80211_link_change_chanreq(), for example when a station follows a new Disabled Subchannel Bitmap of its AP without a channel switch. Set the channel again on a puncturing change, as for a width change, so that the driver programs the new bitmap. Only mt7996 uses mt76_change_chanctx(), and mt7996_set_channel() sends the bitmap to the firmware. Signed-off-by: Felix Fietkau --- drivers/net/wireless/mediatek/mt76/channel.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/channel.c b/drivers/net/wireless/mediatek/mt76/channel.c index 115117a19b5c..39a5dca4ca7d 100644 --- a/drivers/net/wireless/mediatek/mt76/channel.c +++ b/drivers/net/wireless/mediatek/mt76/channel.c @@ -85,7 +85,8 @@ void mt76_change_chanctx(struct ieee80211_hw *hw, struct mt76_dev *dev = phy->dev; if (!(changed & (IEEE80211_CHANCTX_CHANGE_WIDTH | - IEEE80211_CHANCTX_CHANGE_RADAR))) + IEEE80211_CHANCTX_CHANGE_RADAR | + IEEE80211_CHANCTX_CHANGE_PUNCTURING))) return; if (mt76_phy_scanning(phy)) -- 2.47.3