From: Axel Rasmussen Date: Fri, 19 Aug 2022 20:51:59 +0000 (-0700) Subject: userfaultfd: selftests: modify selftest to use /dev/userfaultfd X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1c6721ffa38f794225b1ff04dfb737d4c45af877;p=users%2Fjedix%2Flinux-maple.git userfaultfd: selftests: modify selftest to use /dev/userfaultfd modify selftest to exit with KSFT_SKIP *only* when features are unsupported, exiting with 1 in other error cases, per Mike Link: https://lkml.kernel.org/r/20220819205201.658693-4-axelrasmussen@google.com Signed-off-by: Axel Rasmussen Acked-by: Mike Rapoport Acked-by: Peter Xu Cc: Al Viro Cc: Dave Hansen Cc: Dmitry V. Levin Cc: Gleb Fotengauer-Malinovskiy Cc: Hugh Dickins Cc: Jan Kara Cc: Jonathan Corbet Cc: Mel Gorman Cc: Mike Kravetz Cc: Mike Rapoport Cc: Nadav Amit Cc: Shuah Khan Cc: Shuah Khan Cc: Suren Baghdasaryan Cc: Vlastimil Babka Cc: Zhang Yi Signed-off-by: Andrew Morton --- diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c index cae72867c1733..7be709d9eed07 100644 --- a/tools/testing/selftests/vm/userfaultfd.c +++ b/tools/testing/selftests/vm/userfaultfd.c @@ -402,13 +402,16 @@ static void assert_expected_ioctls_present(uint64_t mode, uint64_t ioctls) static int __userfaultfd_open_dev(void) { - int fd, _uffd = -1; + int fd, _uffd; fd = open("/dev/userfaultfd", O_RDWR | O_CLOEXEC); if (fd < 0) - return -1; + errexit(KSFT_SKIP, "opening /dev/userfaultfd failed"); _uffd = ioctl(fd, USERFAULTFD_IOC_NEW, UFFD_FLAGS); + if (_uffd < 0) + errexit(errno == ENOTTY ? KSFT_SKIP : 1, + "creating userfaultfd failed"); close(fd); return _uffd; } @@ -419,10 +422,12 @@ static void userfaultfd_open(uint64_t *features) if (test_dev_userfaultfd) uffd = __userfaultfd_open_dev(); - else + else { uffd = syscall(__NR_userfaultfd, UFFD_FLAGS); - if (uffd < 0) - errexit(KSFT_SKIP, "creating userfaultfd failed"); + if (uffd < 0) + errexit(errno == ENOSYS ? KSFT_SKIP : 1, + "creating userfaultfd failed"); + } uffd_flags = fcntl(uffd, F_GETFD, NULL); uffdio_api.api = UFFD_API;