From: Mohamed Mediouni <mohamed@unpredictable.fr>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Shannon Zhao <shannon.zhaosl@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Ani Sinha <anisinha@redhat.com>,
qemu-arm@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Roman Bolshakov <rbolshakov@ddn.com>,
Igor Mammedov <imammedo@redhat.com>,
Phil Dennis-Jordan <phil@philjordan.eu>,
Alexander Graf <agraf@csgraf.de>, Mads Ynddal <mads@ynddal.dk>,
Cameron Esfahani <dirty@apple.com>,
Mohamed Mediouni <mohamed@unpredictable.fr>
Subject: [PATCH v6 00/13] HVF: Add support for platform vGIC and nested virtualisation
Date: Fri, 8 Aug 2025 09:01:24 +0200 [thread overview]
Message-ID: <20250808070137.48716-1-mohamed@unpredictable.fr> (raw)
Link to branch: https://github.com/mediouni-m/qemu hvf-irqchip-and-nested
(tag for this submission: hvf-irqchip-and-nested-v6)
This series adds supports for nested virtualisation when using HVF on arm64 Macs.
It has three parts:
- Apple vGICv3 support and necessary infrastructure changes for it
- support for MSI interrupts in GICv3 + GICv2m configurations, which is independent
from Apple platforms and can be merged independently.
- Nested virtualisation support. Note that the nested virtualisation implementation
shipping as of macOS 26.0 is nVHE only, and does not leverage VNCR (FEAT_NV1-style).
Known issues:
- when nested virt is enabled, no UI response within EDK2
and a permanent wait. Workaround: -boot menu=on,splash-time=0. Interrupts do
work later on in Linux.
- This series doesn't contain EL2 physical timer emulation, which is
needed if not leveraging the Apple vGIC.
To do:
- Switching ITS to off by default when using HVF w/ vGIC or WHPX (will probably do when both the series are merged)
- After that, perhaps exit if ITS is explicitly enabled.
PS: I can step up to maintain HVF support if needed.
v1->v2:
Oops. I did a mistake when preparing my patches.
- Add hvf_arm_el2_enable(_) call to virt_set_virt
- Fix nested virt support check to add HVF
v2->v3:
- LORC_EL1 patch was merged separately, remove from this series.
- fix LPIs when kernel-irqchip disabled and using TCG
- remove spurious if case in vGIC supported version detection (inapplicable now)
- Add hvf_enabled() check in combination with hvf kernel-irqchip checks
- cleanly fail on attempt to use the platform vGIC together with ITS
v3->v4:
- GIC state save improvements, including saving the opaque Apple-specific state
- Saving HVF system register state when using the vGIC and/or EL2
v5:
- oops, fixed up save/restore to be functional
- misc changes otherwise
v6:
- Addressing review comments
Mohamed Mediouni (13):
hw/arm: virt: add GICv2m for the case when ITS is not available
hvf: switch hvf_arm_get_host_cpu_features to not create a vCPU
accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC
hw/intc: Add hvf vGIC interrupt controller support
hw/arm, target/arm: nested virtualisation on HVF
hvf: save/restore Apple GIC state
target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1
hw/arm: virt: cleanly fail on attempt to use the platform vGIC
together with ITS
hvf: only call hvf_sync_vtimer() when running without the platform
vGIC
hvf: sync registers used at EL2
hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2
target/arm: hvf: instantiate GIC early
target/arm: hvf: add asserts for code paths not leveraged when using
the vGIC
accel/hvf/hvf-all.c | 50 +++
accel/stubs/hvf-stub.c | 1 +
hw/arm/virt-acpi-build.c | 4 +-
hw/arm/virt.c | 43 ++-
hw/intc/arm_gicv3_common.c | 3 +
hw/intc/arm_gicv3_hvf.c | 723 +++++++++++++++++++++++++++++++++++++
hw/intc/meson.build | 1 +
include/hw/arm/virt.h | 2 +
include/system/hvf.h | 3 +
system/vl.c | 2 +
target/arm/hvf-stub.c | 15 +
target/arm/hvf/hvf.c | 240 ++++++++++--
target/arm/hvf_arm.h | 3 +
13 files changed, 1057 insertions(+), 33 deletions(-)
create mode 100644 hw/intc/arm_gicv3_hvf.c
--
2.39.5 (Apple Git-154)
next reply other threads:[~2025-08-08 7:05 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-08 7:01 Mohamed Mediouni [this message]
2025-08-08 7:01 ` [PATCH v6 01/13] hw/arm: virt: add GICv2m for the case when ITS is not available Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 02/13] hvf: switch hvf_arm_get_host_cpu_features to not create a vCPU Mohamed Mediouni
2025-08-20 12:29 ` Mads Ynddal
2025-08-08 7:01 ` [PATCH v6 03/13] accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC Mohamed Mediouni
2025-08-12 13:05 ` Philippe Mathieu-Daudé
2025-08-08 7:01 ` [PATCH v6 04/13] hw/intc: Add hvf vGIC interrupt controller support Mohamed Mediouni
2025-08-12 16:19 ` Philippe Mathieu-Daudé
2025-08-14 12:57 ` Mads Ynddal
2025-08-15 5:55 ` Mohamed Mediouni
2025-08-19 13:21 ` Mads Ynddal
2025-08-08 7:01 ` [PATCH v6 05/13] hw/arm, target/arm: nested virtualisation on HVF Mohamed Mediouni
2025-08-11 12:47 ` Philippe Mathieu-Daudé
2025-08-11 13:35 ` Mohamed Mediouni
2025-08-11 13:40 ` Philippe Mathieu-Daudé
2025-08-11 12:56 ` Philippe Mathieu-Daudé
2025-08-11 13:13 ` Philippe Mathieu-Daudé
2025-08-11 13:35 ` Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 06/13] hvf: save/restore Apple GIC state Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 07/13] target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1 Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 08/13] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 09/13] hvf: only call hvf_sync_vtimer() when running without the platform vGIC Mohamed Mediouni
2025-08-19 12:37 ` Mads Ynddal
2025-08-08 7:01 ` [PATCH v6 10/13] hvf: sync registers used at EL2 Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 11/13] hvf: gate ARM_FEATURE_PMU register emulation behind not being " Mohamed Mediouni
2025-08-08 7:01 ` [PATCH v6 12/13] target/arm: hvf: instantiate GIC early Mohamed Mediouni
2025-08-14 13:06 ` Mads Ynddal
2025-08-08 7:01 ` [PATCH v6 13/13] target/arm: hvf: add asserts for code paths not leveraged when using the vGIC Mohamed Mediouni
2025-08-19 12:22 ` Mads Ynddal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250808070137.48716-1-mohamed@unpredictable.fr \
--to=mohamed@unpredictable.fr \
--cc=agraf@csgraf.de \
--cc=anisinha@redhat.com \
--cc=dirty@apple.com \
--cc=imammedo@redhat.com \
--cc=mads@ynddal.dk \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=phil@philjordan.eu \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rbolshakov@ddn.com \
--cc=shannon.zhaosl@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).