]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
can: hi311x: hi3110_can_ist(): update state error statistics if skb allocation fails
authorDario Binacchi <dario.binacchi@amarulasolutions.com>
Fri, 22 Nov 2024 22:15:46 +0000 (23:15 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Tue, 26 Nov 2024 09:50:28 +0000 (10:50 +0100)
Ensure that the statistics related to state error counters
(i. e. warning, passive, and bus-off) are updated even in case the skb
allocation fails. Additionally, also handle bus-off state is now.

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Link: https://patch.msgid.link/20241122221650.633981-6-dario.binacchi@amarulasolutions.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/spi/hi311x.c

index b67464df25ffeb1be0168a7069784a7cb7184bcd..25d9b32f57011af6441d28f9fe17710106a5b6bb 100644 (file)
@@ -663,8 +663,6 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
                        u8 rxerr, txerr;
 
                        skb = alloc_can_err_skb(net, &cf);
-                       if (!skb)
-                               break;
 
                        txerr = hi3110_read(spi, HI3110_READ_TEC);
                        rxerr = hi3110_read(spi, HI3110_READ_REC);
@@ -673,14 +671,15 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
                        can_change_state(net, cf, tx_state, rx_state);
 
                        if (new_state == CAN_STATE_BUS_OFF) {
-                               netif_rx(skb);
+                               if (skb)
+                                       netif_rx(skb);
                                can_bus_off(net);
                                if (priv->can.restart_ms == 0) {
                                        priv->force_quit = 1;
                                        hi3110_hw_sleep(spi);
                                        break;
                                }
-                       } else {
+                       } else if (skb) {
                                cf->can_id |= CAN_ERR_CNT;
                                cf->data[6] = txerr;
                                cf->data[7] = rxerr;