CC: [email protected] CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: John Efstathiades <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: f30a24ed97b401416118756fa35fbe5d28f999e3 commit: c450a8eb187a4d7ebe92e0afec54ac31ce403e79 [2016/3897] lan78xx: Introduce Rx URB processing improvements :::::: branch date: 2 days ago :::::: commit date: 10 days ago config: riscv-randconfig-c006-20211122 (https://download.01.org/0day-ci/archive/20211128/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project c133fb321f7ca6083ce15b6aa5bf89de6600e649) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=c450a8eb187a4d7ebe92e0afec54ac31ce403e79 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout c450a8eb187a4d7ebe92e0afec54ac31ce403e79 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ drivers/net/usb/lan78xx.c:2938:3: note: Taking false branch if (time_after(jiffies, timeout)) { ^ drivers/net/usb/lan78xx.c:2932:2: note: Loop condition is false. Exiting loop do { ^ drivers/net/usb/lan78xx.c:2946:2: note: Calling 'lan78xx_init_mac_address' lan78xx_init_mac_address(dev); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:1941:15: note: 'addr_hi' declared without an initial value u32 addr_lo, addr_hi; ^~~~~~~ drivers/net/usb/lan78xx.c:1945:2: note: Calling 'lan78xx_read_reg' lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:612:2: note: Taking false branch if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) ^ drivers/net/usb/lan78xx.c:616:6: note: Assuming 'buf' is null if (!buf) ^~~~ drivers/net/usb/lan78xx.c:616:2: note: Taking true branch if (!buf) ^ drivers/net/usb/lan78xx.c:617:3: note: Returning without writing to '*data' return -ENOMEM; ^ drivers/net/usb/lan78xx.c:1945:2: note: Returning from 'lan78xx_read_reg' lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:1951:20: note: The left operand of '&' is a garbage value addr[4] = addr_hi & 0xFF; ~~~~~~~ ^ drivers/net/usb/lan78xx.c:2008:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, MII_ACC, addr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2008:2: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, MII_ACC, addr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2014:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_read_reg(dev, MII_DATA, &val); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2014:2: note: Value stored to 'ret' is never read ret = lan78xx_read_reg(dev, MII_DATA, &val); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2044:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, MII_DATA, val); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2044:2: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, MII_DATA, val); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2048:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, MII_ACC, addr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2048:2: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, MII_ACC, addr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2136:3: warning: Value stored to 'temp' is never read [clang-analyzer-deadcode.DeadStores] temp = phy_read(phydev, LAN88XX_INT_STS); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2136:3: note: Value stored to 'temp' is never read temp = phy_read(phydev, LAN88XX_INT_STS); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2326:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, MAC_RGMII_ID, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2326:3: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, MAC_RGMII_ID, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2328:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2328:3: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2329:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_read_reg(dev, HW_CFG, &buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2329:3: note: Value stored to 'ret' is never read ret = lan78xx_read_reg(dev, HW_CFG, &buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2332:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_write_reg(dev, HW_CFG, buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2332:3: note: Value stored to 'ret' is never read ret = lan78xx_write_reg(dev, HW_CFG, buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2692:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = lan78xx_read_reg(dev, USB_CFG1, &buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:2692:2: note: Value stored to 'ret' is never read ret = lan78xx_read_reg(dev, USB_CFG1, &buf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:3610:3: warning: Value stored to 'rx_cmd_c' is never read [clang-analyzer-deadcode.DeadStores] rx_cmd_c = get_unaligned_le16(skb->data); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:3610:3: note: Value stored to 'rx_cmd_c' is never read rx_cmd_c = get_unaligned_le16(skb->data); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/net/usb/lan78xx.c:3794:2: warning: Value stored to 'state' is never >> read [clang-analyzer-deadcode.DeadStores] state = defer_bh(dev, skb, &dev->rxq, state); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:3794:2: note: Value stored to 'state' is never read state = defer_bh(dev, skb, &dev->rxq, state); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:4444:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = device_set_wakeup_enable(&udev->dev, true); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/usb/lan78xx.c:4444:2: note: Value stored to 'ret' is never read ret = device_set_wakeup_enable(&udev->dev, true); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. drivers/tty/vt/vt.c:586:21: warning: Value stored to 'uniscr' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct uni_screen *uniscr = get_vc_uniscr(vc); ^~~~~~ drivers/tty/vt/vt.c:586:21: note: Value stored to 'uniscr' during its initialization is never read struct uni_screen *uniscr = get_vc_uniscr(vc); ^~~~~~ Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. drivers/i2c/busses/i2c-rk3x.c:504:9: warning: Access to field 'flags' results in a dereference of a null pointer (loaded from field 'msg') [clang-analyzer-core.NullDereference] if (!(i2c->msg->flags & I2C_M_IGNORE_NAK)) ^ drivers/i2c/busses/i2c-rk3x.c:1066:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(&i2c->lock, flags); ^ include/linux/spinlock.h:379:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:264:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:8: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/irqflags.h:237:36: note: expanded from macro 'local_irq_save' #define local_irq_save(flags) do { raw_local_irq_save(flags); } while (0) ^ include/linux/irqflags.h:169:2: note: expanded from macro 'raw_local_irq_save' do { \ ^ drivers/i2c/busses/i2c-rk3x.c:1066:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(&i2c->lock, flags); ^ include/linux/spinlock.h:379:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:264:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ vim +/state +3794 drivers/net/usb/lan78xx.c 55d7de9de6c30a [email protected] 2015-07-30 3736 55d7de9de6c30a [email protected] 2015-07-30 3737 static void rx_complete(struct urb *urb) 55d7de9de6c30a [email protected] 2015-07-30 3738 { 55d7de9de6c30a [email protected] 2015-07-30 3739 struct sk_buff *skb = (struct sk_buff *)urb->context; 55d7de9de6c30a [email protected] 2015-07-30 3740 struct skb_data *entry = (struct skb_data *)skb->cb; 55d7de9de6c30a [email protected] 2015-07-30 3741 struct lan78xx_net *dev = entry->dev; 55d7de9de6c30a [email protected] 2015-07-30 3742 int urb_status = urb->status; 55d7de9de6c30a [email protected] 2015-07-30 3743 enum skb_state state; 55d7de9de6c30a [email protected] 2015-07-30 3744 c450a8eb187a4d John Efstathiades 2021-11-18 3745 netif_dbg(dev, rx_status, dev->net, c450a8eb187a4d John Efstathiades 2021-11-18 3746 "rx done: status %d", urb->status); c450a8eb187a4d John Efstathiades 2021-11-18 3747 55d7de9de6c30a [email protected] 2015-07-30 3748 skb_put(skb, urb->actual_length); 55d7de9de6c30a [email protected] 2015-07-30 3749 state = rx_done; c450a8eb187a4d John Efstathiades 2021-11-18 3750 c450a8eb187a4d John Efstathiades 2021-11-18 3751 if (urb != entry->urb) c450a8eb187a4d John Efstathiades 2021-11-18 3752 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); 55d7de9de6c30a [email protected] 2015-07-30 3753 55d7de9de6c30a [email protected] 2015-07-30 3754 switch (urb_status) { 55d7de9de6c30a [email protected] 2015-07-30 3755 case 0: 55d7de9de6c30a [email protected] 2015-07-30 3756 if (skb->len < dev->net->hard_header_len) { 55d7de9de6c30a [email protected] 2015-07-30 3757 state = rx_cleanup; 55d7de9de6c30a [email protected] 2015-07-30 3758 dev->net->stats.rx_errors++; 55d7de9de6c30a [email protected] 2015-07-30 3759 dev->net->stats.rx_length_errors++; 55d7de9de6c30a [email protected] 2015-07-30 3760 netif_dbg(dev, rx_err, dev->net, 55d7de9de6c30a [email protected] 2015-07-30 3761 "rx length %d\n", skb->len); 55d7de9de6c30a [email protected] 2015-07-30 3762 } 55d7de9de6c30a [email protected] 2015-07-30 3763 usb_mark_last_busy(dev->udev); 55d7de9de6c30a [email protected] 2015-07-30 3764 break; 55d7de9de6c30a [email protected] 2015-07-30 3765 case -EPIPE: 55d7de9de6c30a [email protected] 2015-07-30 3766 dev->net->stats.rx_errors++; 55d7de9de6c30a [email protected] 2015-07-30 3767 lan78xx_defer_kevent(dev, EVENT_RX_HALT); df561f6688fef7 Gustavo A. R. Silva 2020-08-23 3768 fallthrough; 55d7de9de6c30a [email protected] 2015-07-30 3769 case -ECONNRESET: /* async unlink */ 55d7de9de6c30a [email protected] 2015-07-30 3770 case -ESHUTDOWN: /* hardware gone */ 55d7de9de6c30a [email protected] 2015-07-30 3771 netif_dbg(dev, ifdown, dev->net, 55d7de9de6c30a [email protected] 2015-07-30 3772 "rx shutdown, code %d\n", urb_status); 55d7de9de6c30a [email protected] 2015-07-30 3773 state = rx_cleanup; 55d7de9de6c30a [email protected] 2015-07-30 3774 break; 55d7de9de6c30a [email protected] 2015-07-30 3775 case -EPROTO: 55d7de9de6c30a [email protected] 2015-07-30 3776 case -ETIME: 55d7de9de6c30a [email protected] 2015-07-30 3777 case -EILSEQ: 55d7de9de6c30a [email protected] 2015-07-30 3778 dev->net->stats.rx_errors++; 55d7de9de6c30a [email protected] 2015-07-30 3779 state = rx_cleanup; 55d7de9de6c30a [email protected] 2015-07-30 3780 break; 55d7de9de6c30a [email protected] 2015-07-30 3781 55d7de9de6c30a [email protected] 2015-07-30 3782 /* data overrun ... flush fifo? */ 55d7de9de6c30a [email protected] 2015-07-30 3783 case -EOVERFLOW: 55d7de9de6c30a [email protected] 2015-07-30 3784 dev->net->stats.rx_over_errors++; df561f6688fef7 Gustavo A. R. Silva 2020-08-23 3785 fallthrough; 55d7de9de6c30a [email protected] 2015-07-30 3786 55d7de9de6c30a [email protected] 2015-07-30 3787 default: 55d7de9de6c30a [email protected] 2015-07-30 3788 state = rx_cleanup; 55d7de9de6c30a [email protected] 2015-07-30 3789 dev->net->stats.rx_errors++; 55d7de9de6c30a [email protected] 2015-07-30 3790 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); 55d7de9de6c30a [email protected] 2015-07-30 3791 break; 55d7de9de6c30a [email protected] 2015-07-30 3792 } 55d7de9de6c30a [email protected] 2015-07-30 3793 55d7de9de6c30a [email protected] 2015-07-30 @3794 state = defer_bh(dev, skb, &dev->rxq, state); c450a8eb187a4d John Efstathiades 2021-11-18 3795 } 55d7de9de6c30a [email protected] 2015-07-30 3796 :::::: The code at line 3794 was first introduced by commit :::::: 55d7de9de6c30adce8d675c7ce513e283829c2ff Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver :::::: TO: [email protected] <[email protected]> :::::: CC: David S. Miller <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
