This is what's in flux on top of the series posted as v7. It contains both the PV back end support and the PIRQ support which were previous posted in separate series. The former is mostly unchanged, and we still need to either port that C++ XenStore implementation or make Xen's own xenstored stop crashing when run without a real Xen. Although the basic ops table support is probably sane enough to go in; it just wants testing on real Xen.
As noted, it would have been nice to remove the old Xen headers in the first phase of patches with the initial platform support, but it really does need the header untangling which occurs as we go through the backend and introduce the generic ops support. The PIRQ support is significantly reworked and I think I've fixed up the locking issues, and tested with both emulated and VFIO passthrough devices for MSI and MSI-X to PIRQ mappings. I do need to disable the KVM irqfd routing if there are VFIO devices and the kernel is old enough not to support native evtchn delivery. I have plans around that¹ but was hoping to avoid them becoming a dependency of any of the Xen suppport, so I'll probably just make it refuse that configuration on older kernels. ¹ https://lore.kernel.org/qemu-devel/aaef9961d210ac1873153bf3cf01d984708744fc.ca...@infradead.org/ David Woodhouse (18): hw/xen: Add evtchn operations to allow redirection to internal emulation hw/xen: Add emulated evtchn ops hw/xen: Add gnttab operations to allow redirection to internal emulation hw/xen: Pass grant ref to gnttab unmap hw/xen: Add foreignmem operations to allow redirection to internal emulation hw/xen: Move xenstore_store_pv_console_info to xen_console.c hw/xen: Use XEN_PAGE_SIZE in PV backend drivers hw/xen: Rename xen_common.h to xen_native.h hw/xen: Build PV backend drivers for XENFV_MACHINE hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore hw/xen: Add backend implementation of grant table operations hw/xen: Implement soft reset for emulated gnttab hw/xen: Remove old version of Xen headers i386/xen: Initialize XenBus and legacy backends from pc_init1() i386/xen: Implement HYPERVISOR_physdev_op hw/xen: Implement emulated PIRQ hypercall support hw/xen: Support GSI mapping to PIRQ hw/xen: Support MSI mapping to PIRQ Paul Durrant (1): hw/xen: Add xenstore operations to allow redirection to internal emulation accel/xen/xen-all.c | 69 +- hw/9pfs/meson.build | 2 +- hw/9pfs/xen-9p-backend.c | 32 +- hw/9pfs/xen-9pfs.h | 4 +- hw/block/dataplane/meson.build | 2 +- hw/block/dataplane/xen-block.c | 12 +- hw/block/meson.build | 2 +- hw/block/xen-block.c | 1 - hw/block/xen_blkif.h | 5 +- hw/char/meson.build | 2 +- hw/char/xen_console.c | 59 +- hw/display/meson.build | 2 +- hw/display/xenfb.c | 38 +- hw/i386/kvm/trace-events | 5 + hw/i386/kvm/trace.h | 1 + hw/i386/kvm/xen-stubs.c | 15 + hw/i386/kvm/xen_evtchn.c | 596 ++++++++++++++- hw/i386/kvm/xen_evtchn.h | 23 + hw/i386/kvm/xen_gnttab.c | 320 +++++++- hw/i386/kvm/xen_gnttab.h | 1 + hw/i386/kvm/xen_xenstore.c | 13 +- hw/i386/pc_piix.c | 17 + hw/i386/x86.c | 16 + hw/i386/xen/xen-hvm.c | 45 +- hw/i386/xen/xen-mapcache.c | 2 +- hw/i386/xen/xen_platform.c | 7 +- hw/net/xen_nic.c | 27 +- hw/pci/msi.c | 11 + hw/pci/msix.c | 7 + hw/pci/pci.c | 17 + hw/usb/meson.build | 2 +- hw/usb/xen-usb.c | 31 +- hw/xen/meson.build | 6 +- hw/xen/trace-events | 2 +- hw/xen/xen-bus-helper.c | 61 +- hw/xen/xen-bus.c | 394 ++-------- hw/xen/xen-legacy-backend.c | 256 ++----- hw/xen/xen-operations.c | 487 ++++++++++++ hw/xen/xen_devconfig.c | 4 +- hw/xen/xen_pt.c | 2 +- hw/xen/xen_pt.h | 2 +- hw/xen/xen_pt_config_init.c | 2 +- hw/xen/xen_pt_graphics.c | 1 - hw/xen/xen_pt_msi.c | 4 +- hw/xen/xen_pvdev.c | 63 +- include/hw/pci/msi.h | 1 + include/hw/xen/interface/grant_table.h | 36 - include/hw/xen/interface/io/blkif.h | 712 ----------------- include/hw/xen/interface/io/console.h | 46 -- include/hw/xen/interface/io/fbif.h | 156 ---- include/hw/xen/interface/io/kbdif.h | 566 -------------- include/hw/xen/interface/io/netif.h | 1010 ------------------------- include/hw/xen/interface/io/protocols.h | 42 - include/hw/xen/interface/io/ring.h | 474 ------------ include/hw/xen/interface/io/usbif.h | 254 ------- include/hw/xen/interface/io/xenbus.h | 70 -- include/hw/xen/xen-bus-helper.h | 25 +- include/hw/xen/xen-bus.h | 21 +- include/hw/xen/xen-legacy-backend.h | 24 +- include/hw/xen/xen.h | 24 +- include/hw/xen/xen_backend_ops.h | 393 ++++++++++ include/hw/xen/{xen_common.h => xen_native.h} | 75 +- include/hw/xen/xen_pvdev.h | 6 +- meson.build | 1 + softmmu/globals.c | 4 + target/i386/kvm/kvm.c | 12 +- target/i386/kvm/kvm_i386.h | 2 + target/i386/kvm/xen-compat.h | 19 + target/i386/kvm/xen-emu.c | 141 +++- 69 files changed, 2491 insertions(+), 4293 deletions(-)