Hello Horatiu Vultur, The patch d28d6d2e37d1: "net: lan966x: add port module support" from Nov 29, 2021, leads to the following Smatch static checker warning: drivers/net/ethernet/microchip/lan966x/lan966x_main.c:515 lan966x_xtr_irq_handler() warn: duplicate check 'sz < 0' (previous on line 502) drivers/net/ethernet/microchip/lan966x/lan966x_main.c 448 static irqreturn_t lan966x_xtr_irq_handler(int irq, void *args) 449 { 450 struct lan966x *lan966x = args; 451 int i, grp = 0, err = 0; 452 453 if (!(lan_rd(lan966x, QS_XTR_DATA_PRESENT) & BIT(grp))) 454 return IRQ_NONE; 455 456 do { 457 struct net_device *dev; 458 struct sk_buff *skb; 459 int sz = 0, buf_len; 460 u64 src_port, len; 461 u32 ifh[IFH_LEN]; 462 u32 *buf; 463 u32 val; 464 465 for (i = 0; i < IFH_LEN; i++) { 466 err = lan966x_rx_frame_word(lan966x, grp, &ifh[i]); 467 if (err != 4) 468 goto recover; 469 } 470 471 err = 0; 472 473 lan966x_ifh_get_src_port(ifh, &src_port); 474 lan966x_ifh_get_len(ifh, &len); 475 476 WARN_ON(src_port >= lan966x->num_phys_ports); 477 478 dev = lan966x->ports[src_port]->dev; 479 skb = netdev_alloc_skb(dev, len); 480 if (unlikely(!skb)) { 481 netdev_err(dev, "Unable to allocate sk_buff\n"); 482 err = -ENOMEM; 483 break; 484 } 485 buf_len = len - ETH_FCS_LEN; 486 buf = (u32 *)skb_put(skb, buf_len); 487 488 len = 0; 489 do { 490 sz = lan966x_rx_frame_word(lan966x, grp, &val); 491 if (sz < 0) { 492 kfree_skb(skb); 493 goto recover; 494 } 495 496 *buf++ = val; 497 len += sz; 498 } while (len < buf_len); 499 500 /* Read the FCS */ 501 sz = lan966x_rx_frame_word(lan966x, grp, &val); 502 if (sz < 0) { ^^^^^^ 503 kfree_skb(skb); 504 goto recover; 505 } 506 507 /* Update the statistics if part of the FCS was read before */ 508 len -= ETH_FCS_LEN - sz; 509 510 if (unlikely(dev->features & NETIF_F_RXFCS)) { 511 buf = (u32 *)skb_put(skb, ETH_FCS_LEN); 512 *buf = val; 513 } 514 --> 515 if (sz < 0) { ^^^^^^ "sz" can't be negative here. 516 err = sz; 517 break; 518 } 519 520 skb->protocol = eth_type_trans(skb, dev); 521 522 netif_rx_ni(skb); 523 dev->stats.rx_bytes += len; 524 dev->stats.rx_packets++; 525 526 recover: 527 if (sz < 0 || err) 528 lan_rd(lan966x, QS_XTR_RD(grp)); 529 530 } while (lan_rd(lan966x, QS_XTR_DATA_PRESENT) & BIT(grp)); 531 532 return IRQ_HANDLED; 533 } regards, dan carpenter