On Fri, Jan 16, 2026 at 08:04:38AM +0100, Philippe Mathieu-Daudé wrote:
> On Apple Silicon, nested virtualization starts to be usable
> with M3 models and later. Check for the CPU model to avoid
> failure on pre-M3:
> 
>   qemu-system-aarch64: unable to find CPU model 'cortex-a72'
> 
> Now tests are correctly skipped, i.e. on M1:
> 
>   ok 1 test_kvm.Aarch64VirtKVMTests.test_aarch64_nvhe_selftest # SKIP Nested 
> Virtualization not available on Apple M1 Pro
>   ok 2 test_kvm.Aarch64VirtKVMTests.test_aarch64_vhe_selftest # SKIP Nested 
> Virtualization not available on Apple M1 Pro
> 
> Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
> ---
>  tests/functional/aarch64/test_kvm.py | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/tests/functional/aarch64/test_kvm.py 
> b/tests/functional/aarch64/test_kvm.py
> index 7545f5ed554..b26c849ec67 100755
> --- a/tests/functional/aarch64/test_kvm.py
> +++ b/tests/functional/aarch64/test_kvm.py
> @@ -29,8 +29,31 @@ class Aarch64VirtKVMTests(LinuxKernelTest):
>      # base of tests
>      KUT_BASE = "/usr/share/kvm-unit-tests/"
>  
> +    def require_nested_virtualization(self):
> +        """
> +        Requires the accelerator to support nested virtualization for the 
> test
> +        to continue
> +
> +        If the check fails, the test is canceled.
> +        """
> +        import platform, re, subprocess
> +
> +        if platform.system() != 'Darwin':
> +            return
> +        r = subprocess.run(['sysctl', '-n', 'machdep.cpu.brand_string'],
> +                           text=True, capture_output=True)
> +        if r.returncode != 0:
> +            return
> +        m = re.match(r"Apple M(\d+)( .*)?", r.stdout)

I tend to prefer check_call/check_output over the plain 'run',
in this case check_output is suitble

    try
       data = subprocess.check_output([..args..], encoding='utf8')
    except CalledProcessError
       return
    m = re.match(r"Apple M(\d+)( .*)?", data)


> +        if m:
> +            if int(m.group(1)) < 3:
> +                self.skipTest("Nested Virtualization not available"
> +                              " on %s" % r.stdout.strip())

Please add this as a decorator in tests/functional/qemu_tests/decorators.py
called something like  "skipUnlessNestedVirtSupported".

> +
>      def _launch_guest(self, kvm_mode="nvhe"):
>  
> +        self.require_nested_virtualization()
> +
>          self.set_machine('virt')
>          kernel_path = self.ASSET_KVM_TEST_KERNEL.fetch()
>  
> -- 
> 2.52.0
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to