printf("\n");
 }
 
-static int __userfaultfd_open_dev(void)
-{
-       int fd, _uffd;
-
-       fd = open("/dev/userfaultfd", O_RDWR | O_CLOEXEC);
-       if (fd < 0)
-               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;
-}
-
 void userfaultfd_open(uint64_t *features)
 {
        struct uffdio_api uffdio_api;
 
        if (test_dev_userfaultfd)
-               uffd = __userfaultfd_open_dev();
-       else {
-               uffd = syscall(__NR_userfaultfd, UFFD_FLAGS);
-               if (uffd < 0)
-                       errexit(errno == ENOSYS ? KSFT_SKIP : 1,
-                               "creating userfaultfd failed");
-       }
+               uffd = uffd_open_dev(UFFD_FLAGS);
+       else
+               uffd = uffd_open_sys(UFFD_FLAGS);
+       if (uffd < 0)
+               err("uffd open failed (dev=%d)", test_dev_userfaultfd);
        uffd_flags = fcntl(uffd, F_GETFD, NULL);
 
        uffdio_api.api = UFFD_API;
 
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <linux/userfaultfd.h>
+#include <sys/syscall.h>
+#include <unistd.h>
 #include "../kselftest.h"
 #include "vm_util.h"
 
 
        return ret;
 }
+
+int uffd_open_dev(unsigned int flags)
+{
+       int fd, uffd;
+
+       fd = open("/dev/userfaultfd", O_RDWR | O_CLOEXEC);
+       if (fd < 0)
+               return fd;
+       uffd = ioctl(fd, USERFAULTFD_IOC_NEW, flags);
+       close(fd);
+
+       return uffd;
+}
+
+int uffd_open_sys(unsigned int flags)
+{
+#ifdef __NR_userfaultfd
+       return syscall(__NR_userfaultfd, flags);
+#else
+       return -1;
+#endif
+}
 
 int uffd_register(int uffd, void *addr, uint64_t len,
                  bool miss, bool wp, bool minor);
 int uffd_unregister(int uffd, void *addr, uint64_t len);
+int uffd_open_dev(unsigned int flags);
+int uffd_open_sys(unsigned int flags);
 
 /*
  * On ppc64 this will only work with radix 2M hugepage size