> On 21. Jan 2026, at 14:58, Mohamed Mediouni <[email protected]> wrote:
> 
> Link to branch: https://github.com/mediouni-m/qemu hvf-irqchip-and-nested
> (tag for this submission: hvf-irqchip-and-nested-v8)
> 
> This series adds supports for nested virtualisation when using HVF on arm64 
> Macs.
> 
> It has two parts:
> - Apple vGICv3 support and necessary infrastructure changes for it
> - Nested virtualisation support. Note that the nested virtualisation 
> implementation
> shipping as of macOS 26.3 is nVHE only (but it _does_ use VNCR as shipped).
> 
> It's rebased on top of the WHPX arm64 series.
> 
> Known issues:
> - This series doesn't contain EL2 physical timer emulation, which is
> needed if not leveraging the Apple vGIC.
> 
> - when nested virt is enabled, no UI response within EDK2
> and a permanent wait. Workaround: -boot menu=on,splash-time=0.
> 
> Apple Feedback Assistant item: FB21649319
> 
> When the VM is running at EL2 at the very moment the virtual timer fires:
> HV_EXIT_REASON_VTIMER_ACTIVATED doesn’t fire (when not using the provided vGIC
> - using a GICv2 doesn’t require having transition notifiers which 
> Hypervisor.framework doesn’t have…)
> 
> and when using the provided vGIC, the interrupt never gets delivered back to 
> the guest
> 
> Linux as a guest OS is fine with this… but the reference ArmVirtQemu edk2 
> build always uses the virtual timer even when running EFI at EL2, so it gets 
> broken unless this patch is applied to edk2:
> 
> diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc
> index 643620371b..1bfe7b67fc 100644
> --- a/ArmVirtPkg/ArmVirt.dsc.inc
> +++ b/ArmVirtPkg/ArmVirt.dsc.inc
> @@ -101,7 +101,7 @@
>   CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf
>   ArmSmcLib|MdePkg/Library/ArmSmcLib/ArmSmcLib.inf
>   ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf
> -  
> ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerVirtCounterLib/ArmGenericTimerVirtCounterLib.inf
> +  
> ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf^M
> 
>   PlatformPeiLib|ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
>   
> MemoryInitPeiLib|ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.inf

Oops, looks like patchew recognised this as a patch and failed to apply it…
Hopefully other automation didn’t get broken too...
> Changelog:
> 
> 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
> 
> v7:
> - Address review comments, adapt around Qemu changes and bugfixes.
> 
> v8:
> - Rebase, and misc fixes
> 
> Based-on: 
> https://patchew.org/QEMU/[email protected]/
> 
> Mohamed Mediouni (11):
>  hw/intc: Add hvf vGIC interrupt controller support
>  accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC
>  hvf: save/restore Apple GIC state
>  hw/arm, target/arm: nested virtualisation on HVF
>  hvf: only call hvf_sync_vtimer() when running without the platform
>    vGIC
>  hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2
>  hvf: arm: allow exposing minimal PMU when running with nested virt on
>  target/arm: hvf: instantiate GIC early
>  target/arm: hvf: add asserts for code paths not leveraged when using
>    the vGIC
>  hvf: sync registers used at EL2
>  target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1
> 
> accel/hvf/hvf-all.c                |  51 ++
> accel/stubs/hvf-stub.c             |   2 +
> hw/arm/virt.c                      |  32 +-
> hw/intc/arm_gicv3_common.c         |   3 +
> hw/intc/arm_gicv3_hvf.c            | 742 +++++++++++++++++++++++++++++
> hw/intc/meson.build                |   1 +
> include/hw/intc/arm_gicv3_common.h |   1 +
> include/system/hvf.h               |   8 +
> system/vl.c                        |   2 +
> target/arm/hvf/hvf.c               | 197 +++++++-
> target/arm/hvf/sysreg.c.inc        |  35 ++
> 11 files changed, 1060 insertions(+), 14 deletions(-)
> create mode 100644 hw/intc/arm_gicv3_hvf.c
> 
> -- 
> 2.50.1 (Apple Git-155)
> 


Reply via email to