[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH V1 27/32] vhost: reset vhost devices upon cprsave
From: |
Steve Sistare |
Subject: |
[PATCH V1 27/32] vhost: reset vhost devices upon cprsave |
Date: |
Thu, 30 Jul 2020 08:14:31 -0700 |
From: Mark Kanda <mark.kanda@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 | 12 ++++++++++++
include/sysemu/sysemu.h | 1 +
migration/savevm.c | 1 +
3 files changed, 14 insertions(+)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 1a1384e..d065b53 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -29,6 +29,7 @@
#include "sysemu/dma.h"
#include "sysemu/tcg.h"
#include "trace.h"
+#include "sysemu/sysemu.h"
/* enabled until disconnected backend stabilizes */
#define _VHOST_DEBUG 1
@@ -1773,3 +1774,14 @@ int vhost_net_set_backend(struct vhost_dev *hdev,
return -1;
}
+
+void reset_vhost_devices(void)
+{
+ struct vhost_dev *dev;
+
+ QLIST_FOREACH(dev, &vhost_devices, entry) {
+ if (dev->vhost_ops->vhost_reset_device(dev) < 0) {
+ VHOST_OPS_DEBUG("vhost_reset_device failed");
+ }
+ }
+}
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index c5b2f24..e19c15b 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -30,6 +30,7 @@ void load_cpr_snapshot(const char *file, Error **errp);
void save_chardev_fds(void);
void save_vnc_fds(void);
void load_vnc_fds(void);
+void reset_vhost_devices(void);
void save_qmp_negotiation_status(void);
extern int autostart;
diff --git a/migration/savevm.c b/migration/savevm.c
index 225eaa6..732dfb5 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2770,6 +2770,7 @@ void save_cpr_snapshot(const char *file, const char
*mode, Error **errp)
save_chardev_fds();
save_vnc_fds();
walkenv(FD_PREFIX, preserve_fd, 0);
+ reset_vhost_devices();
save_qmp_negotiation_status();
qemu_system_exec_request();
putenv((char *)"QEMU_START_FREEZE=");
--
1.8.3.1
- Re: [PATCH V1 05/32] savevm: QMP command for cprload, (continued)
- [PATCH V1 09/32] savevm: prevent cprsave if memory is volatile, Steve Sistare, 2020/07/30
- [PATCH V1 19/32] memory: ram_block_add cosmetic changes, Steve Sistare, 2020/07/30
- [PATCH V1 18/32] osdep: import MADV_DOEXEC, Steve Sistare, 2020/07/30
- [PATCH V1 21/32] exec, memory: exec(3) to restart, Steve Sistare, 2020/07/30
- [PATCH V1 13/32] gdbstub: gdb support for suspended state, Steve Sistare, 2020/07/30
- [PATCH V1 23/32] char: save/restore chardev socket fds, Steve Sistare, 2020/07/30
- [PATCH V1 26/32] monitor: save/restore QMP negotiation status, Steve Sistare, 2020/07/30
- [PATCH V1 30/32] vfio-pci: save and restore, Steve Sistare, 2020/07/30
- [PATCH V1 32/32] vfio-pci: improved tracing, Steve Sistare, 2020/07/30
- [PATCH V1 27/32] vhost: reset vhost devices upon cprsave,
Steve Sistare <=
- Re: [PATCH V1 00/32] Live Update, Daniel P . Berrangé, 2020/07/30
Re: [PATCH V1 00/32] Live Update, Paolo Bonzini, 2020/07/30