From: Jason Wang <jasowang@redhat.com>
To: Michael Qiu <qiudayu@archeros.com>,
mst@redhat.com, si-wei.liu@oracle.com
Cc: eperezma@redhat.com, lingshan.zhu@intel.com,
qemu-devel@nongnu.org, lulu@redhat.com
Subject: Re: [PATCH 1/3] vhost: Refactor vhost_reset_device() in VhostOps
Date: Sat, 2 Apr 2022 10:38:04 +0800 [thread overview]
Message-ID: <c8e8459d-32b5-55ff-44f4-1f03edb8a597@redhat.com> (raw)
In-Reply-To: <1648811173-15293-2-git-send-email-qiudayu@archeros.com>
在 2022/4/1 下午7:06, Michael Qiu 写道:
> Currently in vhost framwork, vhost_reset_device() is misnamed.
> Actually, it should be vhost_reset_owner().
>
> In vhost user, it make compatible with reset device ops, but
> vhost kernel does not compatible with it, for vhost vdpa, it
> only implement reset device action.
>
> So we need seperate the function into vhost_reset_owner() and
> vhost_reset_device(). So that different backend could use the
> correct function.
I see no reason when RESET_OWNER needs to be done for kernel backend.
And if I understand the code correctly, vhost-user "abuse" RESET_OWNER
for reset. So the current code looks fine?
>
> Signde-off-by: Michael Qiu <qiudayu@archeros.com>
> ---
> hw/scsi/vhost-user-scsi.c | 6 +++++-
> hw/virtio/vhost-backend.c | 4 ++--
> hw/virtio/vhost-user.c | 22 ++++++++++++++++++----
> include/hw/virtio/vhost-backend.h | 2 ++
> 4 files changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
> index 1b2f7ee..f179626 100644
> --- a/hw/scsi/vhost-user-scsi.c
> +++ b/hw/scsi/vhost-user-scsi.c
> @@ -80,8 +80,12 @@ static void vhost_user_scsi_reset(VirtIODevice *vdev)
> return;
> }
>
> - if (dev->vhost_ops->vhost_reset_device) {
> + if (virtio_has_feature(dev->protocol_features,
> + VHOST_USER_PROTOCOL_F_RESET_DEVICE) &&
> + dev->vhost_ops->vhost_reset_device) {
> dev->vhost_ops->vhost_reset_device(dev);
> + } else if (dev->vhost_ops->vhost_reset_owner) {
> + dev->vhost_ops->vhost_reset_owner(dev);
Actually, I fail to understand why we need an indirection via vhost_ops.
It's guaranteed to be vhost_user_ops.
> }
> }
>
> diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c
> index e409a86..abbaa8b 100644
> --- a/hw/virtio/vhost-backend.c
> +++ b/hw/virtio/vhost-backend.c
> @@ -191,7 +191,7 @@ static int vhost_kernel_set_owner(struct vhost_dev *dev)
> return vhost_kernel_call(dev, VHOST_SET_OWNER, NULL);
> }
>
> -static int vhost_kernel_reset_device(struct vhost_dev *dev)
> +static int vhost_kernel_reset_owner(struct vhost_dev *dev)
> {
> return vhost_kernel_call(dev, VHOST_RESET_OWNER, NULL);
> }
> @@ -317,7 +317,7 @@ const VhostOps kernel_ops = {
> .vhost_get_features = vhost_kernel_get_features,
> .vhost_set_backend_cap = vhost_kernel_set_backend_cap,
> .vhost_set_owner = vhost_kernel_set_owner,
> - .vhost_reset_device = vhost_kernel_reset_device,
> + .vhost_reset_owner = vhost_kernel_reset_owner,
I think we can delete the current vhost_reset_device() since it not used
in any code path.
Thanks
> .vhost_get_vq_index = vhost_kernel_get_vq_index,
> #ifdef CONFIG_VHOST_VSOCK
> .vhost_vsock_set_guest_cid = vhost_kernel_vsock_set_guest_cid,
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index 6abbc9d..4412008 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -1475,16 +1475,29 @@ static int vhost_user_get_max_memslots(struct vhost_dev *dev,
> return 0;
> }
>
> +static int vhost_user_reset_owner(struct vhost_dev *dev)
> +{
> + VhostUserMsg msg = {
> + .hdr.request = VHOST_USER_RESET_OWNER,
> + .hdr.flags = VHOST_USER_VERSION,
> + };
> +
> + return vhost_user_write(dev, &msg, NULL, 0);
> +}
> +
> static int vhost_user_reset_device(struct vhost_dev *dev)
> {
> VhostUserMsg msg = {
> + .hdr.request = VHOST_USER_RESET_DEVICE,
> .hdr.flags = VHOST_USER_VERSION,
> };
>
> - msg.hdr.request = virtio_has_feature(dev->protocol_features,
> - VHOST_USER_PROTOCOL_F_RESET_DEVICE)
> - ? VHOST_USER_RESET_DEVICE
> - : VHOST_USER_RESET_OWNER;
> + /* Caller must ensure the backend has VHOST_USER_PROTOCOL_F_RESET_DEVICE
> + * support */
> + if (!virtio_has_feature(dev->protocol_features,
> + VHOST_USER_PROTOCOL_F_RESET_DEVICE)) {
> + return -EPERM;
> + }
>
> return vhost_user_write(dev, &msg, NULL, 0);
> }
> @@ -2548,6 +2561,7 @@ const VhostOps user_ops = {
> .vhost_set_features = vhost_user_set_features,
> .vhost_get_features = vhost_user_get_features,
> .vhost_set_owner = vhost_user_set_owner,
> + .vhost_reset_owner = vhost_user_reset_owner,
> .vhost_reset_device = vhost_user_reset_device,
> .vhost_get_vq_index = vhost_user_get_vq_index,
> .vhost_set_vring_enable = vhost_user_set_vring_enable,
> diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h
> index 81bf310..affeeb0 100644
> --- a/include/hw/virtio/vhost-backend.h
> +++ b/include/hw/virtio/vhost-backend.h
> @@ -77,6 +77,7 @@ typedef int (*vhost_get_features_op)(struct vhost_dev *dev,
> uint64_t *features);
> typedef int (*vhost_set_backend_cap_op)(struct vhost_dev *dev);
> typedef int (*vhost_set_owner_op)(struct vhost_dev *dev);
> +typedef int (*vhost_reset_owner_op)(struct vhost_dev *dev);
> typedef int (*vhost_reset_device_op)(struct vhost_dev *dev);
> typedef int (*vhost_get_vq_index_op)(struct vhost_dev *dev, int idx);
> typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev,
> @@ -150,6 +151,7 @@ typedef struct VhostOps {
> vhost_get_features_op vhost_get_features;
> vhost_set_backend_cap_op vhost_set_backend_cap;
> vhost_set_owner_op vhost_set_owner;
> + vhost_reset_owner_op vhost_reset_owner;
> vhost_reset_device_op vhost_reset_device;
> vhost_get_vq_index_op vhost_get_vq_index;
> vhost_set_vring_enable_op vhost_set_vring_enable;
next prev parent reply other threads:[~2022-04-02 2:39 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-23 8:42 [PATCH] vdpa: Avoid reset when stop device 08005325
2022-03-23 9:20 ` Jason Wang
2022-03-25 6:32 ` Si-Wei Liu
[not found] ` <fe13304f-0a18-639e-580d-ce6eb7daecab@archeros.com>
2022-03-25 19:19 ` Si-Wei Liu
[not found] ` <6fbf82a9-39ce-f179-5e4b-384123ca542c@archeros.com>
2022-03-25 19:59 ` Si-Wei Liu
2022-03-30 8:52 ` Jason Wang
2022-03-30 9:53 ` Michael Qiu
2022-03-30 10:02 ` [PATCH v2] vdpa: reset the backend device in stage of stop last vhost device 08005325
2022-03-30 10:52 ` Michael S. Tsirkin
2022-03-31 1:39 ` Michael Qiu
2022-03-31 0:15 ` Si-Wei Liu
2022-03-31 4:01 ` Michael Qiu
2022-03-31 4:02 ` Michael Qiu
2022-03-31 5:19 ` [PATCH v3] vdpa: reset the backend device in the end of vhost_net_stop() 08005325
2022-03-31 8:55 ` Jason Wang
2022-03-31 9:12 ` Maxime Coquelin
2022-03-31 9:22 ` Michael Qiu
2022-04-01 2:55 ` Jason Wang
2022-03-31 9:25 ` [PATCH RESEND " qiudayu
2022-03-31 10:19 ` Michael Qiu
[not found] ` <6245804d.1c69fb81.3c35c.d7efSMTPIN_ADDED_BROKEN@mx.google.com>
2022-03-31 20:32 ` Michael S. Tsirkin
2022-04-01 1:12 ` Si-Wei Liu
2022-04-01 1:45 ` Michael Qiu
2022-04-01 1:31 ` [PATCH v4] " Michael Qiu
2022-04-01 2:53 ` Jason Wang
2022-04-01 3:20 ` Michael Qiu
2022-04-01 23:07 ` Si-Wei Liu
2022-04-02 2:20 ` Jason Wang
2022-04-02 3:53 ` Michael Qiu
2022-04-06 0:56 ` Si-Wei Liu
2022-04-07 7:50 ` Jason Wang
[not found] ` <6247c8f5.1c69fb81.848e0.8b49SMTPIN_ADDED_BROKEN@mx.google.com>
2022-04-07 7:52 ` Jason Wang
[not found] ` <62466fff.1c69fb81.8817a.d813SMTPIN_ADDED_BROKEN@mx.google.com>
2022-04-02 1:48 ` Jason Wang
2022-04-02 3:43 ` Michael Qiu
2022-04-01 11:06 ` [PATCH 0/3] Refactor vhost device reset Michael Qiu
2022-04-01 11:06 ` [PATCH 1/3] vhost: Refactor vhost_reset_device() in VhostOps Michael Qiu
2022-04-02 0:44 ` Si-Wei Liu
2022-04-02 2:08 ` Michael Qiu
2022-04-02 2:38 ` Jason Wang [this message]
2022-04-02 5:14 ` Michael Qiu
[not found] ` <6247dc22.1c69fb81.4244.a88bSMTPIN_ADDED_BROKEN@mx.google.com>
2022-04-07 7:35 ` Jason Wang
2022-04-08 8:38 ` Michael Qiu
2022-04-08 17:17 ` Si-Wei Liu
2022-04-11 8:51 ` Jason Wang
2022-04-01 11:06 ` [PATCH 2/3] vhost: add vhost_dev_reset() Michael Qiu
2022-04-02 0:48 ` Si-Wei Liu
2022-04-01 11:06 ` [PATCH 3/3 v5] vdpa: reset the backend device in the end of vhost_net_stop() Michael Qiu
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=c8e8459d-32b5-55ff-44f4-1f03edb8a597@redhat.com \
--to=jasowang@redhat.com \
--cc=eperezma@redhat.com \
--cc=lingshan.zhu@intel.com \
--cc=lulu@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qiudayu@archeros.com \
--cc=si-wei.liu@oracle.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 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).