can: mcp251xfd: mcp251xfd_irq(): add missing can_rx_offload_threaded_irq_finish(...
authorMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 15 Oct 2021 17:46:59 +0000 (19:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:16:03 +0000 (19:16 +0100)
commit 691204bd66b34ba982e19988e6eba9f6321dfe6c upstream.

The function can_rx_offload_threaded_irq_finish() is needed to trigger
the NAPI thread to deliver read CAN frames to the networking stack.

This patch adds the missing call to can_rx_offload_threaded_irq_finish()
in case of a bus off, before leaving the interrupt handler to avoid
packet starvation.

Link: https://lore.kernel.org/all/20211106201526.44292-1-mkl@pengutronix.de
Fixes: 30bfec4fec59 ("can: rx-offload: can_rx_offload_threaded_irq_finish(): add new function to be called from threaded interrupt")
Cc: stable@vger.kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c

index 673861a..212fcd1 100644 (file)
@@ -2290,8 +2290,10 @@ static irqreturn_t mcp251xfd_irq(int irq, void *dev_id)
                         * check will fail, too. So leave IRQ handler
                         * directly.
                         */
-                       if (priv->can.state == CAN_STATE_BUS_OFF)
+                       if (priv->can.state == CAN_STATE_BUS_OFF) {
+                               can_rx_offload_threaded_irq_finish(&priv->offload);
                                return IRQ_HANDLED;
+                       }
                }
 
                handled = IRQ_HANDLED;