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:23:14 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 DSL 3580L, with 4352 chip on 5Ghz, the chip transmit and no
dma error arise. Without the patch the dma engine report an error on
the descriptor. Earlier in June i wrongly asserted that the DMA on AC
chips was needing 64 Kb segments, it was a wrong conclusion: going 64kb
did stop the error, but for the wrong reason.

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