From: "Eugenio Pérez" <eperezma@redhat.com>
To: qemu-devel@nongnu.org
Cc: Cindy Lu <lulu@redhat.com>,
Liuxiangdong <liuxiangdong5@huawei.com>,
alvaro.karsz@solid-run.com, Zhu Lingshan <lingshan.zhu@intel.com>,
Jason Wang <jasowang@redhat.com>,
longpeng2@huawei.com, "Michael S. Tsirkin" <mst@redhat.com>,
Shannon Nelson <snelson@pensando.io>,
Eli Cohen <eli@mellanox.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
virtualization@lists.linux-foundation.org,
Parav Pandit <parav@mellanox.com>,
si-wei.liu@oracle.com, Laurent Vivier <lvivier@redhat.com>,
Gautam Dawar <gdawar@xilinx.com>,
Stefano Garzarella <sgarzare@redhat.com>,
Harpreet Singh Anand <hanand@xilinx.com>,
"Gonglei (Arei)" <arei.gonglei@huawei.com>
Subject: [PATCH 03/13] vdpa: add vhost_vdpa_suspend
Date: Fri, 3 Feb 2023 20:11:32 +0100 [thread overview]
Message-ID: <20230203191142.362623-4-eperezma@redhat.com> (raw)
In-Reply-To: <20230203191142.362623-1-eperezma@redhat.com>
The function vhost.c:vhost_dev_stop fetches the vring base so the vq
state can be migrated to other devices. However, this is unreliable in
vdpa, since we didn't signal the device to suspend the queues, making
the value fetched useless.
Suspend the device if possible before fetching first and subsequent
vring bases.
Moreover, vdpa totally reset and wipes the device at the last device
before fetch its vrings base, making that operation useless in the last
device. This will be fixed in later patches of this series.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
hw/virtio/vhost-vdpa.c | 19 +++++++++++++++++++
hw/virtio/trace-events | 1 +
2 files changed, 20 insertions(+)
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 2e79fbe4b2..b681841cdc 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -1108,6 +1108,24 @@ static void vhost_vdpa_svqs_stop(struct vhost_dev *dev)
}
}
+static void vhost_vdpa_suspend(struct vhost_dev *dev)
+{
+ struct vhost_vdpa *v = dev->opaque;
+ int r;
+
+ if (!vhost_vdpa_first_dev(dev) ||
+ !(dev->backend_features & BIT_ULL(VHOST_BACKEND_F_SUSPEND))) {
+ return;
+ }
+
+ trace_vhost_vdpa_suspend(dev);
+ r = ioctl(v->device_fd, VHOST_VDPA_SUSPEND);
+ if (unlikely(r)) {
+ error_report("Cannot suspend: %s(%d)", g_strerror(errno), errno);
+ /* Not aborting since we're called from stop context */
+ }
+}
+
static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
{
struct vhost_vdpa *v = dev->opaque;
@@ -1122,6 +1140,7 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
}
vhost_vdpa_set_vring_ready(dev);
} else {
+ vhost_vdpa_suspend(dev);
vhost_vdpa_svqs_stop(dev);
vhost_vdpa_host_notifiers_uninit(dev, dev->nvqs);
}
diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index a87c5f39a2..8f8d05cf9b 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -50,6 +50,7 @@ vhost_vdpa_set_vring_ready(void *dev) "dev: %p"
vhost_vdpa_dump_config(void *dev, const char *line) "dev: %p %s"
vhost_vdpa_set_config(void *dev, uint32_t offset, uint32_t size, uint32_t flags) "dev: %p offset: %"PRIu32" size: %"PRIu32" flags: 0x%"PRIx32
vhost_vdpa_get_config(void *dev, void *config, uint32_t config_len) "dev: %p config: %p config_len: %"PRIu32
+vhost_vdpa_suspend(void *dev) "dev: %p"
vhost_vdpa_dev_start(void *dev, bool started) "dev: %p started: %d"
vhost_vdpa_set_log_base(void *dev, uint64_t base, unsigned long long size, int refcnt, int fd, void *log) "dev: %p base: 0x%"PRIx64" size: %llu refcnt: %d fd: %d log: %p"
vhost_vdpa_set_vring_addr(void *dev, unsigned int index, unsigned int flags, uint64_t desc_user_addr, uint64_t used_user_addr, uint64_t avail_user_addr, uint64_t log_guest_addr) "dev: %p index: %u flags: 0x%x desc_user_addr: 0x%"PRIx64" used_user_addr: 0x%"PRIx64" avail_user_addr: 0x%"PRIx64" log_guest_addr: 0x%"PRIx64
--
2.31.1
next prev parent reply other threads:[~2023-02-03 19:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-03 19:11 [PATCH 00/13] Dynamycally switch to vhost shadow virtqueues at vdpa net migration Eugenio Pérez
2023-02-03 19:11 ` [PATCH 01/13] vdpa net: move iova tree creation from init to start Eugenio Pérez
2023-02-03 19:11 ` [PATCH 02/13] vdpa: Negotiate _F_SUSPEND feature Eugenio Pérez
2023-02-03 19:11 ` Eugenio Pérez [this message]
2023-02-03 19:11 ` [PATCH 04/13] vdpa: move vhost reset after get vring base Eugenio Pérez
2023-02-03 19:11 ` [PATCH 05/13] vdpa: rewind at get_base, not set_base Eugenio Pérez
2023-02-03 19:11 ` [PATCH 06/13] vdpa net: allow VHOST_F_LOG_ALL Eugenio Pérez
2023-02-03 19:11 ` [PATCH 07/13] vdpa: add vdpa net migration state notifier Eugenio Pérez
2023-02-03 19:11 ` [PATCH 08/13] vdpa: disable RAM block discard only for the first device Eugenio Pérez
2023-02-03 19:11 ` [PATCH 09/13] vdpa net: block migration if the device has CVQ Eugenio Pérez
2023-02-03 19:11 ` [PATCH 10/13] vdpa: block migration if device has unsupported features Eugenio Pérez
2023-02-03 19:11 ` [PATCH 11/13] vdpa: block migration if dev does not have _F_SUSPEND Eugenio Pérez
2023-02-03 19:11 ` [PATCH 12/13] vdpa: block migration if SVQ does not admit a feature Eugenio Pérez
2023-02-03 19:11 ` [PATCH 13/13] vdpa: return VHOST_F_LOG_ALL in vhost-vdpa devices Eugenio Pérez
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=20230203191142.362623-4-eperezma@redhat.com \
--to=eperezma@redhat.com \
--cc=alvaro.karsz@solid-run.com \
--cc=arei.gonglei@huawei.com \
--cc=eli@mellanox.com \
--cc=gdawar@xilinx.com \
--cc=hanand@xilinx.com \
--cc=jasowang@redhat.com \
--cc=lingshan.zhu@intel.com \
--cc=liuxiangdong5@huawei.com \
--cc=longpeng2@huawei.com \
--cc=lulu@redhat.com \
--cc=lvivier@redhat.com \
--cc=mst@redhat.com \
--cc=parav@mellanox.com \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
--cc=si-wei.liu@oracle.com \
--cc=snelson@pensando.io \
--cc=stefanha@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
/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).