Merge tag 'tty-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
[linux-block.git] / tools / testing / selftests / vm / userfaultfd.c
index 297f250c1d9564023a67e4fa72a0de02993088a3..7f22844ed7040e6b9bfcea2982f715bfb9c5e3ba 100644 (file)
@@ -93,10 +93,8 @@ static volatile bool test_uffdio_zeropage_eexist = true;
 static bool test_uffdio_wp = true;
 /* Whether to test uffd minor faults */
 static bool test_uffdio_minor = false;
-
 static bool map_shared;
-static int shm_fd;
-static int huge_fd;
+static int mem_fd;
 static unsigned long long *count_verify;
 static int uffd = -1;
 static int uffd_flags, finished, *pipefd;
@@ -143,7 +141,7 @@ const char *examples =
     "# Run hugetlb memory test on 256MiB region with 50 bounces:\n"
     "./userfaultfd hugetlb 256 50\n\n"
     "# Run the same hugetlb test but using shared file:\n"
-    "./userfaultfd hugetlb_shared 256 50 /dev/hugepages/hugefile\n\n"
+    "./userfaultfd hugetlb_shared 256 50\n\n"
     "# 10MiB-~6GiB 999 bounces anonymous test, "
     "continue forever unless an error triggers\n"
     "while ./userfaultfd anon $[RANDOM % 6000 + 10] 999; do true; done\n\n";
@@ -260,35 +258,21 @@ static void hugetlb_release_pages(char *rel_area)
 
 static void hugetlb_allocate_area(void **alloc_area, bool is_src)
 {
+       off_t size = nr_pages * page_size;
+       off_t offset = is_src ? 0 : size;
        void *area_alias = NULL;
        char **alloc_area_alias;
 
-       if (!map_shared)
-               *alloc_area = mmap(NULL,
-                       nr_pages * page_size,
-                       PROT_READ | PROT_WRITE,
-                       MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB |
-                               (is_src ? 0 : MAP_NORESERVE),
-                       -1,
-                       0);
-       else
-               *alloc_area = mmap(NULL,
-                       nr_pages * page_size,
-                       PROT_READ | PROT_WRITE,
-                       MAP_SHARED |
-                               (is_src ? 0 : MAP_NORESERVE),
-                       huge_fd,
-                       is_src ? 0 : nr_pages * page_size);
+       *alloc_area = mmap(NULL, size, PROT_READ | PROT_WRITE,
+                          (map_shared ? MAP_SHARED : MAP_PRIVATE) |
+                          (is_src ? 0 : MAP_NORESERVE),
+                          mem_fd, offset);
        if (*alloc_area == MAP_FAILED)
                err("mmap of hugetlbfs file failed");
 
        if (map_shared) {
-               area_alias = mmap(NULL,
-                       nr_pages * page_size,
-                       PROT_READ | PROT_WRITE,
-                       MAP_SHARED,
-                       huge_fd,
-                       is_src ? 0 : nr_pages * page_size);
+               area_alias = mmap(NULL, size, PROT_READ | PROT_WRITE,
+                                 MAP_SHARED, mem_fd, offset);
                if (area_alias == MAP_FAILED)
                        err("mmap of hugetlb file alias failed");
        }
@@ -334,14 +318,14 @@ static void shmem_allocate_area(void **alloc_area, bool is_src)
        }
 
        *alloc_area = mmap(p, bytes, PROT_READ | PROT_WRITE, MAP_SHARED,
-                          shm_fd, offset);
+                          mem_fd, offset);
        if (*alloc_area == MAP_FAILED)
                err("mmap of memfd failed");
        if (test_collapse && *alloc_area != p)
                err("mmap of memfd failed at %p", p);
 
        area_alias = mmap(p_alias, bytes, PROT_READ | PROT_WRITE, MAP_SHARED,
-                         shm_fd, offset);
+                         mem_fd, offset);
        if (area_alias == MAP_FAILED)
                err("mmap of memfd alias failed");
        if (test_collapse && area_alias != p_alias)
@@ -1841,21 +1825,17 @@ int main(int argc, char **argv)
        }
        nr_pages = nr_pages_per_cpu * nr_cpus;
 
-       if (test_type == TEST_HUGETLB && map_shared) {
-               if (argc < 5)
-                       usage();
-               huge_fd = open(argv[4], O_CREAT | O_RDWR, 0755);
-               if (huge_fd < 0)
-                       err("Open of %s failed", argv[4]);
-               if (ftruncate(huge_fd, 0))
-                       err("ftruncate %s to size 0 failed", argv[4]);
-       } else if (test_type == TEST_SHMEM) {
-               shm_fd = memfd_create(argv[0], 0);
-               if (shm_fd < 0)
+       if (test_type == TEST_SHMEM || test_type == TEST_HUGETLB) {
+               unsigned int memfd_flags = 0;
+
+               if (test_type == TEST_HUGETLB)
+                       memfd_flags = MFD_HUGETLB;
+               mem_fd = memfd_create(argv[0], memfd_flags);
+               if (mem_fd < 0)
                        err("memfd_create");
-               if (ftruncate(shm_fd, nr_pages * page_size * 2))
+               if (ftruncate(mem_fd, nr_pages * page_size * 2))
                        err("ftruncate");
-               if (fallocate(shm_fd,
+               if (fallocate(mem_fd,
                              FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0,
                              nr_pages * page_size * 2))
                        err("fallocate");