[PATCH wireless-next 1/2] wifi: b43: reprogram the MAC filter after an interface restart
Andreas Wendleder
gonsolo at gmail.com
Wed Oct 14 07:32:24 PDT 2026
b43_op_start() clears wl->filter_flags, but mac80211 computes @changed
for b43_op_configure_filter() against the flags it cached from the
previous run. After a down/up it can report no change, so
b43_adjust_opmode() is not called and MACCTL keeps the cleared filter.
Compare the requested flags with what the hardware was programmed with
and add the difference to @changed.
Signed-off-by: Andreas Wendleder <gonsolo at gmail.com>
---
drivers/net/wireless/broadcom/b43/main.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c
index 8f4aff3..57a5935 100644
--- a/drivers/net/wireless/broadcom/b43/main.c
+++ b/drivers/net/wireless/broadcom/b43/main.c
@@ -4318,6 +4318,14 @@ static void b43_op_configure_filter(struct ieee80211_hw *hw,
FIF_OTHER_BSS |
FIF_BCN_PRBRESP_PROMISC;
+ /*
+ * b43_op_start() zeroes wl->filter_flags, but mac80211 computes
+ * @changed against its own cached flags, so after an interface
+ * restart it reports no change and MACCTL kept the zeroed filter.
+ * Compare against what the hardware was actually programmed with.
+ */
+ if (wl->filter_flags != *fflags)
+ changed |= wl->filter_flags ^ *fflags;
wl->filter_flags = *fflags;
if (changed && b43_status(dev) >= B43_STAT_INITIALIZED)
More information about the b43-dev
mailing list