[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 37/38] ivshmem: Require master to have ID zero
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH 37/38] ivshmem: Require master to have ID zero |
Date: |
Thu, 3 Mar 2016 15:11:39 +0100 |
On Mon, Feb 29, 2016 at 7:40 PM, Markus Armbruster <address@hidden> wrote:
> Migration with ivshmem needs to be carefully orchestrated to work.
> Exactly one peer (the "master") migrates to the destination, all other
> peers need to unplug (and disconnect), migrate, plug back (and
> reconnect). This is sort of documented in qemu-doc.
>
> If peers connect on the destination before migration completes, the
> shared memory can get messed up. This isn't documented anywhere. Fix
> that in qemu-doc.
>
> To avoid messing up register IVPosition on migration, the server must
> assign the same ID on source and destination. ivshmem-spec.txt leaves
> ID assignment unspecified, however.
>
> Amend ivshmem-spec.txt to require the first client to receive ID zero.
> The example ivshmem-server complies: it always assigns the first
> unused ID.
>
> For a bit of additional safety, enforce ID zero for the master. This
> does nothing when we're not using a server, because the ID is zero for
> all peers then.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
Reviewed-by: Marc-André Lureau <address@hidden>
> docs/specs/ivshmem-spec.txt | 2 ++
> hw/misc/ivshmem.c | 6 ++++++
> qemu-doc.texi | 5 +++++
> 3 files changed, 13 insertions(+)
>
> diff --git a/docs/specs/ivshmem-spec.txt b/docs/specs/ivshmem-spec.txt
> index 047dfc0..b062acd 100644
> --- a/docs/specs/ivshmem-spec.txt
> +++ b/docs/specs/ivshmem-spec.txt
> @@ -164,6 +164,8 @@ For each new client that connects to the server, the
> server
> - sends interrupt setup messages to the new client (these contain file
> descriptors for receiving interrupts).
>
> +The first client to connect to the server receives ID zero.
> +
> When a client disconnects from the server, the server sends disconnect
> notifications to the other clients.
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index f6fce15..9a292e5 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -869,6 +869,12 @@ static void ivshmem_common_realize(PCIDevice *dev, Error
> **errp)
> return;
> }
>
> + if (s->master == ON_OFF_AUTO_ON && s->vm_id != 0) {
> + error_setg(errp,
> + "master must connect to the server before any peers");
> + return;
> + }
> +
> qemu_chr_add_handlers(s->server_chr, ivshmem_can_receive,
> ivshmem_read, NULL, s);
>
> diff --git a/qemu-doc.texi b/qemu-doc.texi
> index 0dd01c7..79141d3 100644
> --- a/qemu-doc.texi
> +++ b/qemu-doc.texi
> @@ -1295,12 +1295,17 @@ When using the server, the guest will be assigned a
> VM ID (>=0) that allows gues
> using the same server to communicate via interrupts. Guests can read their
> VM ID from a device register (see ivshmem-spec.txt).
>
> address@hidden Migration with ivshmem
> +
> With device property @option{master=on}, the guest will copy the shared
> memory on migration to the destination host. With @option{master=off},
> the guest will not be able to migrate with the device attached. In the
> latter case, the device should be detached and then reattached after
> migration using the PCI hotplug support.
>
> +At most one of the devices sharing the same memory can be master. The
> +master must complete migration before you plug back the other devices.
> +
> @subsubsection ivshmem and hugepages
>
> Instead of specifying the <shm size> using POSIX shm, you may specify
> --
> 2.4.3
>
>
--
Marc-André Lureau
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH 37/38] ivshmem: Require master to have ID zero,
Marc-André Lureau <=