* Re: [PATCH net-next 7/8] virtio_net: introduce receive_mergeable_xdp()
[not found] <20230322030308.16046-8-xuanzhuo@linux.alibaba.com>
@ 2023-03-22 23:43 ` kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-03-22 23:43 UTC (permalink / raw)
To: Xuan Zhuo, netdev
Cc: llvm, oe-kbuild-all, Michael S. Tsirkin, Jason Wang,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Alexei Starovoitov,
Daniel Borkmann, Jesper Dangaard Brouer, John Fastabend,
virtualization, bpf
Hi Xuan,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Xuan-Zhuo/virtio_net-mergeable-xdp-put-old-page-immediately/20230322-110445
patch link: https://lore.kernel.org/r/20230322030308.16046-8-xuanzhuo%40linux.alibaba.com
patch subject: [PATCH net-next 7/8] virtio_net: introduce receive_mergeable_xdp()
config: i386-randconfig-a002 (https://download.01.org/0day-ci/archive/20230323/202303230720.XUavHilr-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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
# https://github.com/intel-lab-lkp/linux/commit/c00edb888e239eb9eb468c0e93419f373f5e72a7
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Xuan-Zhuo/virtio_net-mergeable-xdp-put-old-page-immediately/20230322-110445
git checkout c00edb888e239eb9eb468c0e93419f373f5e72a7
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/net/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303230720.XUavHilr-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/net/virtio_net.c:1399:6: warning: variable 'page' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (unlikely(len > truesize - room)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:78:22: note: expanded from macro 'unlikely'
# define unlikely(x) __builtin_expect(!!(x), 0)
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c:1490:11: note: uninitialized use occurs here
put_page(page);
^~~~
drivers/net/virtio_net.c:1399:2: note: remove the 'if' if its condition is always false
if (unlikely(len > truesize - room)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c:1392:19: note: initialize the variable 'page' to silence this warning
struct page *page;
^
= NULL
>> drivers/net/virtio_net.c:1399:6: warning: variable 'num_buf' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (unlikely(len > truesize - room)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:78:22: note: expanded from macro 'unlikely'
# define unlikely(x) __builtin_expect(!!(x), 0)
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c:1491:25: note: uninitialized use occurs here
mergeable_buf_free(rq, num_buf, dev, stats);
^~~~~~~
drivers/net/virtio_net.c:1399:2: note: remove the 'if' if its condition is always false
if (unlikely(len > truesize - room)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c:1393:13: note: initialize the variable 'num_buf' to silence this warning
int num_buf;
^
= 0
2 warnings generated.
vim +1399 drivers/net/virtio_net.c
1375
1376 static struct sk_buff *receive_mergeable(struct net_device *dev,
1377 struct virtnet_info *vi,
1378 struct receive_queue *rq,
1379 void *buf,
1380 void *ctx,
1381 unsigned int len,
1382 unsigned int *xdp_xmit,
1383 struct virtnet_rq_stats *stats)
1384 {
1385 unsigned int truesize = mergeable_ctx_to_truesize(ctx);
1386 unsigned int headroom = mergeable_ctx_to_headroom(ctx);
1387 unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1388 unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
1389 struct virtio_net_hdr_mrg_rxbuf *hdr;
1390 struct sk_buff *head_skb, *curr_skb;
1391 struct bpf_prog *xdp_prog;
1392 struct page *page;
1393 int num_buf;
1394 int offset;
1395
1396 head_skb = NULL;
1397 stats->bytes += len - vi->hdr_len;
1398
> 1399 if (unlikely(len > truesize - room)) {
1400 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1401 dev->name, len, (unsigned long)(truesize - room));
1402 dev->stats.rx_length_errors++;
1403 goto err_skb;
1404 }
1405
1406 if (likely(vi->xdp_enabled)) {
1407 rcu_read_lock();
1408 xdp_prog = rcu_dereference(rq->xdp_prog);
1409 if (xdp_prog) {
1410 head_skb = receive_mergeable_xdp(dev, vi, rq, xdp_prog,
1411 buf, ctx, len, xdp_xmit,
1412 stats);
1413 rcu_read_unlock();
1414 return head_skb;
1415 }
1416 rcu_read_unlock();
1417 }
1418
1419 hdr = buf;
1420 num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
1421 page = virt_to_head_page(buf);
1422 offset = buf - page_address(page);
1423
1424 head_skb = page_to_skb(vi, rq, page, offset, len, truesize, headroom);
1425 curr_skb = head_skb;
1426
1427 if (unlikely(!curr_skb))
1428 goto err_skb;
1429 while (--num_buf) {
1430 int num_skb_frags;
1431
1432 buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
1433 if (unlikely(!buf)) {
1434 pr_debug("%s: rx error: %d buffers out of %d missing\n",
1435 dev->name, num_buf,
1436 virtio16_to_cpu(vi->vdev,
1437 hdr->num_buffers));
1438 dev->stats.rx_length_errors++;
1439 goto err_buf;
1440 }
1441
1442 stats->bytes += len;
1443 page = virt_to_head_page(buf);
1444
1445 truesize = mergeable_ctx_to_truesize(ctx);
1446 headroom = mergeable_ctx_to_headroom(ctx);
1447 tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1448 room = SKB_DATA_ALIGN(headroom + tailroom);
1449 if (unlikely(len > truesize - room)) {
1450 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1451 dev->name, len, (unsigned long)(truesize - room));
1452 dev->stats.rx_length_errors++;
1453 goto err_skb;
1454 }
1455
1456 num_skb_frags = skb_shinfo(curr_skb)->nr_frags;
1457 if (unlikely(num_skb_frags == MAX_SKB_FRAGS)) {
1458 struct sk_buff *nskb = alloc_skb(0, GFP_ATOMIC);
1459
1460 if (unlikely(!nskb))
1461 goto err_skb;
1462 if (curr_skb == head_skb)
1463 skb_shinfo(curr_skb)->frag_list = nskb;
1464 else
1465 curr_skb->next = nskb;
1466 curr_skb = nskb;
1467 head_skb->truesize += nskb->truesize;
1468 num_skb_frags = 0;
1469 }
1470 if (curr_skb != head_skb) {
1471 head_skb->data_len += len;
1472 head_skb->len += len;
1473 head_skb->truesize += truesize;
1474 }
1475 offset = buf - page_address(page);
1476 if (skb_can_coalesce(curr_skb, num_skb_frags, page, offset)) {
1477 put_page(page);
1478 skb_coalesce_rx_frag(curr_skb, num_skb_frags - 1,
1479 len, truesize);
1480 } else {
1481 skb_add_rx_frag(curr_skb, num_skb_frags, page,
1482 offset, len, truesize);
1483 }
1484 }
1485
1486 ewma_pkt_len_add(&rq->mrg_avg_pkt_len, head_skb->len);
1487 return head_skb;
1488
1489 err_skb:
1490 put_page(page);
1491 mergeable_buf_free(rq, num_buf, dev, stats);
1492
1493 err_buf:
1494 stats->drops++;
1495 dev_kfree_skb(head_skb);
1496 return NULL;
1497 }
1498
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-03-22 23:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20230322030308.16046-8-xuanzhuo@linux.alibaba.com>
2023-03-22 23:43 ` [PATCH net-next 7/8] virtio_net: introduce receive_mergeable_xdp() kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).