Re: [PATCH net v2] net: 8139cp: keep Rx masked while NAPI is scheduled
From: Daniel Machon
Date: Mon Nov 02 2026 - 07:04:36 EST
> From: Colton Pawielski <colton.pawielski@xxxxxxxxx>
>
> cp_rx_poll() calls napi_complete_done() and only then takes cp->lock
> with interrupts disabled to unmask the Rx interrupts. An interrupt
> that is not masked while polling (TxOK, TxErr, ...) can arrive in
> between. cp_interrupt() then sees the Rx status bits, which are still
> set, finds NAPI no longer scheduled, masks Rx and schedules NAPI again.
> cp_rx_poll() then carries on and unmasks Rx anyway.
>
> From that point Rx interrupts are enabled while NAPI is scheduled:
> cp_interrupt() leaves the Rx bits for the poll routine, does not mask
> them because napi_schedule_prep() fails, and the level-triggered
> interrupt fires again as soon as it returns. On an SH7751 LANDISK
> under combined Tx/Rx load this interrupt storm was captured with a RAM
> trace right before the board locked up hard.
>
> Mask Rx in cp_interrupt() whenever Rx status is pending, not only when
> NAPI gets scheduled. If the race leaves Rx unmasked, the next interrupt
> masks it again, and the pending poll unmasks it when it completes.
>
> Fixes: ab1e7e1d2666 ("8139cp: use napi_complete_done()")
> Signed-off-by: Colton Pawielski <colton.pawielski@xxxxxxxxx>
Reviewed-by: Daniel Machon <daniel.machon@xxxxxxxxxxxxx>