This seems hackish - would it be better to create this region automatically within kvm? Suggestions are welcome.
Signed-off-by: Michael S. Tsirkin <m...@redhat.com> --- hw/misc/pci-testdev.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c index 94141a3..55efc32 100644 --- a/hw/misc/pci-testdev.c +++ b/hw/misc/pci-testdev.c @@ -21,6 +21,7 @@ #include "hw/pci/pci.h" #include "qemu/event_notifier.h" #include "qemu/osdep.h" +#include <sys/mman.h> typedef struct PCITestDevHdr { uint8_t test; @@ -82,11 +83,13 @@ typedef struct PCITestDevState { PCIDevice parent_obj; /*< public >*/ + MemoryRegion zeromr; MemoryRegion mmio; MemoryRegion mbar; MemoryRegion portio; IOTest *tests; int current; + void *zero; } PCITestDevState; #define TYPE_PCI_TEST_DEV "pci-testdev" @@ -242,6 +245,11 @@ static void pci_testdev_realize(PCIDevice *pci_dev, Error **errp) uint8_t *pci_conf; char *name; int r, i; + d->zero = mmap(NULL, IOTEST_MEMSIZE * 2, PROT_READ, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + + memory_region_init_ram_ptr(&d->zeromr, OBJECT(d), "pci-testdev-zero", 0x1000, d->zero); + memory_region_set_readonly(&d->zeromr, true); pci_conf = pci_dev->config; @@ -286,6 +294,11 @@ static void pci_testdev_realize(PCIDevice *pci_dev, Error **errp) test->hasnotifier = false; continue; } + + if (test->hasnotifier && !test->size) { + memory_region_add_subregion_overlap(&d->mbar, le32_to_cpu(test->hdr->offset), + &d->zeromr, 2 /* prio */); + } r = event_notifier_init(&test->notifier, 0); assert(r >= 0); test->hasnotifier = true; -- MST