On 02/10/2026 at 14:48:27 GMT, Adi Prasan <[email protected]> wrote:

> netif_stop_queue() prevents new packets from being sent to the driver,
> but it does not wait for a transmission that is already in progress.
>
> drv_xmit_async() can still be running on another CPU when
> mac802154_slave_close() calls drv_stop(). Stopping the queue only
> prevents new transmissions; it does not synchronize with an already
> running tx operation.
>
> This was checked against mac802154_hwsim as well. hwsim_hw_xmit() is
> synchronous, while hwsim_hw_stop() only sets a flag, so there is no
> pending work or locking in the driver that needs to be synchronized.
>
> The race is in the core between stopping the queue and an in-flight
> tx operation. The fix therefore belongs in the common mac802154 code,
> using the same handling already used by ieee802154_suspend(): hold and
> synchronize the queue around ieee802154_stop_device().
>
> Signed-off-by: Adi Prasan <[email protected]>

Reviewed-by: Miquel Raynal <[email protected]>

Reply via email to