On 4/29/26 2:12 AM, Mike Rapoport wrote:
> From: "Mike Rapoport (Microsoft)" <[email protected]>
> 
> Convert protection_keys test to use kselftest framework for reporting
> and tracking successful and failing runs.
> 
> Adjust dprintf0() printouts to use "#" in the beginning of the line for
> TAP compatibility.
> 
> Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>

I have run the test before and after applying the patch. It correctly
converts the test output into KTAP format.

Tested-by: Sarthak Sharma <[email protected]>

> ---
>  tools/testing/selftests/mm/pkey-helpers.h    |  6 +++--
>  tools/testing/selftests/mm/protection_keys.c | 26 +++++++++++---------
>  2 files changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/testing/selftests/mm/pkey-helpers.h 
> b/tools/testing/selftests/mm/pkey-helpers.h
> index 7c29f075e40b..ae010b075417 100644
> --- a/tools/testing/selftests/mm/pkey-helpers.h
> +++ b/tools/testing/selftests/mm/pkey-helpers.h
> @@ -71,10 +71,12 @@ static inline void sigsafe_printf(const char *format, ...)
>  extern void abort_hooks(void);
>  #define pkey_assert(condition) do {          \
>       if (!(condition)) {                     \
> -             dprintf0("assert() at %s::%d test_nr: %d iteration: %d\n", \
> +             dprintf0("# assert() at %s::%d test_nr: %d iteration: %d\n", \
>                               __FILE__, __LINE__,     \
>                               test_nr, iteration_nr); \
> -             dprintf0("errno at assert: %d", errno); \
> +             dprintf0("# errno at assert: %d\n", errno);     \
> +             ksft_test_result_fail("test %d (iteration %d)\n",       \
> +                                   test_nr, iteration_nr);           \
>               abort_hooks();                  \
>               exit(__LINE__);                 \
>       }                                       \
> diff --git a/tools/testing/selftests/mm/protection_keys.c 
> b/tools/testing/selftests/mm/protection_keys.c
> index 80c6124e8378..d617b41dda6b 100644
> --- a/tools/testing/selftests/mm/protection_keys.c
> +++ b/tools/testing/selftests/mm/protection_keys.c
> @@ -136,6 +136,7 @@ static void tracing_off(void)
>  
>  void abort_hooks(void)
>  {
> +     fflush(stdout);
>       fprintf(stderr, "running %s()...\n", __func__);
>       tracing_off();
>  #ifdef SLEEP_ON_ABORT
> @@ -370,8 +371,8 @@ static void signal_handler(int signum, siginfo_t *si, 
> void *vucontext)
>       if ((si->si_code == SEGV_MAPERR) ||
>           (si->si_code == SEGV_ACCERR) ||
>           (si->si_code == SEGV_BNDERR)) {
> -             printf("non-PK si_code, exiting...\n");
> -             exit(4);
> +             dprintf0("# non-PK si_code: %d, exiting...\n", si->si_code);
> +             exit(1);
>       }
>  
>       si_pkey_ptr = siginfo_get_pkey_ptr(si);
> @@ -719,7 +720,7 @@ static void setup_hugetlbfs(void)
>       long hpagesz_mb;
>  
>       if (geteuid() != 0) {
> -             fprintf(stderr, "WARNING: not run as root, can not do hugetlb 
> test\n");
> +             ksft_print_msg("WARNING: not run as root, can not do hugetlb 
> test\n");
>               return;
>       }
>  
> @@ -855,7 +856,7 @@ void expected_pkey_fault(int pkey)
>  
>  #define do_not_expect_pkey_fault(msg)        do {                    \
>       if (last_pkey_faults != pkey_faults)                    \
> -             dprintf0("unexpected PKey fault: %s\n", msg);   \
> +             dprintf0("# unexpected PKey fault: %s\n", msg); \
>       pkey_assert(last_pkey_faults == pkey_faults);           \
>  } while (0)
>  
> @@ -1753,7 +1754,7 @@ static void run_tests_once(void)
>               tracing_off();
>               close_test_fds();
>  
> -             printf("test %s PASSED (iteration %d)\n", 
> pkey_tests[test_nr].name, iteration_nr);
> +             ksft_test_result_pass("test %s (iteration %d)\n", 
> pkey_tests[test_nr].name, iteration_nr);
>               dprintf1("======================\n\n");
>       }
>       iteration_nr++;
> @@ -1773,27 +1774,30 @@ int main(void)
>  
>       setup_handlers();
>  
> -     printf("has pkeys: %d\n", pkeys_supported);
> +     ksft_print_header();
>  
>       if (!pkeys_supported) {
>               int size = PAGE_SIZE;
>               int *ptr;
>  
> -             printf("running PKEY tests for unsupported CPU/OS\n");
> +             ksft_set_plan(1);
> +             ksft_print_msg("running PKEY tests for unsupported CPU/OS\n");
>  
>               ptr  = mmap(NULL, size, PROT_NONE, MAP_ANONYMOUS|MAP_PRIVATE, 
> -1, 0);
>               assert(ptr != (void *)-1);
>               test_mprotect_pkey_on_unsupported_cpu(ptr, 1);
> -             exit(0);
> +             ksft_test_result_pass("pkey on unsupported CPU/OS\n");
> +             ksft_finished();
>       }
>  
> +     ksft_set_plan(ARRAY_SIZE(pkey_tests) * nr_iterations);
> +
>       pkey_setup_shadow();
> -     printf("startup pkey_reg: %016llx\n", read_pkey_reg());
> +     ksft_print_msg("startup pkey_reg: %016llx\n", read_pkey_reg());
>       setup_hugetlbfs();
>  
>       while (nr_iterations-- > 0)
>               run_tests_once();
>  
> -     printf("done (all tests OK)\n");
> -     return 0;
> +     ksft_finished();
>  }


Reply via email to