@@ -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.
@@ -870,6 +870,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);
@@ -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).
+@subsubsection 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