Messages in this thread | | | Subject | Re: [PATCH v2 3/6] userfaultfd: selftests: modify selftest to use /dev/userfaultfd | From | Shuah Khan <> | Date | Tue, 26 Apr 2022 10:16:18 -0600 |
| |
On 4/22/22 3:29 PM, Axel Rasmussen wrote: > We clearly want to ensure both userfaultfd(2) and /dev/userfaultfd keep > working into the future, so just run the test twice, using each > interface. > > Signed-off-by: Axel Rasmussen <axelrasmussen@google.com> > --- > tools/testing/selftests/vm/userfaultfd.c | 31 ++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c > index 92a4516f8f0d..12ae742a9981 100644 > --- a/tools/testing/selftests/vm/userfaultfd.c > +++ b/tools/testing/selftests/vm/userfaultfd.c > @@ -77,6 +77,9 @@ static int bounces; > #define TEST_SHMEM 3 > static int test_type; > > +/* test using /dev/userfaultfd, instead of userfaultfd(2) */ > +static bool test_dev_userfaultfd; > + > /* exercise the test_uffdio_*_eexist every ALARM_INTERVAL_SECS */ > #define ALARM_INTERVAL_SECS 10 > static volatile bool test_uffdio_copy_eexist = true; > @@ -383,13 +386,31 @@ static void assert_expected_ioctls_present(uint64_t mode, uint64_t ioctls) > } > } > > +static void __userfaultfd_open_dev(void) > +{ > + int fd; > + > + uffd = -1; > + fd = open("/dev/userfaultfd", O_RDWR | O_CLOEXEC); > + if (fd < 0) > + return; > + > + uffd = ioctl(fd, USERFAULTFD_IOC_NEW, > + O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY); > + close(fd); > +} > + > static void userfaultfd_open(uint64_t *features) > { > struct uffdio_api uffdio_api; > > - uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY); > + if (test_dev_userfaultfd) > + __userfaultfd_open_dev(); > + else > + uffd = syscall(__NR_userfaultfd, > + O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY); > if (uffd < 0) > - err("userfaultfd syscall not available in this kernel"); > + err("creating userfaultfd failed");
This isn't an error as in test failure. This will be a skip because of unmet dependencies. Also if this test requires root access, please check for that and make that a skip as well.
> uffd_flags = fcntl(uffd, F_GETFD, NULL); > > uffdio_api.api = UFFD_API; > @@ -1698,6 +1719,12 @@ int main(int argc, char **argv) > } > printf("nr_pages: %lu, nr_pages_per_cpu: %lu\n", > nr_pages, nr_pages_per_cpu); > + > + test_dev_userfaultfd = false; > + if (userfaultfd_stress()) > + return 1; > + > + test_dev_userfaultfd = true; > return userfaultfd_stress(); > } > >
thanks, -- Shuah
| |