On Wed, 2 Jul 2025 at 17:31, Eric Auger <eric.au...@redhat.com> wrote: > > From: Haibo Xu <haibo...@linaro.org> > > Up to now virt support on guest has been only supported with TCG. > Now it becomes feasible to use it with KVM acceleration. > > Also check only in-kernel GICv3 is used along with KVM EL2. > > Signed-off-by: Haibo Xu <haibo...@linaro.org> > Signed-off-by: Miguel Luis <miguel.l...@oracle.com> > Signed-off-by: Eric Auger <eric.au...@redhat.com> > Reviewed-by: Richard Henderson <richard.hender...@linaro.org> > > --- > v6 -> v7: > - rebase on top of "hw/arm/virt: Make EL2 accelerator check an > accept-list". I dared to keep Richard's R-b though. > > v2 -> v3: > - check gic version/in-kernel implementation when kvm el2 is set (Peter) > > v1 -> v2: > - fixed test ordering: virt && ((kvm && !kvm_el2) || hvf) [Richard] > - tweeked the commit title & message > --- > hw/arm/virt.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index 550a272fbb..1c0a2c43c4 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -792,6 +792,13 @@ static void create_gic(VirtMachineState *vms, > MemoryRegion *mem) > default: > g_assert_not_reached(); > } > + > + if (kvm_enabled() && vms->virt && > + (revision != 3 || !kvm_irqchip_in_kernel())) { > + error_report("KVM EL2 only is supported with in-kernel GICv3");
"is only supported" > + exit(1); > + } > + > vms->gic = qdev_new(gictype); > qdev_prop_set_uint32(vms->gic, "revision", revision); > qdev_prop_set_uint32(vms->gic, "num-cpu", smp_cpus); > @@ -2211,7 +2218,8 @@ static void machvirt_init(MachineState *machine) > exit(1); > } > > - if (vms->virt && !tcg_enabled() && !qtest_enabled()) { > + if (vms->virt && !(kvm_enabled() && kvm_arm_el2_supported()) && > + !tcg_enabled() && !qtest_enabled()) { > error_report("mach-virt: %s does not support providing " > "Virtualization extensions to the guest CPU", > current_accel_name()); Have you tested doing a VM migration of a KVM with EL2 setup? I suppose the system registers probably generally Just Work via the sysreg GET/SET_ONE_REG API, but won't the in-kernel GICv3 have extra state that we need to migrate in hw/intc/arm_gicv3_kvm.c ? thanks -- PMM