kselftest/arm64: mte: Skip the hugetlb tests if MTE not supported on such mappings
authorCatalin Marinas <catalin.marinas@arm.com>
Fri, 21 Feb 2025 09:33:31 +0000 (09:33 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 5 Mar 2025 18:54:02 +0000 (18:54 +0000)
While the kselftest was added at the same time with the kernel support
for MTE on hugetlb mappings, the tests may be run on older kernels. Skip
the tests if PROT_MTE is not supported on MAP_HUGETLB mappings.

Fixes: 27879e8cb6b0 ("selftests: arm64: add hugetlb mte tests")
Cc: Yang Shi <yang@os.amperecomputing.com>
Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
Reviewed-by: Dev Jain <dev.jain@arm.com>
Reviewed-by: Yang Shi <yang@os.amperecomputing.com>
Link: https://lore.kernel.org/r/20250221093331.2184245-3-catalin.marinas@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
tools/testing/selftests/arm64/mte/check_hugetlb_options.c

index 11f812635b510e1a7984e5075bbbccdf7a51f773..3bfcd3848432b1ce1bb5c2bbfab14c8dfecb887b 100644 (file)
@@ -227,6 +227,8 @@ static int check_child_hugetlb_memory_mapping(int mem_type, int mode, int mappin
 int main(int argc, char *argv[])
 {
        int err;
+       void *map_ptr;
+       unsigned long map_size;
 
        err = mte_default_setup();
        if (err)
@@ -243,6 +245,15 @@ int main(int argc, char *argv[])
                return KSFT_FAIL;
        }
 
+       /* Check if MTE supports hugetlb mappings */
+       map_size = default_huge_page_size();
+       map_ptr = mmap(NULL, map_size, PROT_READ | PROT_MTE,
+                      MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
+       if (map_ptr == MAP_FAILED)
+               ksft_exit_skip("PROT_MTE not supported with MAP_HUGETLB mappings\n");
+       else
+               munmap(map_ptr, map_size);
+
        /* Set test plan */
        ksft_set_plan(12);