On Mon, Oct 31, 2022 at 09:04:20AM +0000, Biju Das wrote: > commit 702de2c21eed04c67cefaaedc248ef16e5f6b293 upstream. > > We are seeing an IRQ storm on the global receive IRQ line under heavy > CAN bus load conditions with both CAN channels enabled. > > Conditions: > > The global receive IRQ line is shared between can0 and can1, either of > the channels can trigger interrupt while the other channel's IRQ line > is disabled (RFIE). > > When global a receive IRQ interrupt occurs, we mask the interrupt in > the IRQ handler. Clearing and unmasking of the interrupt is happening > in rx_poll(). There is a race condition where rx_poll() unmasks the > interrupt, but the next IRQ handler does not mask the IRQ due to > NAPIF_STATE_MISSED flag (e.g.: can0 RX FIFO interrupt is disabled and > can1 is triggering RX interrupt, the delay in rx_poll() processing > results in setting NAPIF_STATE_MISSED flag) leading to an IRQ storm. > > This patch fixes the issue by checking IRQ active and enabled before > handling the IRQ on a particular channel. > > Fixes: dd3bd23eb438 ("can: rcar_canfd: Add Renesas R-Car CAN FD driver") > Suggested-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > Link: https://lore.kernel.org/all/20221025155657.1426948-2-biju.das.jz@xxxxxxxxxxxxxx > Cc: stable@xxxxxxxxxxxxxxx # 4.9.x > [mkl: adjust commit message] > Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > [biju: removed gpriv from RCANFD_RFCC_RFIE macro] > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > --- > Resending to 4.9 with confilcts[1] fixed > [1] https://lore.kernel.org/stable/OS0PR01MB59226F2443DFCE7C5D73778786379@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/#t > --- > drivers/net/can/rcar/rcar_canfd.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) All now queued up, thanks. greg k-h