]> git.hungrycats.org Git - linux/commitdiff
selftests/arm64: Print missing MTE TAP headers
authorMuhammad Usama Anjum <usama.anjum@arm.com>
Tue, 25 Aug 2026 11:18:34 +0000 (12:18 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Sep 2026 11:36:14 +0000 (13:36 +0200)
[ Upstream commit 8d2237e9d6902e234bb89aabb9cd6a9e91357223 ]

Most MTE tests set a TAP plan and emit results without first printing
the TAP version header. Direct execution therefore starts with a plan
such as "1..20" instead of "TAP version 13".

The problem is particularly visible in the GCR_EL1 context-switch test.
It prints its plan before forking 1,024 child processes. When stdout is
fully buffered, the plan remains in the stdio buffer. Each child inherits
the pending "1..1" line and flushes its copy from exit(), producing
repeated plan lines.

ksft_print_header() prints the TAP header and enables line buffering.
Call it in every MTE test that is missing it. In the GCR_EL1 test, call
it before the plan so the plan is flushed before the children are
forked. In the remaining tests, call it before setup and prerequisite
checks so early failures and whole-test skips also retain the header.

Fixes: 29f080881601 ("kselftest/arm64: check GCR_EL1 after context switch")
Signed-off-by: Muhammad Usama Anjum <usama.anjum@arm.com>
Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Reviewed-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/arm64/mte/check_buffer_fill.c
tools/testing/selftests/arm64/mte/check_child_memory.c
tools/testing/selftests/arm64/mte/check_gcr_el1_cswitch.c
tools/testing/selftests/arm64/mte/check_hugetlb_options.c
tools/testing/selftests/arm64/mte/check_ksm_options.c
tools/testing/selftests/arm64/mte/check_mmap_options.c
tools/testing/selftests/arm64/mte/check_tags_inclusion.c
tools/testing/selftests/arm64/mte/check_user_mem.c

index ff4e0750334936e442f22327f89141d81cfd965d..039b1d7d856637f9a60b4a5523659452baa9479f 100644 (file)
@@ -406,6 +406,8 @@ int main(int argc, char *argv[])
        size_t page_size = getpagesize();
        int item = ARRAY_SIZE(sizes);
 
+       ksft_print_header();
+
        sizes[item - 3] = page_size - 1;
        sizes[item - 2] = page_size;
        sizes[item - 1] = page_size + 1;
index 5e97ee792e4d2e4110f0dd2451794239dec490f2..e6a8acca2a9411c93865cb62dd93b6de936c0fd1 100644 (file)
@@ -146,6 +146,8 @@ int main(int argc, char *argv[])
        int err;
        int item = ARRAY_SIZE(sizes);
 
+       ksft_print_header();
+
        page_size = getpagesize();
        if (!page_size) {
                ksft_print_msg("ERR: Unable to get page size\n");
index 325bca0de0f6e147e130da07604fc1c08b2d3e11..d23f154d3288c51d30bf640b2d8ca29bb3835115 100644 (file)
@@ -131,6 +131,7 @@ int main(int argc, char *argv[])
        if (err)
                return err;
 
+       ksft_print_header();
        ksft_set_plan(1);
 
        evaluate_test(mte_gcr_fork_test(),
index aad1234c7e0feb4674af40a07ace308261c30b67..23e4a7a9950c1f6e1c4e2eeba69034fb708a2d23 100644 (file)
@@ -230,6 +230,8 @@ int main(int argc, char *argv[])
        void *map_ptr;
        unsigned long map_size;
 
+       ksft_print_header();
+
        err = mte_default_setup();
        if (err)
                return err;
index 0cf5faef172481d931e13962c131680967772a74..866f0929b66478ebcd62331b7cefb6847dd0c29a 100644 (file)
@@ -132,6 +132,8 @@ int main(int argc, char *argv[])
 {
        int err;
 
+       ksft_print_header();
+
        err = mte_default_setup();
        if (err)
                return err;
index c100af3012cbb9f3cdbf3e1f931436c230fec58a..492f2cd41f43b7224eaf18779de4ea16a700086f 100644 (file)
@@ -945,6 +945,8 @@ int main(int argc, char *argv[])
                },
        };
 
+       ksft_print_header();
+
        err = mte_default_setup();
        if (err)
                return err;
index 4b764f2a818576bd5d763096cd57c37b01763615..6b4fa6705d7c1be69452a90009ad7bf29abbde3e 100644 (file)
@@ -175,6 +175,8 @@ int main(int argc, char *argv[])
 {
        int err;
 
+       ksft_print_header();
+
        err = mte_default_setup();
        if (err)
                return err;
index fb7936c4e09785bd30d8fa154a5c0ac47608ff3c..af343aa617323d8d4c33c84f7d2d1a82ac5d99c1 100644 (file)
@@ -201,6 +201,8 @@ int main(int argc, char *argv[])
        int tag_offsets[] = {page_sz, MT_GRANULE_SIZE};
        char test_name[TEST_NAME_MAX];
 
+       ksft_print_header();
+
        page_sz = getpagesize();
        if (!page_sz) {
                ksft_print_msg("ERR: Unable to get page size\n");