[Devel] [PATCH vz10 1/5] Revert "selftests/mm: remove local __NR_* definitions"

Konstantin Khorenko khorenko at virtuozzo.com
Tue Jun 16 12:25:43 MSK 2026


(kostja at f0)/git/vzkernel.vz10:git describe --contains 9d1483818de4f
kernel-6.12.0-65.el10~6^2

(kostja at f0)/git/vzkernel.vz10:git l tools/testing/selftests/mm/memfd_secret.c
9d1483818de4f Revert "selftests/mm: remove local __NR_* definitions"

=> already in RHEL10.2

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 6/15/26 22:42, Eva Kurchatova wrote:
> From: John Hubbard <jhubbard at nvidia.com>
> 
> This reverts commit a5c6bc590094a1a73cf6fa3f505e1945d2bf2461.
> 
> The general approach described in commit e076eaca5906 ("selftests: break
> the dependency upon local header files") was taken one step too far here:
> it should not have been extended to include the syscall numbers.  This is
> because doing so would require per-arch support in tools/include/uapi, and
> no such support exists.
> 
> This revert fixes two separate reports of test failures, from Dave
> Hansen[1], and Li Wang[2].  An excerpt of Dave's report:
> 
> Before this commit (a5c6bc590094a1a73cf6fa3f505e1945d2bf2461) things are
> fine.  But after, I get:
> 
> 	running PKEY tests for unsupported CPU/OS
> 
> An excerpt of Li's report:
> 
>     I just found that mlock2_() return a wrong value in mlock2-test
> 
> [1] https://lore.kernel.org/dc585017-6740-4cab-a536-b12b37a7582d@intel.com
> [2] https://lore.kernel.org/CAEemH2eW=UMu9+turT2jRie7+6ewUazXmA6kL+VBo3cGDGU6RA@mail.gmail.com
> 
> Link: https://lkml.kernel.org/r/20250214033850.235171-1-jhubbard@nvidia.com
> Fixes: a5c6bc590094 ("selftests/mm: remove local __NR_* definitions")
> Signed-off-by: John Hubbard <jhubbard at nvidia.com>
> Cc: Dave Hansen <dave.hansen at intel.com>
> Cc: Li Wang <liwang at redhat.com>
> Cc: David Hildenbrand <david at redhat.com>
> Cc: Jeff Xu <jeffxu at chromium.org>
> Cc: Andrei Vagin <avagin at google.com>
> Cc: Axel Rasmussen <axelrasmussen at google.com>
> Cc: Christian Brauner <brauner at kernel.org>
> Cc: Kees Cook <kees at kernel.org>
> Cc: Kent Overstreet <kent.overstreet at linux.dev>
> Cc: Liam R. Howlett <Liam.Howlett at oracle.com>
> Cc: Muhammad Usama Anjum <usama.anjum at collabora.com>
> Cc: Peter Xu <peterx at redhat.com>
> Cc: Rich Felker <dalias at libc.org>
> Cc: Shuah Khan <shuah at kernel.org>
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> 
> (cherry picked from commit 0a7565ee6ec31eb16c0476adbfc1af3f2271cb6b)
> Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-134200
> Feature: fix selftests
> ---
>  tools/testing/selftests/mm/hugepage-mremap.c      |  2 +-
>  tools/testing/selftests/mm/ksm_functional_tests.c |  8 +++++++-
>  tools/testing/selftests/mm/memfd_secret.c         | 14 +++++++++++++-
>  tools/testing/selftests/mm/mkdirty.c              |  8 +++++++-
>  tools/testing/selftests/mm/mlock2.h               |  1 -
>  tools/testing/selftests/mm/protection_keys.c      |  2 +-
>  tools/testing/selftests/mm/uffd-common.c          |  4 ++++
>  tools/testing/selftests/mm/uffd-stress.c          | 15 ++++++++++++++-
>  tools/testing/selftests/mm/uffd-unit-tests.c      | 14 +++++++++++++-
>  9 files changed, 60 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/testing/selftests/mm/hugepage-mremap.c b/tools/testing/selftests/mm/hugepage-mremap.c
> index ada9156cc497..c463d1c09c9b 100644
> --- a/tools/testing/selftests/mm/hugepage-mremap.c
> +++ b/tools/testing/selftests/mm/hugepage-mremap.c
> @@ -15,7 +15,7 @@
>  #define _GNU_SOURCE
>  #include <stdlib.h>
>  #include <stdio.h>
> -#include <asm-generic/unistd.h>
> +#include <unistd.h>
>  #include <sys/mman.h>
>  #include <errno.h>
>  #include <fcntl.h> /* Definition of O_* constants */
> diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c b/tools/testing/selftests/mm/ksm_functional_tests.c
> index 66b4e111b5a2..b61803e36d1c 100644
> --- a/tools/testing/selftests/mm/ksm_functional_tests.c
> +++ b/tools/testing/selftests/mm/ksm_functional_tests.c
> @@ -11,7 +11,7 @@
>  #include <string.h>
>  #include <stdbool.h>
>  #include <stdint.h>
> -#include <asm-generic/unistd.h>
> +#include <unistd.h>
>  #include <errno.h>
>  #include <fcntl.h>
>  #include <sys/mman.h>
> @@ -369,6 +369,7 @@ static void test_unmerge_discarded(void)
>  	munmap(map, size);
>  }
>  
> +#ifdef __NR_userfaultfd
>  static void test_unmerge_uffd_wp(void)
>  {
>  	struct uffdio_writeprotect uffd_writeprotect;
> @@ -429,6 +430,7 @@ static void test_unmerge_uffd_wp(void)
>  unmap:
>  	munmap(map, size);
>  }
> +#endif
>  
>  /* Verify that KSM can be enabled / queried with prctl. */
>  static void test_prctl(void)
> @@ -684,7 +686,9 @@ int main(int argc, char **argv)
>  		exit(test_child_ksm());
>  	}
>  
> +#ifdef __NR_userfaultfd
>  	tests++;
> +#endif
>  
>  	ksft_print_header();
>  	ksft_set_plan(tests);
> @@ -696,7 +700,9 @@ int main(int argc, char **argv)
>  	test_unmerge();
>  	test_unmerge_zero_pages();
>  	test_unmerge_discarded();
> +#ifdef __NR_userfaultfd
>  	test_unmerge_uffd_wp();
> +#endif
>  
>  	test_prot_none();
>  
> diff --git a/tools/testing/selftests/mm/memfd_secret.c b/tools/testing/selftests/mm/memfd_secret.c
> index 74c911aa3aea..9a0597310a76 100644
> --- a/tools/testing/selftests/mm/memfd_secret.c
> +++ b/tools/testing/selftests/mm/memfd_secret.c
> @@ -17,7 +17,7 @@
>  
>  #include <stdlib.h>
>  #include <string.h>
> -#include <asm-generic/unistd.h>
> +#include <unistd.h>
>  #include <errno.h>
>  #include <stdio.h>
>  #include <fcntl.h>
> @@ -28,6 +28,8 @@
>  #define pass(fmt, ...) ksft_test_result_pass(fmt, ##__VA_ARGS__)
>  #define skip(fmt, ...) ksft_test_result_skip(fmt, ##__VA_ARGS__)
>  
> +#ifdef __NR_memfd_secret
> +
>  #define PATTERN	0x55
>  
>  static const int prot = PROT_READ | PROT_WRITE;
> @@ -332,3 +334,13 @@ int main(int argc, char *argv[])
>  
>  	ksft_finished();
>  }
> +
> +#else /* __NR_memfd_secret */
> +
> +int main(int argc, char *argv[])
> +{
> +	printf("skip: skipping memfd_secret test (missing __NR_memfd_secret)\n");
> +	return KSFT_SKIP;
> +}
> +
> +#endif /* __NR_memfd_secret */
> diff --git a/tools/testing/selftests/mm/mkdirty.c b/tools/testing/selftests/mm/mkdirty.c
> index 1db134063c38..b8a7efe9204e 100644
> --- a/tools/testing/selftests/mm/mkdirty.c
> +++ b/tools/testing/selftests/mm/mkdirty.c
> @@ -9,7 +9,7 @@
>   */
>  #include <fcntl.h>
>  #include <signal.h>
> -#include <asm-generic/unistd.h>
> +#include <unistd.h>
>  #include <string.h>
>  #include <errno.h>
>  #include <stdlib.h>
> @@ -265,6 +265,7 @@ static void test_pte_mapped_thp(void)
>  	munmap(mmap_mem, mmap_size);
>  }
>  
> +#ifdef __NR_userfaultfd
>  static void test_uffdio_copy(void)
>  {
>  	struct uffdio_register uffdio_register;
> @@ -321,6 +322,7 @@ static void test_uffdio_copy(void)
>  	munmap(dst, pagesize);
>  	free(src);
>  }
> +#endif /* __NR_userfaultfd */
>  
>  int main(void)
>  {
> @@ -333,7 +335,9 @@ int main(void)
>  			       thpsize / 1024);
>  		tests += 3;
>  	}
> +#ifdef __NR_userfaultfd
>  	tests += 1;
> +#endif /* __NR_userfaultfd */
>  
>  	ksft_print_header();
>  	ksft_set_plan(tests);
> @@ -363,7 +367,9 @@ int main(void)
>  	if (thpsize)
>  		test_pte_mapped_thp();
>  	/* Placing a fresh page via userfaultfd may set the PTE dirty. */
> +#ifdef __NR_userfaultfd
>  	test_uffdio_copy();
> +#endif /* __NR_userfaultfd */
>  
>  	err = ksft_get_fail_cnt();
>  	if (err)
> diff --git a/tools/testing/selftests/mm/mlock2.h b/tools/testing/selftests/mm/mlock2.h
> index 1e5731bab499..4417eaa5cfb7 100644
> --- a/tools/testing/selftests/mm/mlock2.h
> +++ b/tools/testing/selftests/mm/mlock2.h
> @@ -3,7 +3,6 @@
>  #include <errno.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> -#include <asm-generic/unistd.h>
>  
>  static int mlock2_(void *start, size_t len, int flags)
>  {
> diff --git a/tools/testing/selftests/mm/protection_keys.c b/tools/testing/selftests/mm/protection_keys.c
> index 4990f7ab4cb7..4fcecfb7b189 100644
> --- a/tools/testing/selftests/mm/protection_keys.c
> +++ b/tools/testing/selftests/mm/protection_keys.c
> @@ -42,7 +42,7 @@
>  #include <sys/wait.h>
>  #include <sys/stat.h>
>  #include <fcntl.h>
> -#include <asm-generic/unistd.h>
> +#include <unistd.h>
>  #include <sys/ptrace.h>
>  #include <setjmp.h>
>  
> diff --git a/tools/testing/selftests/mm/uffd-common.c b/tools/testing/selftests/mm/uffd-common.c
> index 717539eddf98..7ad6ba660c7d 100644
> --- a/tools/testing/selftests/mm/uffd-common.c
> +++ b/tools/testing/selftests/mm/uffd-common.c
> @@ -673,7 +673,11 @@ int uffd_open_dev(unsigned int flags)
>  
>  int uffd_open_sys(unsigned int flags)
>  {
> +#ifdef __NR_userfaultfd
>  	return syscall(__NR_userfaultfd, flags);
> +#else
> +	return -1;
> +#endif
>  }
>  
>  int uffd_open(unsigned int flags)
> diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c
> index a4b83280998a..944d559ade21 100644
> --- a/tools/testing/selftests/mm/uffd-stress.c
> +++ b/tools/testing/selftests/mm/uffd-stress.c
> @@ -33,10 +33,11 @@
>   * pthread_mutex_lock will also verify the atomicity of the memory
>   * transfer (UFFDIO_COPY).
>   */
> -#include <asm-generic/unistd.h>
> +
>  #include "uffd-common.h"
>  
>  uint64_t features;
> +#ifdef __NR_userfaultfd
>  
>  #define BOUNCE_RANDOM		(1<<0)
>  #define BOUNCE_RACINGFAULTS	(1<<1)
> @@ -471,3 +472,15 @@ int main(int argc, char **argv)
>  	       nr_pages, nr_pages_per_cpu);
>  	return userfaultfd_stress();
>  }
> +
> +#else /* __NR_userfaultfd */
> +
> +#warning "missing __NR_userfaultfd definition"
> +
> +int main(void)
> +{
> +	printf("skip: Skipping userfaultfd test (missing __NR_userfaultfd)\n");
> +	return KSFT_SKIP;
> +}
> +
> +#endif /* __NR_userfaultfd */
> diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing/selftests/mm/uffd-unit-tests.c
> index 795bba310151..37c3549075bb 100644
> --- a/tools/testing/selftests/mm/uffd-unit-tests.c
> +++ b/tools/testing/selftests/mm/uffd-unit-tests.c
> @@ -5,11 +5,12 @@
>   *  Copyright (C) 2015-2023  Red Hat, Inc.
>   */
>  
> -#include <asm-generic/unistd.h>
>  #include "uffd-common.h"
>  
>  #include "../../../../mm/gup_test.h"
>  
> +#ifdef __NR_userfaultfd
> +
>  /* The unit test doesn't need a large or random size, make it 32MB for now */
>  #define  UFFD_TEST_MEM_SIZE               (32UL << 20)
>  
> @@ -1558,3 +1559,14 @@ int main(int argc, char *argv[])
>  	return ksft_get_fail_cnt() ? KSFT_FAIL : KSFT_PASS;
>  }
>  
> +#else /* __NR_userfaultfd */
> +
> +#warning "missing __NR_userfaultfd definition"
> +
> +int main(void)
> +{
> +	printf("Skipping %s (missing __NR_userfaultfd)\n", __file__);
> +	return KSFT_SKIP;
> +}
> +
> +#endif /* __NR_userfaultfd */



More information about the Devel mailing list