Hi, On 6/17/25 5:50 PM, Miguel Luis wrote: > Hi Eric, > >> On 17 Jun 2025, at 15:41, Eric Auger <eric.au...@redhat.com> wrote: >> >> >> >> On 6/17/25 5:23 PM, Miguel Luis wrote: >>> Hi Alyssa, >>> >>>> On 17 Jun 2025, at 14:17, Alyssa Ross <h...@alyssa.is> wrote: >>>> >>>> Eric Auger <eric.au...@redhat.com> writes: >>>> >>>>> 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> >>>> Hi! From what I can tell, this will produce an error on hosts that >>>> don't support nested virtualization when QEMU is invoked with -accel >>>> kvm:tcg >>> I didn’t know '-acell kvm:tcg’ could be used as a fallback mechanism between >>> acceleration modes. May I ask whether do you manage the ‘-cpu’ type for >>> ‘-accel >>> kvm:tcg’ with cpu ‘max’ ? >> Does it exist? >> qemu-system-aarch64: -accel kvm:tcg: invalid accelerator kvm:tcg > Maybe Alyssa is referring to ‘-M > virt,accel=kvm:tcg,virtualization=on,gic-version=3’ ? > > The above didn’t triggered any error. Anyhow if the above does what Alyssa’s > saying > we would just be missing the check for || !tcg_enabled() in this patch, I > believe.
After discussion with Paolo, the lack of the CAP should be detected earlier in kvm_init/kvm_arch_init to allow the fallback to TCG. in target/arm/kvm.c kvm_arch_init() some generic caps are checked but none of them are related to machine settings and this code is virt arm machine agnostic. I checked and adding if (object_dynamic_cast(OBJECT(ms), TYPE_VIRT_MACHINE)) { VirtMachineState *vms = VIRT_MACHINE(ms); if (vms->virt && !kvm_arm_el2_supported()) { error_report("KVM does not support nested virtualization"); ret = -EINVAL; } } at the end of the function would do the job. But as I said previously this is not done for other virt arm machine options that are accel specific or require special KVM caps (secure, mte for instance) so it would be a change in the approach. As pointed out before fallback spirit was rather: "KVM isn't enabled" than for "KVM doesn't support a specific feature". Thanks Eric it's purely the first accelerator that says it can work 1:03 <https://redhat-internal.slack.com/archives/C04KFKV2SE9/p1750331005242709> pbonzini Where "can work" is only based on the host. > > Miguel > >> Alyssa, didn't you mean -accel kvm or --accel tcg >>> But more importantly, is this what you’re referring to? >>> >>> Although, >>> >>>> -machine virtualization=on, >>> should work for both '-accel kvm’ and ‘-accel tcg’. >>> >>>> but I don't think that's the ideal >>>> behaviour. It would make more sense for it to fall back to the first >>>> permitted accel option that does support running the machine as >>>> configured, so if hardware nested virtualization is not supported, it >>>> should fall back to TCG. >>>> >>>> I maintain an OS development environment that includes scripts for >>>> running images in QEMU, where running KVM on those images is a >>>> requirement. Currently, those scripts simply force TCG on aarch64. >>>> With this change, to take advantage of KVM NV support, I'd have to try >>>> to identify in the script whether NV would be supported. QEMU would be >>>> in a much better position to determine this and fall back to TCG if it's >>>> unsupported, like how the -accel option with multiple values usually >>>> works. >>> Thanks, >>> Miguel >