From: Steve Sistare <steven.sistare@oracle.com>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Daniel P. Berrange" <berrange@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Jason Zeng" <jason.zeng@linux.intel.com>,
"Zheng Chuan" <zhengchuan@huawei.com>,
"Steve Sistare" <steven.sistare@oracle.com>,
"Mark Kanda" <mark.kanda@oracle.com>,
"Guoyi Tu" <tugy@chinatelecom.cn>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Philippe Mathieu-Daudé" <philippe.mathieu.daude@gmail.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"John Snow" <jsnow@redhat.com>
Subject: [PATCH V8 31/39] vhost: reset vhost devices for cpr
Date: Wed, 15 Jun 2022 07:52:18 -0700 [thread overview]
Message-ID: <1655304746-102776-32-git-send-email-steven.sistare@oracle.com> (raw)
In-Reply-To: <1655304746-102776-1-git-send-email-steven.sistare@oracle.com>
A vhost device is implicitly preserved across re-exec because its fd is not
closed, and the value of the fd is specified on the command line for the
new qemu to find. However, new qemu issues an VHOST_RESET_OWNER ioctl,
which fails because the device already has an owner. To fix, reset the
owner prior to exec.
Signed-off-by: Mark Kanda <mark.kanda@oracle.com>
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
hw/virtio/vhost.c | 17 +++++++++++++++++
include/hw/virtio/vhost.h | 1 +
2 files changed, 18 insertions(+)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index dd3263d..efaa28c 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -23,6 +23,7 @@
#include "standard-headers/linux/vhost_types.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-access.h"
+#include "migration/cpr.h"
#include "migration/blocker.h"
#include "migration/qemu-file-types.h"
#include "sysemu/dma.h"
@@ -1306,6 +1307,17 @@ static void vhost_virtqueue_cleanup(struct vhost_virtqueue *vq)
event_notifier_cleanup(&vq->masked_notifier);
}
+static void vhost_cpr_exec_notifier(Notifier *notifier, void *data)
+{
+ struct vhost_dev *dev = container_of(notifier, struct vhost_dev,
+ cpr_notifier);
+ int r = dev->vhost_ops->vhost_reset_device(dev);
+
+ if (r < 0) {
+ VHOST_OPS_DEBUG(r, "vhost_reset_device failed");
+ }
+}
+
int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
VhostBackendType backend_type, uint32_t busyloop_timeout,
Error **errp)
@@ -1405,6 +1417,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque,
hdev->log_enabled = false;
hdev->started = false;
memory_listener_register(&hdev->memory_listener, &address_space_memory);
+ cpr_add_notifier(&hdev->cpr_notifier, vhost_cpr_exec_notifier,
+ CPR_NOTIFY_EXEC);
QLIST_INSERT_HEAD(&vhost_devices, hdev, entry);
if (used_memslots > hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) {
@@ -1444,6 +1458,9 @@ void vhost_dev_cleanup(struct vhost_dev *hdev)
migrate_del_blocker(hdev->migration_blocker);
error_free(hdev->migration_blocker);
}
+ if (hdev->cpr_notifier.notify) {
+ cpr_remove_notifier(&hdev->cpr_notifier);
+ }
g_free(hdev->mem);
g_free(hdev->mem_sections);
if (hdev->vhost_ops) {
diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
index b291fe4..1316b14 100644
--- a/include/hw/virtio/vhost.h
+++ b/include/hw/virtio/vhost.h
@@ -100,6 +100,7 @@ struct vhost_dev {
QLIST_ENTRY(vhost_dev) entry;
QLIST_HEAD(, vhost_iommu) iommu_list;
IOMMUNotifier n;
+ Notifier cpr_notifier;
const VhostDevConfigOps *config_ops;
};
--
1.8.3.1
next prev parent reply other threads:[~2022-06-15 15:03 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-15 14:51 [PATCH V8 00/39] Live Update Steve Sistare
2022-06-15 14:51 ` [PATCH V8 01/39] migration: fix populate_vfio_info Steve Sistare
2022-06-16 14:41 ` Marc-André Lureau
2022-06-15 14:51 ` [PATCH V8 02/39] migration: qemu file wrappers Steve Sistare
2022-06-16 2:18 ` Guoyi Tu
2022-07-05 18:24 ` Steven Sistare
2022-06-16 14:55 ` Marc-André Lureau
2022-07-05 18:25 ` Steven Sistare
2022-06-16 15:29 ` Daniel P. Berrangé
2022-07-05 18:25 ` Steven Sistare
2022-06-15 14:51 ` [PATCH V8 03/39] migration: simplify savevm Steve Sistare
2022-06-16 14:59 ` Marc-André Lureau
2022-06-15 14:51 ` [PATCH V8 04/39] memory: RAM_ANON flag Steve Sistare
2022-06-15 20:25 ` David Hildenbrand
2022-07-05 18:23 ` Steven Sistare
2022-06-15 14:51 ` [PATCH V8 05/39] vl: start on wakeup request Steve Sistare
2022-06-16 15:55 ` Marc-André Lureau
2022-07-05 18:26 ` Steven Sistare
2022-06-15 14:51 ` [PATCH V8 06/39] cpr: reboot mode Steve Sistare
2022-06-16 11:10 ` Daniel P. Berrangé
2022-07-05 18:26 ` Steven Sistare
2022-06-15 14:51 ` [PATCH V8 07/39] cpr: reboot HMP interfaces Steve Sistare
2022-06-15 14:51 ` [PATCH V8 08/39] cpr: blockers Steve Sistare
2022-06-15 14:51 ` [PATCH V8 09/39] cpr: register blockers Steve Sistare
2022-06-15 14:51 ` [PATCH V8 10/39] cpr: cpr-enable option Steve Sistare
2022-06-15 14:51 ` [PATCH V8 11/39] cpr: save ram blocks Steve Sistare
2022-06-15 14:51 ` [PATCH V8 12/39] memory: flat section iterator Steve Sistare
2022-07-03 7:52 ` Peng Liang
2022-07-05 18:26 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 13/39] oslib: qemu_clear_cloexec Steve Sistare
2022-06-16 16:01 ` Marc-André Lureau
2022-06-16 16:07 ` Daniel P. Berrangé
2022-07-05 18:27 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 14/39] qapi: strList_from_string Steve Sistare
2022-06-16 16:04 ` Marc-André Lureau
2022-07-05 18:28 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 15/39] qapi: QAPI_LIST_LENGTH Steve Sistare
2022-06-16 16:06 ` Marc-André Lureau
2022-06-15 14:52 ` [PATCH V8 16/39] qapi: strv_from_strList Steve Sistare
2022-06-16 16:08 ` Marc-André Lureau
2022-07-05 18:28 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 17/39] qapi: strList unit tests Steve Sistare
2022-06-16 16:10 ` Marc-André Lureau
2022-06-15 14:52 ` [PATCH V8 18/39] vl: helper to request re-exec Steve Sistare
2022-06-15 14:52 ` [PATCH V8 19/39] cpr: preserve extra state Steve Sistare
2022-06-15 14:52 ` [PATCH V8 20/39] cpr: restart mode Steve Sistare
2022-07-03 8:15 ` Peng Liang
2022-07-05 18:29 ` Steven Sistare
2022-07-06 0:15 ` Peng Liang
2022-06-15 14:52 ` [PATCH V8 21/39] cpr: restart HMP interfaces Steve Sistare
2022-06-15 14:52 ` [PATCH V8 22/39] cpr: ram block blockers Steve Sistare
2022-06-15 14:52 ` [PATCH V8 23/39] hostmem-memfd: cpr for memory-backend-memfd Steve Sistare
2022-06-15 14:52 ` [PATCH V8 24/39] pci: export export msix_is_pending Steve Sistare
2022-06-27 22:44 ` Michael S. Tsirkin
2022-07-05 18:29 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 25/39] cpr: notifiers Steve Sistare
2022-06-15 14:52 ` [PATCH V8 26/39] vfio-pci: refactor for cpr Steve Sistare
2022-06-15 14:52 ` [PATCH V8 27/39] vfio-pci: cpr part 1 (fd and dma) Steve Sistare
2022-06-29 19:14 ` Alex Williamson
2022-07-06 17:45 ` Steven Sistare
2022-07-03 8:32 ` Peng Liang
2022-07-05 18:29 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 28/39] vfio-pci: cpr part 2 (msi) Steve Sistare
2022-06-29 20:19 ` Alex Williamson
2022-07-06 17:46 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 29/39] vfio-pci: cpr part 3 (intx) Steve Sistare
2022-06-29 20:43 ` Alex Williamson
2022-07-06 17:46 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 30/39] vfio-pci: recover from unmap-all-vaddr failure Steve Sistare
2022-06-29 22:58 ` Alex Williamson
2022-07-06 17:46 ` Steven Sistare
2022-06-15 14:52 ` Steve Sistare [this message]
2022-06-15 14:52 ` [PATCH V8 32/39] loader: suppress rom_reset during cpr Steve Sistare
2022-06-15 14:52 ` [PATCH V8 33/39] chardev: cpr framework Steve Sistare
2022-06-15 14:52 ` [PATCH V8 34/39] chardev: cpr for simple devices Steve Sistare
2022-06-15 14:52 ` [PATCH V8 35/39] chardev: cpr for pty Steve Sistare
2022-06-15 14:52 ` [PATCH V8 36/39] chardev: cpr for sockets Steve Sistare
2022-07-03 8:19 ` Peng Liang
2022-07-05 18:29 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 37/39] cpr: only-cpr-capable option Steve Sistare
2022-06-15 14:52 ` [PATCH V8 38/39] python/machine: add QEMUMachine accessors Steve Sistare
2022-06-17 14:16 ` John Snow
2022-07-05 18:30 ` Steven Sistare
2022-06-15 14:52 ` [PATCH V8 39/39] tests/avocado: add cpr regression test Steve Sistare
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=1655304746-102776-32-git-send-email-steven.sistare@oracle.com \
--to=steven.sistare@oracle.com \
--cc=alex.bennee@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=imammedo@redhat.com \
--cc=jason.zeng@linux.intel.com \
--cc=jsnow@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mark.kanda@oracle.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philippe.mathieu.daude@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=tugy@chinatelecom.cn \
--cc=zhengchuan@huawei.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).