All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhu Yanjun <yanjun.zhu@linux.dev>
To: kernel test robot <lkp@intel.com>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
	netdev@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	virtualization@lists.linux.dev
Subject: Re: [PATCH net-next v1 3/6] virtio_net: support device stats
Date: Tue, 2 Jan 2024 17:45:31 +0800	[thread overview]
Message-ID: <2c7d53d8-7d54-40cc-8125-9ba5386d79f1@linux.dev> (raw)
In-Reply-To: <202401020308.rvzTx1oI-lkp@intel.com>


在 2024/1/2 3:56, kernel test robot 写道:
> Hi Xuan,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on mst-vhost/linux-next]
> [also build test WARNING on linus/master v6.7-rc8]
> [cannot apply to net-next/main horms-ipvs/master next-20231222]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Xuan-Zhuo/virtio_net-introduce-device-stats-feature-and-structures/20231226-153227
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next
> patch link:    https://lore.kernel.org/r/20231226073103.116153-4-xuanzhuo%40linux.alibaba.com
> patch subject: [PATCH net-next v1 3/6] virtio_net: support device stats
> config: x86_64-randconfig-121-20240101 (https://download.01.org/0day-ci/archive/20240102/202401020308.rvzTx1oI-lkp@intel.com/config)
> compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240102/202401020308.rvzTx1oI-lkp@intel.com/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 <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202401020308.rvzTx1oI-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
>>> drivers/net/virtio_net.c:3432:52: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __virtio16 [usertype] val @@     got restricted __le16 [usertype] vq_index @@
>     drivers/net/virtio_net.c:3432:52: sparse:     expected restricted __virtio16 [usertype] val
>     drivers/net/virtio_net.c:3432:52: sparse:     got restricted __le16 [usertype] vq_index
>     drivers/net/virtio_net.c:3457:83: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __virtio64 [usertype] val @@     got unsigned long long [usertype] @@
>     drivers/net/virtio_net.c:3457:83: sparse:     expected restricted __virtio64 [usertype] val
>     drivers/net/virtio_net.c:3457:83: sparse:     got unsigned long long [usertype]
>>> drivers/net/virtio_net.c:3429:81: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __virtio16 [usertype] val @@     got restricted __le16 [usertype] size @@
>     drivers/net/virtio_net.c:3429:81: sparse:     expected restricted __virtio16 [usertype] val
>     drivers/net/virtio_net.c:3429:81: sparse:     got restricted __le16 [usertype] size
>>> drivers/net/virtio_net.c:3519:82: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __virtio64 [usertype] val @@     got restricted __le64 [assigned] [usertype] v @@
>     drivers/net/virtio_net.c:3519:82: sparse:     expected restricted __virtio64 [usertype] val
>     drivers/net/virtio_net.c:3519:82: sparse:     got restricted __le64 [assigned] [usertype] v

I can reproduce these warnings in the local host.

It seems that the followings can fix these warnings.

"

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 1f4d9605552f..62e40234e29c 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -3426,10 +3426,10 @@ static int virtnet_get_hw_stats(struct 
virtnet_info *vi,
         num_tx = VIRTNET_SQ_STATS_LEN + ctx->num_tx;
         num_cq = ctx->num_tx;

-       for (p = reply; p - reply < res_size; p += 
virtio16_to_cpu(vi->vdev, hdr->size)) {
+       for (p = reply; p - reply < res_size; p += 
virtio16_to_cpu(vi->vdev, (__virtio16 __force)hdr->size)) {
                 hdr = p;

-               qid = virtio16_to_cpu(vi->vdev, hdr->vq_index);
+               qid = virtio16_to_cpu(vi->vdev, (__virtio16 
__force)(hdr->vq_index));

                 if (qid == vi->max_queue_pairs * 2) {
                         offset = 0;
@@ -3454,7 +3454,7 @@ static int virtnet_get_hw_stats(struct 
virtnet_info *vi,

                         for (j = 0; j < m->num; ++j) {
                                 v = p + m->desc[j].offset;
-                               ctx->data[offset + j] = 
virtio64_to_cpu(vi->vdev, *v);
+                               ctx->data[offset + j] = 
virtio64_to_cpu(vi->vdev, (__virtio64 __force)*v);
                         }

                         break;
@@ -3516,7 +3516,7 @@ static int virtnet_get_sset_count(struct 
net_device *dev, int sset)
                                 __le64 v;

                                 v = 
vi->ctrl->stats_cap.supported_stats_types[0];
-                               vi->device_stats_cap = 
virtio64_to_cpu(vi->vdev, v);
+                               vi->device_stats_cap = 
virtio64_to_cpu(vi->vdev, (__virtio64 __force)v);
                         }
                 }

"

Not sure whether the above diff are good to the whole commit or not.

Zhu Yanjun

>
> vim +3432 drivers/net/virtio_net.c
>
>    3352	
>    3353	static int virtnet_get_hw_stats(struct virtnet_info *vi,
>    3354					struct virtnet_stats_ctx *ctx)
>    3355	{
>    3356		struct virtio_net_ctrl_queue_stats *req;
>    3357		struct virtio_net_stats_reply_hdr *hdr;
>    3358		struct scatterlist sgs_in, sgs_out;
>    3359		u32 num_rx, num_tx, num_cq, offset;
>    3360		int qnum, i, j,  qid, res_size;
>    3361		struct virtnet_stats_map *m;
>    3362		void *reply, *p;
>    3363		u64 bitmap;
>    3364		int ok;
>    3365		u64 *v;
>    3366	
>    3367		if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_DEVICE_STATS))
>    3368			return 0;
>    3369	
>    3370		qnum = 0;
>    3371		if (ctx->bitmap_cq)
>    3372			qnum += 1;
>    3373	
>    3374		if (ctx->bitmap_rx)
>    3375			qnum += vi->curr_queue_pairs;
>    3376	
>    3377		if (ctx->bitmap_tx)
>    3378			qnum += vi->curr_queue_pairs;
>    3379	
>    3380		req = kcalloc(qnum, sizeof(*req), GFP_KERNEL);
>    3381		if (!req)
>    3382			return -ENOMEM;
>    3383	
>    3384		res_size = (ctx->size_rx + ctx->size_tx) * vi->curr_queue_pairs + ctx->size_cq;
>    3385		reply = kmalloc(res_size, GFP_KERNEL);
>    3386		if (!reply) {
>    3387			kfree(req);
>    3388			return -ENOMEM;
>    3389		}
>    3390	
>    3391		j = 0;
>    3392		for (i = 0; i < vi->curr_queue_pairs; ++i) {
>    3393			if (ctx->bitmap_rx) {
>    3394				req->stats[j].vq_index = cpu_to_le16(i * 2);
>    3395				req->stats[j].types_bitmap[0] = cpu_to_le64(ctx->bitmap_rx);
>    3396				++j;
>    3397			}
>    3398	
>    3399			if (ctx->bitmap_tx) {
>    3400				req->stats[j].vq_index = cpu_to_le16(i * 2 + 1);
>    3401				req->stats[j].types_bitmap[0] = cpu_to_le64(ctx->bitmap_tx);
>    3402				++j;
>    3403			}
>    3404		}
>    3405	
>    3406		if (ctx->size_cq) {
>    3407			req->stats[j].vq_index = cpu_to_le16(vi->max_queue_pairs * 2);
>    3408			req->stats[j].types_bitmap[0] = cpu_to_le64(ctx->bitmap_cq);
>    3409			++j;
>    3410		}
>    3411	
>    3412		sg_init_one(&sgs_out, req, sizeof(*req) * j);
>    3413		sg_init_one(&sgs_in, reply, res_size);
>    3414	
>    3415		ok = virtnet_send_command(vi, VIRTIO_NET_CTRL_STATS,
>    3416					  VIRTIO_NET_CTRL_STATS_GET,
>    3417					  &sgs_out, &sgs_in);
>    3418		kfree(req);
>    3419	
>    3420		if (!ok) {
>    3421			kfree(reply);
>    3422			return ok;
>    3423		}
>    3424	
>    3425		num_rx = VIRTNET_RQ_STATS_LEN + ctx->num_rx;
>    3426		num_tx = VIRTNET_SQ_STATS_LEN + ctx->num_tx;
>    3427		num_cq = ctx->num_tx;
>    3428	
>> 3429		for (p = reply; p - reply < res_size; p += virtio16_to_cpu(vi->vdev, hdr->size)) {
>    3430			hdr = p;
>    3431	
>> 3432			qid = virtio16_to_cpu(vi->vdev, hdr->vq_index);
>    3433	
>    3434			if (qid == vi->max_queue_pairs * 2) {
>    3435				offset = 0;
>    3436				bitmap = ctx->bitmap_cq;
>    3437			} else if (qid % 2) {
>    3438				offset = num_cq + num_rx * vi->curr_queue_pairs + num_tx * (qid / 2);
>    3439				offset += VIRTNET_SQ_STATS_LEN;
>    3440				bitmap = ctx->bitmap_tx;
>    3441			} else {
>    3442				offset = num_cq + num_rx * (qid / 2) + VIRTNET_RQ_STATS_LEN;
>    3443				bitmap = ctx->bitmap_rx;
>    3444			}
>    3445	
>    3446			for (i = 0; i < ARRAY_SIZE(virtio_net_stats_map); ++i) {
>    3447				m = &virtio_net_stats_map[i];
>    3448	
>    3449				if (m->flag & bitmap)
>    3450					offset += m->num;
>    3451	
>    3452				if (hdr->type != m->type)
>    3453					continue;
>    3454	
>    3455				for (j = 0; j < m->num; ++j) {
>    3456					v = p + m->desc[j].offset;
>    3457					ctx->data[offset + j] = virtio64_to_cpu(vi->vdev, *v);
>    3458				}
>    3459	
>    3460				break;
>    3461			}
>    3462		}
>    3463	
>    3464		kfree(reply);
>    3465		return 0;
>    3466	}
>    3467	
>    3468	static void virtnet_get_strings(struct net_device *dev, u32 stringset, u8 *data)
>    3469	{
>    3470		struct virtnet_info *vi = netdev_priv(dev);
>    3471		unsigned int i, j;
>    3472		u8 *p = data;
>    3473	
>    3474		switch (stringset) {
>    3475		case ETH_SS_STATS:
>    3476			virtnet_get_hw_stats_string(vi, VIRTNET_STATS_Q_TYPE_CQ, 0, &p);
>    3477	
>    3478			for (i = 0; i < vi->curr_queue_pairs; i++) {
>    3479				for (j = 0; j < VIRTNET_RQ_STATS_LEN; j++)
>    3480					ethtool_sprintf(&p, "rx_queue_%u_%s", i,
>    3481							virtnet_rq_stats_desc[j].desc);
>    3482	
>    3483				virtnet_get_hw_stats_string(vi, VIRTNET_STATS_Q_TYPE_RX, i, &p);
>    3484			}
>    3485	
>    3486			for (i = 0; i < vi->curr_queue_pairs; i++) {
>    3487				for (j = 0; j < VIRTNET_SQ_STATS_LEN; j++)
>    3488					ethtool_sprintf(&p, "tx_queue_%u_%s", i,
>    3489							virtnet_sq_stats_desc[j].desc);
>    3490	
>    3491				virtnet_get_hw_stats_string(vi, VIRTNET_STATS_Q_TYPE_TX, i, &p);
>    3492			}
>    3493			break;
>    3494		}
>    3495	}
>    3496	
>    3497	static int virtnet_get_sset_count(struct net_device *dev, int sset)
>    3498	{
>    3499		struct virtnet_info *vi = netdev_priv(dev);
>    3500		struct virtnet_stats_ctx ctx = {0};
>    3501		u32 pair_count;
>    3502	
>    3503		switch (sset) {
>    3504		case ETH_SS_STATS:
>    3505			if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_DEVICE_STATS) &&
>    3506			    !vi->device_stats_cap) {
>    3507				struct scatterlist sg;
>    3508	
>    3509				sg_init_one(&sg, &vi->ctrl->stats_cap, sizeof(vi->ctrl->stats_cap));
>    3510	
>    3511				if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_STATS,
>    3512							  VIRTIO_NET_CTRL_STATS_QUERY,
>    3513							  NULL, &sg)) {
>    3514					dev_warn(&dev->dev, "Fail to get stats capability\n");
>    3515				} else {
>    3516					__le64 v;
>    3517	
>    3518					v = vi->ctrl->stats_cap.supported_stats_types[0];
>> 3519					vi->device_stats_cap = virtio64_to_cpu(vi->vdev, v);
>    3520				}
>    3521			}
>    3522	
>    3523			virtnet_stats_ctx_init(vi, &ctx, NULL);
>    3524	
>    3525			pair_count = VIRTNET_RQ_STATS_LEN + VIRTNET_SQ_STATS_LEN;
>    3526			pair_count += ctx.num_rx + ctx.num_tx;
>    3527	
>    3528			return ctx.num_cq + vi->curr_queue_pairs * pair_count;
>    3529		default:
>    3530			return -EOPNOTSUPP;
>    3531		}
>    3532	}
>    3533	
>

  reply	other threads:[~2024-01-02  9:45 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-26  7:30 [PATCH net-next v1 0/6] virtio-net: support device stats Xuan Zhuo
2023-12-26  7:30 ` [PATCH net-next v1 1/6] virtio_net: introduce device stats feature and structures Xuan Zhuo
2023-12-26 11:26   ` Zhu Yanjun
2023-12-27 21:05   ` Michael S. Tsirkin
2023-12-28  1:44     ` Xuan Zhuo
2023-12-26  7:30 ` [PATCH net-next v1 2/6] virtio_net: virtnet_send_command supports command-specific-result Xuan Zhuo
2023-12-26  7:31 ` [PATCH net-next v1 3/6] virtio_net: support device stats Xuan Zhuo
2023-12-27 21:08   ` Michael S. Tsirkin
2023-12-28  1:36     ` Xuan Zhuo
2024-01-01 19:56   ` kernel test robot
2024-01-02  9:45     ` Zhu Yanjun [this message]
2023-12-26  7:31 ` [PATCH net-next v1 4/6] virtio_net: stats map include driver stats Xuan Zhuo
2024-01-02  2:17   ` kernel test robot
2023-12-26  7:31 ` [PATCH net-next v1 5/6] virtio_net: add the total stats field Xuan Zhuo
2023-12-26  7:31 ` [PATCH net-next v1 6/6] virtio_net: rename stat tx_timeout to timeout Xuan Zhuo
2024-01-16  5:55 ` [PATCH net-next v1 0/6] virtio-net: support device stats Xuan Zhuo
2024-01-30  3:20   ` Jason Wang
2024-01-30  3:25     ` Xuan Zhuo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2c7d53d8-7d54-40cc-8125-9ba5386d79f1@linux.dev \
    --to=yanjun.zhu@linux.dev \
    --cc=edumazet@google.com \
    --cc=jasowang@redhat.com \
    --cc=kuba@kernel.org \
    --cc=lkp@intel.com \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=pabeni@redhat.com \
    --cc=virtualization@lists.linux.dev \
    --cc=xuanzhuo@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.