All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] net: lan966x: add port module support
@ 2021-12-01  7:11 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2021-12-01  7:11 UTC (permalink / raw)
  To: horatiu.vultur; +Cc: kernel-janitors

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-01  7:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-01  7:11 [bug report] net: lan966x: add port module support Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.