qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] hw/virtio/vhost-user: support obtain vdpa device's mac ad


From: 陈浩
Subject: Re: [PATCH v2] hw/virtio/vhost-user: support obtain vdpa device's mac address automatically
Date: Fri, 23 Sep 2022 11:30:33 +0800
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0


On 2022/9/22 18:19, Michael S. Tsirkin wrote:
On Thu, Sep 22, 2022 at 11:02:56AM +0100, Alex Bennée wrote:
"Michael S. Tsirkin" <mst@redhat.com> writes:

On Wed, Sep 21, 2022 at 07:23:12PM +0100, Alex Bennée wrote:
chenh <chenh@yusur.tech> writes:

From: Hao Chen <chenh@yusur.tech>

When use dpdk-vdpa tests vdpa device. You need to specify the mac address to
start the virtual machine through libvirt or qemu, but now, the libvirt or
qemu can call dpdk vdpa vendor driver's ops .get_config through 
vhost_net_get_config
to get the mac address of the vdpa hardware without manual configuration.

v1->v2:
Only copy ETH_ALEN data of netcfg for some vdpa device such as
NVIDIA BLUEFIELD DPU(BF2)'s netcfg->status is not right.
We only need the mac address and don't care about the status field.

Signed-off-by: Hao Chen <chenh@yusur.tech>
---
  hw/block/vhost-user-blk.c |  1 -
  hw/net/virtio-net.c       |  7 +++++++
  hw/virtio/vhost-user.c    | 19 -------------------
  3 files changed, 7 insertions(+), 20 deletions(-)

diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index 9117222456..5dca4eab09 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -337,7 +337,6 @@ static int vhost_user_blk_connect(DeviceState *dev, Error 
**errp)
vhost_dev_set_config_notifier(&s->dev, &blk_ops); - s->vhost_user.supports_config = true;
<snip>

NACK from me. The supports_config flag is there for a reason.

Alex please, do not send NACKs. If you feel compelled to stress
your point, provide extra justification instead. Thanks!
OK I was objecting to ripping out the common vhost-user code which was
implemented as a fix for behaviour found while attempting to upstream:

   Subject: [PATCH  v4 for 7.2 00/22] virtio-gpio and various virtio cleanups
   Date: Tue,  2 Aug 2022 10:49:48 +0100
   Message-Id: <20220802095010.3330793-1-alex.bennee@linaro.org>

I vhost-user-blk wants to suppress its use of vhost-user config messages
I guess that should be a control option but it sounds like a buggy
back-end.
Thanks for the review!

QEMU needs to obtain the mac address of the underlying vdpa hardware through the 'vhost_user_get_config' function, but this part of the check of virtio_blk makes 'vhost_user_get_config' unusable in virtio-net, because 'vhost_user_get_config' depends on the VHOST_USER_PROTOCOL_F_CONFIG feature, which is the key point of the problem.

Currently I only need to use 'vhost_user_get_config' function, it seems not necessary to implement dev->config_ops && dev->config_ops->vhost_dev_config_notifier in virtio-net.

Can this part of the checks be moved elsewhere? I don't know how to skip this part of the virtio blk related checks to achieve my functionality, so I removed those checks. 🙁


diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index bd24741be8..8b01078249 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -2013,8 +2013,6 @@ static int vhost_user_backend_init(struct vhost_dev *dev, 
void *opaque,
      }
if (virtio_has_feature(features, VHOST_USER_F_PROTOCOL_FEATURES)) {
-        bool supports_f_config = vus->supports_config ||
-            (dev->config_ops && dev->config_ops->vhost_dev_config_notifier);
          uint64_t protocol_features;
dev->backend_features |= 1ULL << VHOST_USER_F_PROTOCOL_FEATURES;
@@ -2033,23 +2031,6 @@ static int vhost_user_backend_init(struct vhost_dev 
*dev, void *opaque,
           */
          protocol_features &= VHOST_USER_PROTOCOL_FEATURE_MASK;
- if (supports_f_config) {
-            if (!virtio_has_feature(protocol_features,
-                                    VHOST_USER_PROTOCOL_F_CONFIG)) {
-                error_setg(errp, "vhost-user device expecting "
-                           "VHOST_USER_PROTOCOL_F_CONFIG but the vhost-user backend 
does "
-                           "not support it.");
-                return -EPROTO;
-            }
-        } else {
-            if (virtio_has_feature(protocol_features,
-                                   VHOST_USER_PROTOCOL_F_CONFIG)) {
-                warn_reportf_err(*errp, "vhost-user backend supports "
-                                 "VHOST_USER_PROTOCOL_F_CONFIG but QEMU does 
not.");
-                protocol_features &= ~(1ULL << VHOST_USER_PROTOCOL_F_CONFIG);
-            }
-        }
-
          /* final set of protocol features */
          dev->protocol_features = protocol_features;
          err = vhost_user_set_protocol_features(dev, dev->protocol_features);

--
Alex Bennée

--
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]