[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v5 43/50] multi-process/mig: Load VMSD in the proxy object
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [PATCH v5 43/50] multi-process/mig: Load VMSD in the proxy object |
Date: |
Thu, 5 Mar 2020 15:28:14 +0000 |
User-agent: |
Mutt/1.13.3 (2020-01-12) |
* Jagannathan Raman (address@hidden) wrote:
> 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>
> ---
> 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 19f0dbb..1649f60 100644
> --- a/hw/proxy/qemu-proxy.c
> +++ b/hw/proxy/qemu-proxy.c
> @@ -581,12 +581,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(&msg, pdev->mpqemu_link->com);
> +
> + size = pdev->migsize;
> +
> + while (size) {
> + byte = qemu_get_byte(mis->from_src_file);
> + qemu_put_byte(f_remote, byte);
My suggestion on the previous patch about using the VMSTATE_BUFFERV
means you'd malloc on size, and do the put_byte's to the remote in the
post_load.
> + 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 b42c003..01371fc 100644
> --- a/include/io/mpqemu-link.h
> +++ b/include/io/mpqemu-link.h
> @@ -64,6 +64,7 @@ typedef enum {
> MMIO_RETURN,
> DEVICE_RESET,
> START_MIG_OUT,
> + START_MIG_IN,
> MAX,
> } mpqemu_cmd_t;
>
> --
> 1.8.3.1
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v5 43/50] multi-process/mig: Load VMSD in the proxy object,
Dr. David Alan Gilbert <=