qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation
@ 2023-03-07 17:17 David Woodhouse
  2023-03-07 17:17 ` [PATCH v2 01/27] hw/xen: Add xenstore wire implementation and implementation stubs David Woodhouse
                   ` (27 more replies)
  0 siblings, 28 replies; 36+ messages in thread
From: David Woodhouse @ 2023-03-07 17:17 UTC (permalink / raw)
  To: qemu-devel
  Cc: Paolo Bonzini, Paul Durrant, Joao Martins, Ankur Arora,
	Stefano Stabellini, vikram.garhwal, Anthony Perard, xen-devel,
	Juan Quintela, Dr . David Alan Gilbert, Peter Maydell

Following on from the basic platform support which has already been
merged, here's phase 2 which wires up the XenBus and PV back ends.

It starts with a basic single-tenant internal implementation of a 
XenStore, with a copy-on-write tree, watches, transactions, quotas.

Then we introduce operations tables for the grant table, event channel,
foreignmen and xenstore operations so that in addition to using the Xen
libraries for those, QEMU can use its internal emulated versions.

A little bit of cleaning up of header files, and we can enable the build
of xen-bus in the CONFIG_XEN_EMU build, and run a Xen guest with an
actual PV disk...

   qemu-system-x86_64 -serial mon:stdio -M q35 -display none -m 1G -smp 2 \
      -accel kvm,xen-version=0x4000e,kernel-irqchip=split \
      -kernel bzImage -append "console=ttyS0 root=/dev/xvda1 selinux=0" \
      -drive file=/var/lib/libvirt/images/fedora28.qcow2,if=none,id=disk \
      -device xen-disk,drive=disk,vdev=xvda

The main thing that isn't working here is migration. I've implemented it 
for the internal xenstore and the unit tests exercise it, but the 
existing PV back ends don't support it, perhaps partly because support 
for guest transparent live migration support isn't upstream in Xen yet. 
So the disk doesn't come back correctly after migration. I'm content 
with that for 8.0 though, and we just mark the emulated XenStore device
as unmigratable to prevent users from trying.

The other pre-existing constraint is that only the block back end has
yet been ported to the "new" XenBus infrastructure, and is actually
capable of creating its own backend nodes. Again, I can live with
that for 8.0. Maybe this will motivate us to finally get round to
converting the rest off XenLegacyBackend and killing it.

We also don't have a simple way to perform grant mapping of multiple
guest pages to contiguous addresses, as we can under real Xen. So we
don't advertise max-ring-page-order for xen-disk in the emulated mode.
Fixing that — if we actually want to — would probably require mapping
RAM from an actual backing store object, so that it can be mapped again
at a different location for the PV back end to see.

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

 • Full set of reviewed-by tags from Paul (and associated minor fixes).

 • Disable migration for emulated XenStore device.

 • Update docs and add MAINTAINERS entry.

v1: https://lore.kernel.org/qemu-devel/20230302153435.1170111-1-dwmw2@infradead.org/
    https://git.infradead.org/users/dwmw2/qemu.git/shortlog/refs/heads/xenfv-1

David Woodhouse (23):
      hw/xen: Add xenstore wire implementation and implementation stubs
      hw/xen: Add basic XenStore tree walk and write/read/directory support
      hw/xen: Implement XenStore watches
      hw/xen: Implement XenStore transactions
      hw/xen: Watches on XenStore transactions
      hw/xen: Implement core serialize/deserialize methods for xenstore_impl
      hw/xen: Add evtchn operations to allow redirection to internal emulation
      hw/xen: Add gnttab operations to allow redirection to internal emulation
      hw/xen: Pass grant ref to gnttab unmap operation
      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 CONFIG_XEN_BUS
      hw/xen: Only advertise ring-page-order for xen-block if gnttab supports it
      hw/xen: Hook up emulated implementation for event channel operations
      hw/xen: Add emulated implementation of grant table operations
      hw/xen: Add emulated implementation of XenStore operations
      hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore
      hw/xen: Implement soft reset for emulated gnttab
      i386/xen: Initialize Xen backends from pc_basic_device_init() for emulation
      MAINTAINERS: Add entry for Xen on KVM emulation
      docs: Update Xen-on-KVM documentation for PV disk support

Paul Durrant (4):
      hw/xen: Implement XenStore permissions
      hw/xen: Create initial XenStore nodes
      hw/xen: Add xenstore operations to allow redirection to internal emulation
      hw/xen: Avoid crash when backend watch fires too early

 MAINTAINERS                                   |    9 +
 accel/xen/xen-all.c                           |   69 +-
 docs/system/i386/xen.rst                      |   30 +-
 hw/9pfs/meson.build                           |    2 +-
 hw/9pfs/xen-9p-backend.c                      |   32 +-
 hw/block/dataplane/meson.build                |    2 +-
 hw/block/dataplane/xen-block.c                |   12 +-
 hw/block/meson.build                          |    2 +-
 hw/block/xen-block.c                          |   12 +-
 hw/char/meson.build                           |    2 +-
 hw/char/xen_console.c                         |   57 +-
 hw/display/meson.build                        |    2 +-
 hw/display/xenfb.c                            |   32 +-
 hw/i386/kvm/meson.build                       |    1 +
 hw/i386/kvm/trace-events                      |   15 +
 hw/i386/kvm/xen_evtchn.c                      |   15 +
 hw/i386/kvm/xen_gnttab.c                      |  325 ++++-
 hw/i386/kvm/xen_gnttab.h                      |    1 +
 hw/i386/kvm/xen_xenstore.c                    | 1251 +++++++++++++++-
 hw/i386/kvm/xenstore_impl.c                   | 1927 +++++++++++++++++++++++++
 hw/i386/kvm/xenstore_impl.h                   |   63 +
 hw/i386/pc.c                                  |    7 +
 hw/i386/pc_piix.c                             |    4 +-
 hw/i386/xen/xen-hvm.c                         |   38 +-
 hw/i386/xen/xen-mapcache.c                    |    2 +-
 hw/i386/xen/xen_platform.c                    |    7 +-
 hw/net/xen_nic.c                              |   25 +-
 hw/usb/meson.build                            |    2 +-
 hw/usb/xen-usb.c                              |   29 +-
 hw/xen/meson.build                            |    6 +-
 hw/xen/trace-events                           |    2 +-
 hw/xen/xen-bus-helper.c                       |   62 +-
 hw/xen/xen-bus.c                              |  411 +-----
 hw/xen/xen-legacy-backend.c                   |  254 +---
 hw/xen/xen-operations.c                       |  478 ++++++
 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/xen/xen-bus-helper.h               |   26 +-
 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              |  408 ++++++
 include/hw/xen/{xen_common.h => xen_native.h} |   75 +-
 include/hw/xen/xen_pvdev.h                    |    6 +-
 softmmu/globals.c                             |    4 +
 target/i386/kvm/xen-emu.c                     |    5 +
 tests/unit/meson.build                        |    1 +
 tests/unit/test-xs-node.c                     |  871 +++++++++++
 53 files changed, 5804 insertions(+), 927 deletions(-)





^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2023-03-24 15:27 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-07 17:17 [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 01/27] hw/xen: Add xenstore wire implementation and implementation stubs David Woodhouse
2023-03-07 17:17 ` [PATCH v2 02/27] hw/xen: Add basic XenStore tree walk and write/read/directory support David Woodhouse
2023-03-07 17:17 ` [PATCH v2 03/27] hw/xen: Implement XenStore watches David Woodhouse
2023-03-07 17:17 ` [PATCH v2 04/27] hw/xen: Implement XenStore transactions David Woodhouse
2023-03-07 17:17 ` [PATCH v2 05/27] hw/xen: Watches on " David Woodhouse
2023-03-07 17:17 ` [PATCH v2 06/27] hw/xen: Implement XenStore permissions David Woodhouse
2023-03-07 17:17 ` [PATCH v2 07/27] hw/xen: Implement core serialize/deserialize methods for xenstore_impl David Woodhouse
2023-03-07 17:17 ` [PATCH v2 08/27] hw/xen: Create initial XenStore nodes David Woodhouse
2023-03-07 17:17 ` [PATCH v2 09/27] hw/xen: Add evtchn operations to allow redirection to internal emulation David Woodhouse
2023-03-23 10:29   ` Anthony PERARD via
2023-03-23 10:42     ` David Woodhouse
2023-03-23 10:57     ` [PATCH] hw/xenpv: Initialize Xen backend operations David Woodhouse
2023-03-23 13:26       ` Paul Durrant
2023-03-24 14:51       ` Anthony PERARD via
2023-03-07 17:17 ` [PATCH v2 10/27] hw/xen: Add gnttab operations to allow redirection to internal emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 11/27] hw/xen: Pass grant ref to gnttab unmap operation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 12/27] hw/xen: Add foreignmem operations to allow redirection to internal emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 13/27] hw/xen: Add xenstore " David Woodhouse
2023-03-07 17:17 ` [PATCH v2 14/27] hw/xen: Move xenstore_store_pv_console_info to xen_console.c David Woodhouse
2023-03-07 17:17 ` [PATCH v2 15/27] hw/xen: Use XEN_PAGE_SIZE in PV backend drivers David Woodhouse
2023-03-07 17:17 ` [PATCH v2 16/27] hw/xen: Rename xen_common.h to xen_native.h David Woodhouse
2023-03-07 17:17 ` [PATCH v2 17/27] hw/xen: Build PV backend drivers for CONFIG_XEN_BUS David Woodhouse
2023-03-07 17:17 ` [PATCH v2 18/27] hw/xen: Avoid crash when backend watch fires too early David Woodhouse
2023-03-07 17:17 ` [PATCH v2 19/27] hw/xen: Only advertise ring-page-order for xen-block if gnttab supports it David Woodhouse
2023-03-07 17:17 ` [PATCH v2 20/27] hw/xen: Hook up emulated implementation for event channel operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 21/27] hw/xen: Add emulated implementation of grant table operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 22/27] hw/xen: Add emulated implementation of XenStore operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 23/27] hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore David Woodhouse
2023-03-07 17:17 ` [PATCH v2 24/27] hw/xen: Implement soft reset for emulated gnttab David Woodhouse
2023-03-07 17:17 ` [PATCH v2 25/27] i386/xen: Initialize Xen backends from pc_basic_device_init() for emulation David Woodhouse
2023-03-07 17:56   ` Paul Durrant
2023-03-07 17:17 ` [PATCH v2 26/27] MAINTAINERS: Add entry for Xen on KVM emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 27/27] docs: Update Xen-on-KVM documentation for PV disk support David Woodhouse
2023-03-07 17:57 ` [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation Paul Durrant
2023-03-07 18:27   ` David Woodhouse

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).