kselftest/arm64: Fix syscall-abi for systems without 128 bit SME
authorMark Brown <broonie@kernel.org>
Tue, 27 Dec 2022 13:06:35 +0000 (13:06 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 12 Jan 2023 16:20:31 +0000 (16:20 +0000)
SME does not mandate any specific VL so we may not have 128 bit SME but
the algorithm used for enumerating VLs assumes that we will. Add the
required check to ensure that the algorithm terminates.

Fixes: 43e3f85523e4 ("kselftest/arm64: Add SME support to syscall ABI test")
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20221223-arm64-syscall-abi-sme-only-v1-1-4fabfbd62087@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
tools/testing/selftests/arm64/abi/syscall-abi.c

index dd7ebe536d05faec4cc7053ee10c9e39bf31e094..ffe719b50c2152791d5aa1f809ceb86efb955ec7 100644 (file)
@@ -390,6 +390,10 @@ static void test_one_syscall(struct syscall_cfg *cfg)
 
                        sme_vl &= PR_SME_VL_LEN_MASK;
 
+                       /* Found lowest VL */
+                       if (sve_vq_from_vl(sme_vl) > sme_vq)
+                               break;
+
                        if (sme_vq != sve_vq_from_vl(sme_vl))
                                sme_vq = sve_vq_from_vl(sme_vl);
 
@@ -461,6 +465,10 @@ int sme_count_vls(void)
 
                vl &= PR_SME_VL_LEN_MASK;
 
+               /* Found lowest VL */
+               if (sve_vq_from_vl(vl) > vq)
+                       break;
+
                if (vq != sve_vq_from_vl(vl))
                        vq = sve_vq_from_vl(vl);