[PATCH v2 0/24] Get Xen PV shim running in Qemu, add net & console

David Woodhouse posted 24 patches 1 year, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231019154020.99080-1-dwmw2@infradead.org
Maintainers: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>, Stefano Stabellini <sstabellini@kernel.org>, Anthony Perard <anthony.perard@citrix.com>, Paul Durrant <paul@xen.org>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Eduardo Habkost <eduardo@habkost.net>, "Michael S. Tsirkin" <mst@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, David Woodhouse <dwmw2@infradead.org>, Jason Wang <jasowang@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>, Cleber Rosa <crosa@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Wainer dos Santos Moschetta <wainersm@redhat.com>, Beraldo Leal <bleal@redhat.com>
MAINTAINERS                                    |   2 +-
blockdev.c                                     |  15 +-
docs/system/i386/xen.rst                       | 100 +++--
hw/block/xen-block.c                           |  38 ++
hw/char/trace-events                           |   8 +
hw/char/xen_console.c                          | 539 +++++++++++++++++++------
hw/i386/kvm/meson.build                        |   1 +
hw/i386/kvm/trace-events                       |   2 +
hw/i386/kvm/xen-stubs.c                        |   5 +
hw/i386/kvm/xen_evtchn.c                       | 166 ++++----
hw/i386/kvm/xen_gnttab.c                       |  32 +-
hw/i386/kvm/xen_primary_console.c              | 194 +++++++++
hw/i386/kvm/xen_primary_console.h              |  23 ++
hw/i386/kvm/xen_xenstore.c                     |  31 +-
hw/i386/pc.c                                   |  11 +-
hw/i386/pc_piix.c                              |   2 +-
hw/i386/pc_q35.c                               |   2 +-
hw/i386/xen/xen_platform.c                     |  77 ++--
hw/net/meson.build                             |   2 +-
hw/net/trace-events                            |  11 +
hw/net/xen_nic.c                               | 471 +++++++++++++++------
hw/xen/xen-backend.c                           |  27 +-
hw/xen/xen-bus.c                               |  17 +-
hw/xen/xen-legacy-backend.c                    |   1 -
hw/xen/xen_devconfig.c                         |  56 +--
hw/xenpv/xen_machine_pv.c                      |  21 +-
include/hw/i386/pc.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                       |   4 +-
include/hw/xen/xen-legacy-backend.h            |   3 +-
include/sysemu/kvm_xen.h                       |   1 +
net/net.c                                      |  28 +-
target/i386/kvm/kvm.c                          |   4 +
target/i386/kvm/xen-emu.c                      |  56 ++-
tests/avocado/kvm_xen_guest.py                 |   2 +-
63 files changed, 1585 insertions(+), 1017 deletions(-)
[PATCH v2 0/24] Get Xen PV shim running in Qemu, add net & console
Posted by David Woodhouse 1 year, 1 month ago
Round up a couple 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. Document it.

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 this series falls down the rabbithole a little more...

Now I know how to convert drivers to the "new" XenDevice model, let's do 
so for the Xen PV network driver, which has been on the TODO list for a 
while. Fix that up for actual Xen PV guests too (-m xenfv) because 
that's hosed right now even before the conversion.

Fix up net_cleanup() so it doesn't free the NICs from underneath the
device models which own them.

Switch the avocado test to use the Xen PV network device too.

Simplify the user experience for "-device file=IMAGE,if=xen" because
that was offending me.

Update the documentation, and take the opportunity to fix up that bit
about unplug not working on Q35, because I worked out how to do that
when heckling Joel's attempt to do so.

https://git.infradead.org/users/dwmw2/qemu.git/shortlog/refs/heads/xenfv-pv-2

David Woodhouse (24):
      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
      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: handle soft reset for primary console
      hw/xen: only remove peers of PCI NICs on unplug
      hw/xen: update Xen PV NIC to XenDevice model
      hw/i386/pc: support '-nic' for xen-net-device
      hw/xenpv: fix '-nic' support for xen-net-device
      net: do not delete nics in net_cleanup()
      tests/avocado: switch to using xen-net-device for Xen guest tests
      xen-platform: unplug AHCI disks
      docs: update Xen-on-KVM documentation

 MAINTAINERS                                    |   2 +-
 blockdev.c                                     |  15 +-
 docs/system/i386/xen.rst                       | 100 +++--
 hw/block/xen-block.c                           |  38 ++
 hw/char/trace-events                           |   8 +
 hw/char/xen_console.c                          | 539 +++++++++++++++++++------
 hw/i386/kvm/meson.build                        |   1 +
 hw/i386/kvm/trace-events                       |   2 +
 hw/i386/kvm/xen-stubs.c                        |   5 +
 hw/i386/kvm/xen_evtchn.c                       | 166 ++++----
 hw/i386/kvm/xen_gnttab.c                       |  32 +-
 hw/i386/kvm/xen_primary_console.c              | 194 +++++++++
 hw/i386/kvm/xen_primary_console.h              |  23 ++
 hw/i386/kvm/xen_xenstore.c                     |  31 +-
 hw/i386/pc.c                                   |  11 +-
 hw/i386/pc_piix.c                              |   2 +-
 hw/i386/pc_q35.c                               |   2 +-
 hw/i386/xen/xen_platform.c                     |  77 ++--
 hw/net/meson.build                             |   2 +-
 hw/net/trace-events                            |  11 +
 hw/net/xen_nic.c                               | 471 +++++++++++++++------
 hw/xen/xen-backend.c                           |  27 +-
 hw/xen/xen-bus.c                               |  17 +-
 hw/xen/xen-legacy-backend.c                    |   1 -
 hw/xen/xen_devconfig.c                         |  56 +--
 hw/xenpv/xen_machine_pv.c                      |  21 +-
 include/hw/i386/pc.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                       |   4 +-
 include/hw/xen/xen-legacy-backend.h            |   3 +-
 include/sysemu/kvm_xen.h                       |   1 +
 net/net.c                                      |  28 +-
 target/i386/kvm/kvm.c                          |   4 +
 target/i386/kvm/xen-emu.c                      |  56 ++-
 tests/avocado/kvm_xen_guest.py                 |   2 +-
 63 files changed, 1585 insertions(+), 1017 deletions(-)