Re: [PATCH wireless-next 1/2] wifi: b43: reprogram the MAC filter after an interface restart

From: Alessio Ferri

Date: Tue Oct 27 2026 - 15:27:45 EST


Il giorno Wed, 14 Oct 2026 16:32:24 +0200
Andreas Wendleder <gonsolo@xxxxxxxxx> ha scritto:

> 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@xxxxxxxxx>
> ---
> 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)

Tested on my DSL 3580L with a 4352 5Ghz, the chip transmit ok.

Tested-by: Alessio Ferri <alessio.ferri@xxxxxxxxxxx>