Re: [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation

2023-03-07 Thread David Woodhouse
On Tue, 2023-03-07 at 17:57 +, Paul Durrant wrote:
> I think the series is good to go now so time to send a PR.

Done, thank you!


smime.p7s
Description: S/MIME cryptographic signature


Re: [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation

2023-03-07 Thread Paul Durrant

On 07/03/2023 17:17, David Woodhouse wrote:

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-dw...@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  

[PATCH v2 00/27] Enable PV backends with Xen/KVM emulation

2023-03-07 Thread David Woodhouse
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-dw...@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/