[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v4 PATCH 43/49] multi-process/mig: Load VMSD in the proxy object
From: |
Jagannathan Raman |
Subject: |
[RFC v4 PATCH 43/49] multi-process/mig: Load VMSD in the proxy object |
Date: |
Thu, 24 Oct 2019 05:09:24 -0400 |
From: Elena Ufimtseva <address@hidden>
The Proxy object loads the VMSD of remote process in source
and send it to the remote process in the destination
Signed-off-by: Elena Ufimtseva <address@hidden>
Signed-off-by: John G Johnson <address@hidden>
Signed-off-by: Jagannathan Raman <address@hidden>
---
New patch in v4
hw/proxy/qemu-proxy.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
include/io/mpqemu-link.h | 1 +
2 files changed, 51 insertions(+)
diff --git a/hw/proxy/qemu-proxy.c b/hw/proxy/qemu-proxy.c
index ce72e6a..c85ffb3 100644
--- a/hw/proxy/qemu-proxy.c
+++ b/hw/proxy/qemu-proxy.c
@@ -473,12 +473,62 @@ static int proxy_post_save(void *opaque)
return 0;
}
+static int proxy_post_load(void *opaque, int version_id)
+{
+ MigrationIncomingState *mis = migration_incoming_get_current();
+ PCIProxyDev *pdev = opaque;
+ QEMUFile *f_remote;
+ MPQemuMsg msg = {0};
+ Error *err = NULL;
+ QIOChannel *ioc;
+ uint64_t size;
+ uint8_t byte;
+ int fd[2];
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
+ return -1;
+ }
+
+ ioc = qio_channel_new_fd(fd[0], &err);
+ if (err) {
+ error_report_err(err);
+ return -1;
+ }
+
+ qio_channel_set_name(QIO_CHANNEL(ioc), "proxy-migration-channel");
+
+ f_remote = qemu_fopen_channel_output(ioc);
+
+ msg.cmd = START_MIG_IN;
+ msg.bytestream = 0;
+ msg.num_fds = 1;
+ msg.fds[0] = fd[1];
+
+ mpqemu_msg_send(pdev->mpqemu_link, &msg, pdev->mpqemu_link->com);
+
+ size = pdev->migsize;
+
+ while (size) {
+ byte = qemu_get_byte(mis->from_src_file);
+ qemu_put_byte(f_remote, byte);
+ size--;
+ }
+
+ qemu_fflush(f_remote);
+ qemu_fclose(f_remote);
+
+ close(fd[1]);
+
+ return 0;
+}
+
const VMStateDescription vmstate_pci_proxy_device = {
.name = "PCIProxyDevice",
.version_id = 2,
.minimum_version_id = 1,
.pre_save = proxy_pre_save,
.post_save = proxy_post_save,
+ .post_load = proxy_post_load,
.fields = (VMStateField[]) {
VMSTATE_PCI_DEVICE(parent_dev, PCIProxyDev),
VMSTATE_UINT64(migsize, PCIProxyDev),
diff --git a/include/io/mpqemu-link.h b/include/io/mpqemu-link.h
index 0ed7750..05dc55e 100644
--- a/include/io/mpqemu-link.h
+++ b/include/io/mpqemu-link.h
@@ -76,6 +76,7 @@ typedef enum {
MMIO_RETURN,
DEVICE_RESET,
START_MIG_OUT,
+ START_MIG_IN,
MAX,
} mpqemu_cmd_t;
--
1.8.3.1
- [RFC v4 PATCH 47/49] multi-process: Enable support for multiple devices in remote, (continued)
- [RFC v4 PATCH 47/49] multi-process: Enable support for multiple devices in remote, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 08/49] multi-process: add functions to synchronize proxy and remote endpoints, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 07/49] multi-process: define mpqemu-link object, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 49/49] multi-process: add configure and usage information, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 48/49] multi-process: add the concept description to docs/devel/qemu-multiprocess, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 12/49] multi-process: remote process initialization, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 17/49] multi-process: Synchronize remote memory, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 25/49] multi-process: Introduce build flags to separate remote process code, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 29/49] multi-process: add parse_cmdline in remote process, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 33/49] multi-process: perform device reset in the remote process, Jagannathan Raman, 2019/10/24
- [RFC v4 PATCH 43/49] multi-process/mig: Load VMSD in the proxy object,
Jagannathan Raman <=
- [RFC v4 PATCH 46/49] multi-process/mig: Restore the VMSD in remote process, Jagannathan Raman, 2019/10/24
- Re: [RFC v4 PATCH 00/49] Initial support of multi-process qemu, no-reply, 2019/10/24
- Re: [RFC v4 PATCH 00/49] Initial support of multi-process qemu, no-reply, 2019/10/24
- Re: [RFC v4 PATCH 00/49] Initial support of multi-process qemu, no-reply, 2019/10/24