On Fri May 2, 2025 at 4:13 PM CEST, Marc Kleine-Budde wrote: > If a driver is removed, the driver framework invokes the driver's > remove callback. A CAN driver's remove function calls > unregister_candev(), which calls net_device_ops::ndo_stop further down > in the call stack for interfaces which are in the "up" state. > > The removal of the module causes the a warning, as > can_rx_offload_del() deletes the NAPI, while it is still active, > because the interface is still up. > > To fix the warning, first unregister the network interface, which > calls net_device_ops::ndo_stop, which disables the NAPI, and then call > can_rx_offload_del(). > > Fixes: 1be37d3b0414 ("can: m_can: fix periph RX path: use rx-offload to ensure skbs are sent from softirq context") > Cc: stable@vger.kernel.org > Signed-off-by: Marc Kleine-Budde Reviewed-by: Markus Schneider-Pargmann > --- > drivers/net/can/m_can/m_can.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c > index 884a6352c42b..7c430eaff5dd 100644 > --- a/drivers/net/can/m_can/m_can.c > +++ b/drivers/net/can/m_can/m_can.c > @@ -2462,9 +2462,9 @@ EXPORT_SYMBOL_GPL(m_can_class_register); > > void m_can_class_unregister(struct m_can_classdev *cdev) > { > + unregister_candev(cdev->net); > if (cdev->is_peripheral) > can_rx_offload_del(&cdev->offload); > - unregister_candev(cdev->net); > } > EXPORT_SYMBOL_GPL(m_can_class_unregister); >