Major issues addressed by this series: * The specification document is incomplete and vague. Rewritten.
* When a peer goes away, and its ID gets reused for another one, interrupts don't work. * When configured for interrupts, we receive shared memory from the server some time after realize(). This creates a (usually short-lived) "no shared memory, yet" state. If the guest wins the race, it is exposed to this state (known issue, if you count burying in docs/specs/ as "known"). If migration wins the race, it fails or corrupts memory. * Interrupts are unreliable in a (usually small) time window after the destination peer connects. I believe fixing this will require changing the client/server protocol, so just document it for now. * The device isn't capable to tell guest software whether it is configured for interrupts. Fix that in a new, backwards-compatible revision of the guest ABI, and bump the PCI revision. Deprecate the old revision. * The device properties are a confusing mess and badly checked. Clean that up. * Migration with interrupts relies on server behavior not guaranteed by the specification. Tighten the specification. Paolo, I'd like your opinion on PATCH 1-3, 5, 33 and 34. I hope I can get competent review for my other patches elsewhere, but you're of course welcome to review them, too. v2: * PATCH 01: Rewritten [Paolo] * PATCH 02-05: New * PATCH 12: Typo [Eric] * PATCH 22: Commit message improved [Paolo] * PATCH 25: Variables renamed [Marc-André] * PATCH 26: Reject disconnect message for own ID [Marc-André] * PATCH 27+28: Move an assertion from PATCH 27 to PATCH 28 [Marc-André] * PATCH 31: Fix missing return on error [Marc-André] * PATCH 33: Rewritten [Paolo] * PATCH 34: Commit message improved, memory leak plugged by avoiding dynamic allocation [Paolo] * PATCH 37: Botched conditionals fixed [Marc-André] * PATCH 40: Bury dead code [Marc-André] Markus Armbruster (42): exec: Fix memory allocation when memory path names new file exec: Fix memory allocation when memory path isn't on hugetlbfs target-ppc: Document TOCTTOU in hugepage support ivshmem-server: Fix and clean up command line help ivshmem-server: Don't overload POSIX shmem and file name qemu-doc: Fix ivshmem huge page example event_notifier: Make event_notifier_init_fd() #ifdef CONFIG_EVENTFD tests/libqos/pci-pc: Fix qpci_pc_iomap() to map BARs aligned ivshmem-test: Improve test case /ivshmem/single ivshmem-test: Clean up wait for devices to become operational ivshmem-test: Improve test cases /ivshmem/server-* ivshmem: Rewrite specification document ivshmem: Add missing newlines to debug printfs ivshmem: Compile debug prints unconditionally to prevent bit-rot ivshmem: Clean up after commit 9940c32 ivshmem: Drop ivshmem_event() stub ivshmem: Don't destroy the chardev on version mismatch ivshmem: Fix harmless misuse of Error ivshmem: Failed realize() can leave migration blocker behind ivshmem: Clean up register callbacks ivshmem: Clean up MSI-X conditions ivshmem: Leave INTx alone when using MSI-X ivshmem: Assert interrupts are set up once ivshmem: Simplify rejection of invalid peer ID from server ivshmem: Disentangle ivshmem_read() ivshmem: Plug leaks on unplug, fix peer disconnect ivshmem: Receive shared memory synchronously in realize() ivshmem: Propagate errors through ivshmem_recv_setup() ivshmem: Rely on server sending the ID right after the version ivshmem: Drop the hackish test for UNIX domain chardev ivshmem: Simplify how we cope with short reads from server ivshmem: Tighten check of property "size" ivshmem: Implement shm=... with a memory backend ivshmem: Simplify memory regions for BAR 2 (shared memory) ivshmem: Inline check_shm_size() into its only caller qdev: New DEFINE_PROP_ON_OFF_AUTO ivshmem: Replace int role_val by OnOffAuto master ivshmem: Split ivshmem-plain, ivshmem-doorbell off ivshmem ivshmem: Clean up after the previous commit ivshmem: Drop ivshmem property x-memdev ivshmem: Require master to have ID zero contrib/ivshmem-server: Print "not for production" warning contrib/ivshmem-server/ivshmem-server.c | 56 +- contrib/ivshmem-server/ivshmem-server.h | 4 +- contrib/ivshmem-server/main.c | 82 ++- default-configs/pci.mak | 2 +- docs/specs/ivshmem-spec.txt | 254 ++++++++ docs/specs/ivshmem_device_spec.txt | 161 ----- exec.c | 125 ++-- hw/core/qdev-properties.c | 10 + hw/misc/ivshmem.c | 1082 +++++++++++++++++-------------- include/hw/qdev-properties.h | 3 + qemu-doc.texi | 47 +- target-ppc/kvm.c | 6 + tests/ivshmem-test.c | 99 +-- tests/libqos/pci-pc.c | 8 +- util/event_notifier-posix.c | 6 + 15 files changed, 1068 insertions(+), 877 deletions(-) create mode 100644 docs/specs/ivshmem-spec.txt delete mode 100644 docs/specs/ivshmem_device_spec.txt -- 2.4.3