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. v2: * PATCH 05: Include ivshmem-test only in configurations that include the device * PATCH 36: Fix ivshmem-plain not to assert its nonexistent INTx Markus Armbruster (40): 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 | 98 +-- default-configs/pci.mak | 2 +- docs/specs/ivshmem-spec.txt | 254 +++++++ docs/specs/ivshmem_device_spec.txt | 161 ----- hw/core/qdev-properties.c | 10 + hw/misc/ivshmem.c | 1104 +++++++++++++++++-------------- include/hw/qdev-properties.h | 3 + qemu-doc.texi | 47 +- target-ppc/kvm.c | 6 + tests/Makefile | 2 +- tests/ivshmem-test.c | 99 +-- tests/libqos/pci-pc.c | 8 +- util/event_notifier-posix.c | 6 + 15 files changed, 1031 insertions(+), 829 deletions(-) create mode 100644 docs/specs/ivshmem-spec.txt delete mode 100644 docs/specs/ivshmem_device_spec.txt -- 2.4.3