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

Reply via email to