Hello Vincent Mailhol, The patch 3a5c7e4611dd: "can: pch_can: do not report txerr and rxerr during bus-off" from Jul 19, 2022, leads to the following Smatch static checker warning: drivers/net/can/pch_can.c:501 pch_can_error() error: uninitialized symbol 'errc'. drivers/net/can/pch_can.c 479 static void pch_can_error(struct net_device *ndev, u32 status) 480 { 481 struct sk_buff *skb; 482 struct pch_can_priv *priv = netdev_priv(ndev); 483 struct can_frame *cf; 484 u32 errc, lec; 485 struct net_device_stats *stats = &(priv->ndev->stats); 486 enum can_state state = priv->can.state; 487 488 skb = alloc_can_err_skb(ndev, &cf); 489 if (!skb) 490 return; 491 492 if (status & PCH_BUS_OFF) { 493 pch_can_set_tx_all(priv, 0); 494 pch_can_set_rx_all(priv, 0); 495 state = CAN_STATE_BUS_OFF; 496 cf->can_id |= CAN_ERR_BUSOFF; 497 priv->can.can_stats.bus_off++; 498 can_bus_off(ndev); 499 } else { 500 cf->can_id |= CAN_ERR_CNT; --> 501 cf->data[6] = errc & PCH_TEC; Not initialized at this point. 502 cf->data[7] = (errc & PCH_REC) >> 8; 503 } 504 505 errc = ioread32(&priv->regs->errc); 506 /* Warning interrupt. */ 507 if (status & PCH_EWARN) { 508 state = CAN_STATE_ERROR_WARNING; 509 priv->can.can_stats.error_warning++; 510 cf->can_id |= CAN_ERR_CRTL; 511 if (((errc & PCH_REC) >> 8) > 96) 512 cf->data[1] |= CAN_ERR_CRTL_RX_WARNING; 513 if ((errc & PCH_TEC) > 96) 514 cf->data[1] |= CAN_ERR_CRTL_TX_WARNING; 515 netdev_dbg(ndev, 516 "%s -> Error Counter is more than 96.\n", __func__); 517 } 518 /* Error passive interrupt. */ 519 if (status & PCH_EPASSIV) { 520 priv->can.can_stats.error_passive++; 521 state = CAN_STATE_ERROR_PASSIVE; 522 cf->can_id |= CAN_ERR_CRTL; 523 if (errc & PCH_RP) 524 cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE; 525 if ((errc & PCH_TEC) > 127) 526 cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE; 527 netdev_dbg(ndev, 528 "%s -> CAN controller is ERROR PASSIVE .\n", __func__); 529 } 530 531 lec = status & PCH_LEC_ALL; 532 switch (lec) { 533 case PCH_STUF_ERR: 534 cf->data[2] |= CAN_ERR_PROT_STUFF; 535 priv->can.can_stats.bus_error++; 536 stats->rx_errors++; 537 break; 538 case PCH_FORM_ERR: 539 cf->data[2] |= CAN_ERR_PROT_FORM; 540 priv->can.can_stats.bus_error++; 541 stats->rx_errors++; 542 break; 543 case PCH_ACK_ERR: 544 cf->can_id |= CAN_ERR_ACK; 545 priv->can.can_stats.bus_error++; 546 stats->rx_errors++; 547 break; 548 case PCH_BIT1_ERR: 549 case PCH_BIT0_ERR: 550 cf->data[2] |= CAN_ERR_PROT_BIT; 551 priv->can.can_stats.bus_error++; 552 stats->rx_errors++; 553 break; 554 case PCH_CRC_ERR: 555 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; 556 priv->can.can_stats.bus_error++; 557 stats->rx_errors++; 558 break; 559 case PCH_LEC_ALL: /* Written by CPU. No error status */ 560 break; 561 } 562 563 priv->can.state = state; 564 netif_receive_skb(skb); 565 } regards, dan carpenter