Re: [PATCH net v3] net: libwx: protect ring accesses with RCU

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild-all,org.kernel.vger.netdev
Message-ID <[email protected]>
Hi Mengyuan,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Mengyuan-Lou/net-libwx-protect-ring-accesses-with-RCU/20260824-183606
base:   net/main
patch link:    https://lore.kernel.org/r/20260824103606.303-1-mengyuanlou%40net-swift.com
patch subject: [PATCH net v3] net: libwx: protect ring accesses with RCU
config: microblaze-randconfig-r133-20260826 (https://download.01.org/0day-ci/archive/20260827/[email protected]/config)
compiler: microblaze-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260827/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/wangxun/libwx/wx_vf_common.c:208:54: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_vf_common.c:208:54: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_vf_common.c:208:54: sparse:     got struct wx_ring [noderef] __rcu *
--
>> drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c:179:56: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c:179:56: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_vf_lib.c:179:56: sparse:     got struct wx_ring [noderef] __rcu *
--
>> drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:158:22: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:158:22: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:158:22: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:173:22: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:173:22: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:173:22: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:808:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_ethtool.c:810:36: sparse: sparse: dereference of noderef expression
--
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:1717:17: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:1717:17: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:1717:17: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:2662:45: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2662:45: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2662:45: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2704:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2704:49: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2704:49: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:2778:45: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2778:45: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2778:45: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2826:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2826:49: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2826:49: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2936:56: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2936:56: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2936:56: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2948:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2948:49: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2948:49: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3039:56: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3039:56: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3039:56: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3051:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3051:49: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3051:49: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:3327:58: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const * @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3327:58: sparse:     expected void const *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3327:58: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3343:57: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *tx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3343:57: sparse:     expected struct wx_ring *tx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3343:57: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:3345:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void * @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3345:43: sparse:     expected void *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3345:43: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3355:58: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const * @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3355:58: sparse:     expected void const *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3355:58: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3371:57: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3371:57: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3371:57: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3372:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void * @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3372:43: sparse:     expected void *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:3372:43: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_lib.c: note: in included file (through include/linux/if_ether.h, include/linux/etherdevice.h):
   include/linux/skbuff.h:2904:28: sparse: sparse: unsigned value that used to be signed checked against zero?
   include/linux/skbuff.h:2904:28: sparse: signed value source
>> drivers/net/ethernet/wangxun/libwx/wx_lib.c:2061:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2068:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2075:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2080:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2101:28: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/libwx/wx_lib.c:2104:28: sparse: sparse: dereference of noderef expression
--
>> drivers/net/ethernet/wangxun/libwx/wx_hw.c:1602:51: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:1602:51: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:1602:51: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_hw.c:1800:25: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct wx_ring *rx_ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:1800:25: sparse:     expected struct wx_ring *rx_ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:1800:25: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/libwx/wx_hw.c:2025:53: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2025:53: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2025:53: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2251:53: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2251:53: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2251:53: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2842:58: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2842:58: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2842:58: sparse:     got struct wx_ring [noderef] __rcu *
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2845:59: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2845:59: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/libwx/wx_hw.c:2845:59: sparse:     got struct wx_ring [noderef] __rcu *
--
>> drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c:40:36: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c:42:36: sparse: sparse: dereference of noderef expression
--
>> drivers/net/ethernet/wangxun/ngbe/ngbe_main.c:409:52: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct wx_ring *ring @@     got struct wx_ring [noderef] __rcu * @@
   drivers/net/ethernet/wangxun/ngbe/ngbe_main.c:409:52: sparse:     expected struct wx_ring *ring
   drivers/net/ethernet/wangxun/ngbe/ngbe_main.c:409:52: sparse:     got struct wx_ring [noderef] __rcu *
>> drivers/net/ethernet/wangxun/ngbe/ngbe_main.c:425:41: sparse: sparse: dereference of noderef expression

vim +1717 drivers/net/ethernet/wangxun/libwx/wx_lib.c

09a508800952f8 Mengyuan Lou 2023-02-03  1696  
09a508800952f8 Mengyuan Lou 2023-02-03  1697  netdev_tx_t wx_xmit_frame(struct sk_buff *skb,
09a508800952f8 Mengyuan Lou 2023-02-03  1698  			  struct net_device *netdev)
09a508800952f8 Mengyuan Lou 2023-02-03  1699  {
09a508800952f8 Mengyuan Lou 2023-02-03  1700  	unsigned int r_idx = skb->queue_mapping;
09a508800952f8 Mengyuan Lou 2023-02-03  1701  	struct wx *wx = netdev_priv(netdev);
09a508800952f8 Mengyuan Lou 2023-02-03  1702  	struct wx_ring *tx_ring;
09a508800952f8 Mengyuan Lou 2023-02-03  1703  
09a508800952f8 Mengyuan Lou 2023-02-03  1704  	if (!netif_carrier_ok(netdev)) {
09a508800952f8 Mengyuan Lou 2023-02-03  1705  		dev_kfree_skb_any(skb);
09a508800952f8 Mengyuan Lou 2023-02-03  1706  		return NETDEV_TX_OK;
09a508800952f8 Mengyuan Lou 2023-02-03  1707  	}
09a508800952f8 Mengyuan Lou 2023-02-03  1708  
09a508800952f8 Mengyuan Lou 2023-02-03  1709  	/* The minimum packet size for olinfo paylen is 17 so pad the skb
09a508800952f8 Mengyuan Lou 2023-02-03  1710  	 * in order to meet this minimum size requirement.
09a508800952f8 Mengyuan Lou 2023-02-03  1711  	 */
09a508800952f8 Mengyuan Lou 2023-02-03  1712  	if (skb_put_padto(skb, 17))
09a508800952f8 Mengyuan Lou 2023-02-03  1713  		return NETDEV_TX_OK;
09a508800952f8 Mengyuan Lou 2023-02-03  1714  
09a508800952f8 Mengyuan Lou 2023-02-03  1715  	if (r_idx >= wx->num_tx_queues)
09a508800952f8 Mengyuan Lou 2023-02-03  1716  		r_idx = r_idx % wx->num_tx_queues;
09a508800952f8 Mengyuan Lou 2023-02-03 @1717  	tx_ring = wx->tx_ring[r_idx];
09a508800952f8 Mengyuan Lou 2023-02-03  1718  
09a508800952f8 Mengyuan Lou 2023-02-03  1719  	return wx_xmit_frame_ring(skb, tx_ring);
09a508800952f8 Mengyuan Lou 2023-02-03  1720  }
09a508800952f8 Mengyuan Lou 2023-02-03  1721  EXPORT_SYMBOL(wx_xmit_frame);
09a508800952f8 Mengyuan Lou 2023-02-03  1722  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.