From: Michael Qiu <qiudayu@archeros.com>
To: jasowang@redhat.com, mst@redhat.com, si-wei.liu@oracle.com
Cc: Michael Qiu <qiudayu@archeros.com>,
eperezma@redhat.com, lingshan.zhu@intel.com,
qemu-devel@nongnu.org, lulu@redhat.com
Subject: [PATCH 1/3] vhost: Refactor vhost_reset_device() in VhostOps
Date: Fri, 1 Apr 2022 07:06:11 -0400 [thread overview]
Message-ID: <1648811173-15293-2-git-send-email-qiudayu@archeros.com> (raw)
In-Reply-To: <1648811173-15293-1-git-send-email-qiudayu@archeros.com>
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.
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);
}
}
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,
.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;
--
1.8.3.1
next prev parent reply other threads:[~2022-04-01 11:11 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 ` Michael Qiu [this message]
2022-04-02 0:44 ` [PATCH 1/3] vhost: Refactor vhost_reset_device() in VhostOps Si-Wei Liu
2022-04-02 2:08 ` Michael Qiu
2022-04-02 2:38 ` Jason Wang
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=1648811173-15293-2-git-send-email-qiudayu@archeros.com \
--to=qiudayu@archeros.com \
--cc=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=lingshan.zhu@intel.com \
--cc=lulu@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--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).