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: csky-randconfig-r113-20260826 (https://download.01.org/0day-ci/archive/20260828/[email protected]/config) compiler: csky-linux-gcc (GCC) 15.2.0 sparse: v0.6.5-rc1 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260828/[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_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 *from @@ got struct wx_ring [noderef] __rcu * @@ drivers/net/ethernet/wangxun/libwx/wx_lib.c:3327:58: sparse: expected void const *from 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 *to @@ got struct wx_ring [noderef] __rcu * @@ drivers/net/ethernet/wangxun/libwx/wx_lib.c:3345:43: sparse: expected void *to 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 *from @@ got struct wx_ring [noderef] __rcu * @@ drivers/net/ethernet/wangxun/libwx/wx_lib.c:3355:58: sparse: expected void const *from 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 *to @@ got struct wx_ring [noderef] __rcu * @@ drivers/net/ethernet/wangxun/libwx/wx_lib.c:3372:43: sparse: expected void *to 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 vim +3327 drivers/net/ethernet/wangxun/libwx/wx_lib.c 3b05aa997c4914 Jiawen Wu 2025-04-21 3314 0ce45ae881fd90 Mengyuan Lou 2026-07-10 3315 int wx_set_ring(struct wx *wx, u32 new_tx_count, 883b5984a5d290 Jiawen Wu 2024-01-03 3316 u32 new_rx_count, struct wx_ring *temp_ring) 883b5984a5d290 Jiawen Wu 2024-01-03 3317 { 883b5984a5d290 Jiawen Wu 2024-01-03 3318 int i, err = 0; 883b5984a5d290 Jiawen Wu 2024-01-03 3319 883b5984a5d290 Jiawen Wu 2024-01-03 3320 /* Setup new Tx resources and free the old Tx resources in that order. 883b5984a5d290 Jiawen Wu 2024-01-03 3321 * We can then assign the new resources to the rings via a memcpy. 883b5984a5d290 Jiawen Wu 2024-01-03 3322 * The advantage to this approach is that we are guaranteed to still 883b5984a5d290 Jiawen Wu 2024-01-03 3323 * have resources even in the case of an allocation failure. 883b5984a5d290 Jiawen Wu 2024-01-03 3324 */ 883b5984a5d290 Jiawen Wu 2024-01-03 3325 if (new_tx_count != wx->tx_ring_count) { 883b5984a5d290 Jiawen Wu 2024-01-03 3326 for (i = 0; i < wx->num_tx_queues; i++) { 883b5984a5d290 Jiawen Wu 2024-01-03 @3327 memcpy(&temp_ring[i], wx->tx_ring[i], 883b5984a5d290 Jiawen Wu 2024-01-03 3328 sizeof(struct wx_ring)); 883b5984a5d290 Jiawen Wu 2024-01-03 3329 883b5984a5d290 Jiawen Wu 2024-01-03 3330 temp_ring[i].count = new_tx_count; 883b5984a5d290 Jiawen Wu 2024-01-03 3331 err = wx_setup_tx_resources(&temp_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3332 if (err) { 883b5984a5d290 Jiawen Wu 2024-01-03 3333 wx_err(wx, "setup new tx resources failed, keep using the old config\n"); 883b5984a5d290 Jiawen Wu 2024-01-03 3334 while (i) { 883b5984a5d290 Jiawen Wu 2024-01-03 3335 i--; 883b5984a5d290 Jiawen Wu 2024-01-03 3336 wx_free_tx_resources(&temp_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3337 } 0ce45ae881fd90 Mengyuan Lou 2026-07-10 3338 return err; 883b5984a5d290 Jiawen Wu 2024-01-03 3339 } 883b5984a5d290 Jiawen Wu 2024-01-03 3340 } 883b5984a5d290 Jiawen Wu 2024-01-03 3341 883b5984a5d290 Jiawen Wu 2024-01-03 3342 for (i = 0; i < wx->num_tx_queues; i++) { 883b5984a5d290 Jiawen Wu 2024-01-03 3343 wx_free_tx_resources(wx->tx_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3344 883b5984a5d290 Jiawen Wu 2024-01-03 @3345 memcpy(wx->tx_ring[i], &temp_ring[i], 883b5984a5d290 Jiawen Wu 2024-01-03 3346 sizeof(struct wx_ring)); 883b5984a5d290 Jiawen Wu 2024-01-03 3347 } 883b5984a5d290 Jiawen Wu 2024-01-03 3348 883b5984a5d290 Jiawen Wu 2024-01-03 3349 wx->tx_ring_count = new_tx_count; 883b5984a5d290 Jiawen Wu 2024-01-03 3350 } 883b5984a5d290 Jiawen Wu 2024-01-03 3351 883b5984a5d290 Jiawen Wu 2024-01-03 3352 /* Repeat the process for the Rx rings if needed */ 883b5984a5d290 Jiawen Wu 2024-01-03 3353 if (new_rx_count != wx->rx_ring_count) { 883b5984a5d290 Jiawen Wu 2024-01-03 3354 for (i = 0; i < wx->num_rx_queues; i++) { 883b5984a5d290 Jiawen Wu 2024-01-03 3355 memcpy(&temp_ring[i], wx->rx_ring[i], 883b5984a5d290 Jiawen Wu 2024-01-03 3356 sizeof(struct wx_ring)); 883b5984a5d290 Jiawen Wu 2024-01-03 3357 883b5984a5d290 Jiawen Wu 2024-01-03 3358 temp_ring[i].count = new_rx_count; 883b5984a5d290 Jiawen Wu 2024-01-03 3359 err = wx_setup_rx_resources(&temp_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3360 if (err) { 883b5984a5d290 Jiawen Wu 2024-01-03 3361 wx_err(wx, "setup new rx resources failed, keep using the old config\n"); 883b5984a5d290 Jiawen Wu 2024-01-03 3362 while (i) { 883b5984a5d290 Jiawen Wu 2024-01-03 3363 i--; 883b5984a5d290 Jiawen Wu 2024-01-03 3364 wx_free_rx_resources(&temp_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3365 } 0ce45ae881fd90 Mengyuan Lou 2026-07-10 3366 return err; 883b5984a5d290 Jiawen Wu 2024-01-03 3367 } 883b5984a5d290 Jiawen Wu 2024-01-03 3368 } 883b5984a5d290 Jiawen Wu 2024-01-03 3369 883b5984a5d290 Jiawen Wu 2024-01-03 3370 for (i = 0; i < wx->num_rx_queues; i++) { 883b5984a5d290 Jiawen Wu 2024-01-03 3371 wx_free_rx_resources(wx->rx_ring[i]); 883b5984a5d290 Jiawen Wu 2024-01-03 3372 memcpy(wx->rx_ring[i], &temp_ring[i], 883b5984a5d290 Jiawen Wu 2024-01-03 3373 sizeof(struct wx_ring)); 883b5984a5d290 Jiawen Wu 2024-01-03 3374 } 883b5984a5d290 Jiawen Wu 2024-01-03 3375 883b5984a5d290 Jiawen Wu 2024-01-03 3376 wx->rx_ring_count = new_rx_count; 883b5984a5d290 Jiawen Wu 2024-01-03 3377 } 0ce45ae881fd90 Mengyuan Lou 2026-07-10 3378 return 0; 883b5984a5d290 Jiawen Wu 2024-01-03 3379 } 883b5984a5d290 Jiawen Wu 2024-01-03 3380 EXPORT_SYMBOL(wx_set_ring); 883b5984a5d290 Jiawen Wu 2024-01-03 3381 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki