]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
can: sun4i_can: sun4i_can_err(): call can_change_state() even if cf is NULL
authorDario Binacchi <dario.binacchi@amarulasolutions.com>
Fri, 22 Nov 2024 22:15:43 +0000 (23:15 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Tue, 26 Nov 2024 09:49:30 +0000 (10:49 +0100)
Call the function can_change_state() if the allocation of the skb
fails, as it handles the cf parameter when it is null.

Additionally, this ensures that the statistics related to state error
counters (i. e. warning, passive, and bus-off) are updated.

Fixes: 0738eff14d81 ("can: Allwinner A10/A20 CAN Controller support - Kernel module")
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Link: https://patch.msgid.link/20241122221650.633981-3-dario.binacchi@amarulasolutions.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/sun4i_can.c

index 360158c295d348efc5547826f7dbf9c848bb80a9..17f94cca93fbcca8b9ade937bd68dedb0e91b55f 100644 (file)
@@ -629,10 +629,10 @@ static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status)
                tx_state = txerr >= rxerr ? state : 0;
                rx_state = txerr <= rxerr ? state : 0;
 
-               if (likely(skb))
-                       can_change_state(dev, cf, tx_state, rx_state);
-               else
-                       priv->can.state = state;
+               /* The skb allocation might fail, but can_change_state()
+                * handles cf == NULL.
+                */
+               can_change_state(dev, cf, tx_state, rx_state);
                if (state == CAN_STATE_BUS_OFF)
                        can_bus_off(dev);
        }