Round up a handful of outstanding fixes, add console support and fix up per-vCPU upcall vector support (which was previously untested), and that allows us to boot PV guests using the Xen "PV shim". Having fixed up the per-vCPU upcall vector support, pull in slightly newer Xen headers just for the definition of the CPUID bit that lets us tell the Linux (6.0+) kernel to use it. That'll help with testing. v2 of the series added network support for emulated Xen guests by converting the xen_nic driver to the "new" XenDevice model. That had been on the TODO list for a while, and having done the console it made sense to do network too while I still remembered it all. But then there was a bit more breakage to deal with. Even before the conversion to XenDevice, the xen_nic support was already hosed for actual Xen PV guests (-m xenfv) because it never actually managed to connect the Xen network device to a netdev. And net_cleanup() was freeing the NICs from underneath the device models which own them, which upsets the devices that actually do their own cleanup. Simplify the user experience for "-device file=IMAGE,if=xen" because that had been offending me for a while, and now I knew how to do that too. Update the documentation, and take the opportunity to fix up that bit about unplug not working on Q35, because I *also* worked out how to do that when heckling Joel's attempt to do so. v3 of the series includes more cleanups to the -nic option handling, allowing me to ditch some of the ugly special cases for registering the Xen network device for xenfv vs. pc platforms, and replace it with a simple "register all NICs on this bus" which PCI can use too. That was seen in a 45-patch series all of its own, but now I've pulled in just the basic part that's needed for Xen support, and the remaining bombing run on all the platforms can wait; I won't spam the list with the rest of that again just yet. David Woodhouse (28): i386/xen: Don't advertise XENFEAT_supervisor_mode_kernel i386/xen: fix per-vCPU upcall vector for Xen emulation hw/xen: select kernel mode for per-vCPU event channel upcall vector hw/xen: don't clear map_track[] in xen_gnttab_reset() hw/xen: fix XenStore watch delivery to guest hw/xen: take iothread mutex in xen_evtchn_reset_op() hw/xen: use correct default protocol for xen-block on x86 i386/xen: Ignore VCPU_SSHOTTMR_future flag in set_singleshot_timer() hw/xen: Clean up event channel 'type_val' handling to use union include: update Xen public headers to Xen 4.17.2 release i386/xen: advertise XEN_HVM_CPUID_UPCALL_VECTOR in CPUID hw/xen: populate store frontend nodes with XenStore PFN/port hw/xen: automatically assign device index to block devices hw/xen: add get_frontend_path() method to XenDeviceClass hw/xen: do not repeatedly try to create a failing backend device hw/xen: update Xen console to XenDevice model hw/xen: add support for Xen primary console in emulated mode hw/xen: only remove peers of PCI NICs on unplug hw/xen: update Xen PV NIC to XenDevice model net: do not delete nics in net_cleanup() xen-platform: unplug AHCI disks net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info() net: report list of available models according to platform net: add qemu_create_nic_bus_devices() hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot() hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices() hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs docs: update Xen-on-KVM documentation MAINTAINERS | 2 +- blockdev.c | 15 +- docs/system/i386/xen.rst | 100 +++-- hw/block/xen-block.c | 44 +- hw/char/trace-events | 8 + hw/char/xen_console.c | 572 +++++++++++++++++++------ hw/i386/kvm/meson.build | 1 + hw/i386/kvm/trace-events | 2 + hw/i386/kvm/xen-stubs.c | 8 + hw/i386/kvm/xen_evtchn.c | 158 ++++--- hw/i386/kvm/xen_gnttab.c | 7 +- hw/i386/kvm/xen_primary_console.c | 193 +++++++++ hw/i386/kvm/xen_primary_console.h | 23 + hw/i386/kvm/xen_xenstore.c | 31 +- hw/i386/pc.c | 21 +- hw/i386/xen/xen_platform.c | 77 ++-- hw/net/meson.build | 2 +- hw/net/trace-events | 11 + hw/net/xen_nic.c | 484 ++++++++++++++++----- hw/pci/pci.c | 45 ++ hw/xen/xen-backend.c | 27 +- hw/xen/xen-bus.c | 23 +- hw/xen/xen-legacy-backend.c | 1 - hw/xen/xen_devconfig.c | 53 --- hw/xenpv/xen_machine_pv.c | 19 - include/hw/net/ne2000-isa.h | 2 - include/hw/pci/pci.h | 4 +- include/hw/xen/interface/arch-arm.h | 37 +- include/hw/xen/interface/arch-x86/cpuid.h | 31 +- include/hw/xen/interface/arch-x86/xen-x86_32.h | 19 +- include/hw/xen/interface/arch-x86/xen-x86_64.h | 19 +- include/hw/xen/interface/arch-x86/xen.h | 26 +- include/hw/xen/interface/event_channel.h | 19 +- include/hw/xen/interface/features.h | 19 +- include/hw/xen/interface/grant_table.h | 19 +- include/hw/xen/interface/hvm/hvm_op.h | 19 +- include/hw/xen/interface/hvm/params.h | 19 +- include/hw/xen/interface/io/blkif.h | 27 +- include/hw/xen/interface/io/console.h | 19 +- include/hw/xen/interface/io/fbif.h | 19 +- include/hw/xen/interface/io/kbdif.h | 19 +- include/hw/xen/interface/io/netif.h | 25 +- include/hw/xen/interface/io/protocols.h | 19 +- include/hw/xen/interface/io/ring.h | 49 +-- include/hw/xen/interface/io/usbif.h | 19 +- include/hw/xen/interface/io/xenbus.h | 19 +- include/hw/xen/interface/io/xs_wire.h | 36 +- include/hw/xen/interface/memory.h | 30 +- include/hw/xen/interface/physdev.h | 23 +- include/hw/xen/interface/sched.h | 19 +- include/hw/xen/interface/trace.h | 19 +- include/hw/xen/interface/vcpu.h | 19 +- include/hw/xen/interface/version.h | 19 +- include/hw/xen/interface/xen-compat.h | 19 +- include/hw/xen/interface/xen.h | 19 +- include/hw/xen/xen-backend.h | 1 + include/hw/xen/xen-bus.h | 3 + include/hw/xen/xen-legacy-backend.h | 2 - include/net/net.h | 10 +- include/sysemu/kvm_xen.h | 1 + net/net.c | 226 +++++++++- target/i386/kvm/kvm.c | 4 + target/i386/kvm/xen-emu.c | 59 ++- 63 files changed, 1851 insertions(+), 1033 deletions(-)