[RFC/PATCH v0 00/12] Gunyah hypervisor support

Srivatsa Vaddagiri posted 12 patches 6 months, 3 weeks ago
Failed in applying to current master (apply log)
There is a newer version of this series
MAINTAINERS                     |  10 +
accel/Kconfig                   |   3 +
accel/gunyah/gunyah-accel-ops.c | 168 +++++++++
accel/gunyah/gunyah-all.c       | 629 ++++++++++++++++++++++++++++++++
accel/gunyah/meson.build        |   7 +
accel/meson.build               |   1 +
accel/stubs/gunyah-stub.c       |  13 +
accel/stubs/meson.build         |   1 +
docs/about/build-platforms.rst  |   2 +-
docs/system/arm/gunyah.rst      | 214 +++++++++++
hw/arm/boot.c                   |   3 +-
hw/arm/virt.c                   |  27 +-
hw/intc/arm_gicv3_common.c      |   3 +
hw/intc/arm_gicv3_gunyah.c      | 106 ++++++
hw/intc/arm_gicv3_its_common.c  |   4 +
hw/intc/meson.build             |   1 +
include/hw/core/cpu.h           |   6 +
include/sysemu/gunyah.h         |  58 +++
include/sysemu/gunyah_int.h     |  61 ++++
meson.build                     |   9 +
meson_options.txt               |   2 +
scripts/meson-buildoptions.sh   |   3 +
scripts/update-linux-headers.sh |   3 +-
target/arm/cpu64.c              |   5 +-
target/arm/gunyah.c             | 144 ++++++++
target/arm/meson.build          |   4 +
26 files changed, 1480 insertions(+), 7 deletions(-)
create mode 100644 accel/gunyah/gunyah-accel-ops.c
create mode 100644 accel/gunyah/gunyah-all.c
create mode 100644 accel/gunyah/meson.build
create mode 100644 accel/stubs/gunyah-stub.c
create mode 100644 docs/system/arm/gunyah.rst
create mode 100644 hw/intc/arm_gicv3_gunyah.c
create mode 100644 include/sysemu/gunyah.h
create mode 100644 include/sysemu/gunyah_int.h
create mode 100644 target/arm/gunyah.c
[RFC/PATCH v0 00/12] Gunyah hypervisor support
Posted by Srivatsa Vaddagiri 6 months, 3 weeks ago
Gunyah is an open-source Type-1 hypervisor, that is currently supported on ARM64
architecture. Source code for it can be obtained from:

https://github.com/quic/gunyah-hypervisor.

This patch series adds support for Gunyah hypervisor via a new
accelerator option, 'gunyah'. This patch series is based on the Linux kernel's
Gunyah driver, which is being actively developed and not yet merged upstream
[1].

This patch series is thus *NOT YET READY* for merge. Early version of this patch
is being published to solicit comments from Qemu community.

This patch has been tested with the open-source version of Gunyah hypervisor.
Instructions to build hypervisor and test this patch are provided in this
patch series.

Limitations:

1) SMP is not yet supported. This restriction will be removed in the next version
of this patch series.

2) virtio-pci is not yet supported. hw/virtio/virtio-pci.c seems to support only
KVM and would need changes to support other hypervisors. If there is any ongoing
work in this regard, would like to build upon it and add support for Gunyah
hypervisor.


Ref:

1. https://lore.kernel.org/lkml/20230613172054.3959700-1-quic_eberman@quicinc.com/

Base commit on which this series was tested:

d77b7b28a8 target/arm: Fix 64-bit SSRA


Srivatsa Vaddagiri (12):
  hw/arm/virt: Avoid NULL pointer de-reference
  update-linux-headers: Include gunyah.h
  gunyah: Basic support
  gunyah: Add VM properties
  gunyah: Support memory assignment
  gunyah: Add IRQFD and IOEVENTFD functions
  gunyah: Add gicv3 interrupt controller
  gunyah: Specific device-tree location
  gunyah: Customize device-tree
  gunyah: CPU execution loop
  gunyah: Workarounds (NOT FOR MERGE)
  gunyah: Documentation

 MAINTAINERS                     |  10 +
 accel/Kconfig                   |   3 +
 accel/gunyah/gunyah-accel-ops.c | 168 +++++++++
 accel/gunyah/gunyah-all.c       | 629 ++++++++++++++++++++++++++++++++
 accel/gunyah/meson.build        |   7 +
 accel/meson.build               |   1 +
 accel/stubs/gunyah-stub.c       |  13 +
 accel/stubs/meson.build         |   1 +
 docs/about/build-platforms.rst  |   2 +-
 docs/system/arm/gunyah.rst      | 214 +++++++++++
 hw/arm/boot.c                   |   3 +-
 hw/arm/virt.c                   |  27 +-
 hw/intc/arm_gicv3_common.c      |   3 +
 hw/intc/arm_gicv3_gunyah.c      | 106 ++++++
 hw/intc/arm_gicv3_its_common.c  |   4 +
 hw/intc/meson.build             |   1 +
 include/hw/core/cpu.h           |   6 +
 include/sysemu/gunyah.h         |  58 +++
 include/sysemu/gunyah_int.h     |  61 ++++
 meson.build                     |   9 +
 meson_options.txt               |   2 +
 scripts/meson-buildoptions.sh   |   3 +
 scripts/update-linux-headers.sh |   3 +-
 target/arm/cpu64.c              |   5 +-
 target/arm/gunyah.c             | 144 ++++++++
 target/arm/meson.build          |   4 +
 26 files changed, 1480 insertions(+), 7 deletions(-)
 create mode 100644 accel/gunyah/gunyah-accel-ops.c
 create mode 100644 accel/gunyah/gunyah-all.c
 create mode 100644 accel/gunyah/meson.build
 create mode 100644 accel/stubs/gunyah-stub.c
 create mode 100644 docs/system/arm/gunyah.rst
 create mode 100644 hw/intc/arm_gicv3_gunyah.c
 create mode 100644 include/sysemu/gunyah.h
 create mode 100644 include/sysemu/gunyah_int.h
 create mode 100644 target/arm/gunyah.c

-- 
2.25.1
Re: [RFC/PATCH v0 00/12] Gunyah hypervisor support
Posted by Paolo Bonzini 6 months, 2 weeks ago
On 10/11/23 18:52, Srivatsa Vaddagiri wrote:
> Gunyah is an open-source Type-1 hypervisor, that is currently supported on ARM64
> architecture. Source code for it can be obtained from:
> 
> https://github.com/quic/gunyah-hypervisor.
> 
> This patch series adds support for Gunyah hypervisor via a new
> accelerator option, 'gunyah'. This patch series is based on the Linux kernel's
> Gunyah driver, which is being actively developed and not yet merged upstream
> [1].
> 
> This patch series is thus *NOT YET READY* for merge. Early version of this patch
> is being published to solicit comments from Qemu community.
> 
> This patch has been tested with the open-source version of Gunyah hypervisor.
> Instructions to build hypervisor and test this patch are provided in this
> patch series.
> 
> Limitations:
> 
> 1) SMP is not yet supported. This restriction will be removed in the next version
> of this patch series.
> 
> 2) virtio-pci is not yet supported. hw/virtio/virtio-pci.c seems to support only
> KVM and would need changes to support other hypervisors. If there is any ongoing
> work in this regard, would like to build upon it and add support for Gunyah
> hypervisor.

virtio-pci does support other hypervisors; what is not yet supported is 
cross-hypervisor support for IRQFD[1].  This is more of a QEMU issue 
than something specific to virtio-pci.  The way to fix it is to add 
wrappers for kvm_irqchip_add_irqfd_notifier_gsi and 
kvm_irqchip_remove_irqfd_notifier_gsi to AccelOpsClass, and move the 
stub implementations in accel/stubs/kvm-stub.c to the abstract 
superclass.  Then you can switch the users of these KVM functions to the 
AccelOpsClass wrapper.

By the way I've just posted a series to remove support for really really 
old kernels, and this should remove more KVM-specific code from device 
models.

Paolo

[1] a Linux eventfd (or QEMU EventNotifier) that triggers a guest 
interrupt when it becomes readable.  QEMU writes to the eventfd and the 
kernel responds by injecting the interrupt