On Wed, 11 Mar 2026 at 09:54, Alyssa Ross <[email protected]> wrote: > > If I create a machine with more CPUs than KVM supports, but specify > multiple accelerator options, QEMU will fall back to the next > accelerator. This is great, because if I've explicitly specified > multiple accelerators, I've told QEMU I'm fine with any of them being > used to provide the machine I want. > > When I create a machine with nested virtualization enabled, though, > this doesn't happen. KVM often doesn't support it, but TCG always > does. The nice thing to do would be for QEMU to fall back to TCG if > KVM can't provide, like it does when too many CPUs are requested. > This patch adjusts the behaviour to do that. > > This is very helpful for OS development scripts that run an OS in QEMU > — I want everybody to be able to run the script, always with > virtualization enabled because the OS requires it, but for it to take > advantage of KVM acceleration when available. > > Signed-off-by: Alyssa Ross <[email protected]> > --- > hw/arm/virt.c | 6 ------ > target/arm/kvm.c | 8 ++++++++ > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index 7456614d05..0b63b2eac3 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -2372,12 +2372,6 @@ static void machvirt_init(MachineState *machine) > exit(1); > } > > - if (vms->virt && kvm_enabled() && !kvm_arm_el2_supported()) { > - error_report("mach-virt: host kernel KVM does not support providing " > - "Virtualization extensions to the guest CPU"); > - exit(1); > - } > - > if (vms->virt && !kvm_enabled() && !tcg_enabled() && !qtest_enabled()) { > error_report("mach-virt: %s does not support providing " > "Virtualization extensions to the guest CPU",
I think there is a bigger problem here. The code in the virt board init assumes that the accelerator has already been selected: based on whether kvm_enabled() or tcg_enabled() it decides things like which GIC version can be used, whether "-machine gic-version=host" is valid or not, and so on. This bit we're deleting here is just one of multiple checks we do that assume that we know the accelerator already. If we actually don't know if we're going to be using TCG or KVM then all this code needs to be rethought. Paolo, can you unqueue this for a bit while we think about it? thanks -- PMM
