On 03/09/2026 at 20:32:01 +08, Xuanqiang Luo <[email protected]> wrote:
> From: Xuanqiang Luo <[email protected]> > > queue_work() coalesces attempts to queue an already pending work item. > The RX workers, however, consume only one descriptor per invocation. A > burst can therefore leave later descriptors queued until another frame > arrives, while the final descriptor may remain queued indefinitely. > > The RX tasklet, workers, and scan cleanup also access the descriptor > lists without synchronization. > > Protect both lists with a spinlock. Publish each descriptor and queue its > work while holding the lock. Remove each descriptor from the list before > processing it and, if another descriptor remains, queue the work again so > it runs after the current invocation. > > Fixes: 57588c71177f ("mac802154: Handle passive scanning") > Fixes: d021d218f6d9 ("mac802154: Handle received BEACON_REQ") > Cc: [email protected] > Signed-off-by: Xuanqiang Luo <[email protected]> Reviewed-by: Miquel Raynal <[email protected]>

