Lines Matching defs:uffd
8 #include "uffd-common.h"
72 /* Arguments to be passed over to each uffd unit test */
126 * return 1 even if some test failed as long as uffd supported, because in
127 * that case we still want to proceed with the rest uffd unit tests.
132 int uffd;
138 uffd = uffd_open_dev(UFFD_FLAGS);
140 uffd = uffd_open_sys(UFFD_FLAGS);
141 if (uffd < 0) {
149 if (ioctl(uffd, UFFDIO_API, &uffdio_api) == 0) {
157 if (ioctl(uffd, UFFDIO_API, &uffdio_api) == 0) {
165 if (ioctl(uffd, UFFDIO_API, &uffdio_api)) {
172 if (ioctl(uffd, UFFDIO_API, &uffdio_api) == 0) {
173 uffd_test_fail("UFFDIO_API should reject initialized uffd");
179 close(uffd);
180 /* We have a valid uffd handle */
236 err("pagemap uffd-wp bit error: 0x%"PRIx64, value); \
307 static int pagemap_test_fork(int uffd, bool with_event, bool test_pin)
309 fork_event_args args = { .parent_uffd = uffd, .child_uffd = -1 };
340 * After fork(), we should handle uffd-wp bit differently:
357 err("Didn't receive child uffd");
369 if (uffd_register(uffd, area_dst, nr_pages * page_size,
376 wp_range(uffd, (uint64_t)area_dst, page_size, true);
381 wp_range(uffd, (uint64_t)area_dst, page_size, false);
386 wp_range(uffd, (uint64_t)area_dst, page_size, true);
401 wp_range(uffd, (uint64_t)area_dst, page_size, true);
416 if (uffd_register(uffd, area_dst, nr_pages * page_size,
424 wp_range(uffd, (uint64_t)area_dst, page_size, true);
427 if (pagemap_test_fork(uffd, with_event, false)) {
428 uffd_test_fail("Detected %s uffd-wp bit in child in present pte",
458 if (pagemap_test_fork(uffd, with_event, false)) {
459 uffd_test_fail("Detected %s uffd-wp bit in child in zapped pte",
465 wp_range(uffd, (uint64_t)area_dst, page_size, false);
475 if (uffd_unregister(uffd, area_dst, nr_pages * page_size))
496 if (uffd_register(uffd, area_dst, page_size, false, true, false))
503 wp_range(uffd, (uint64_t)area_dst, page_size, true);
513 uffd_unregister(uffd, area_dst, page_size);
517 if (pagemap_test_fork(uffd, with_event, false)) {
518 uffd_test_fail("Detected %s uffd-wp bit in early CoW of fork()",
530 if (pagemap_test_fork(uffd, with_event, true)) {
531 uffd_test_fail("Detected %s uffd-wp bit when RO pin",
537 if (uffd_unregister(uffd, area_dst, page_size))
580 if (uffd_register(uffd, area_dst_alias, nr_pages * page_size,
581 /* NOTE! MADV_COLLAPSE may not work with uffd-wp */
622 * This won't cause uffd-fault - it purely just makes sure there
716 if (copy_page(uffd, offset, wp))
721 wp_range(uffd,
788 fcntl(uffd, F_SETFL, uffd_flags | O_NONBLOCK);
790 if (uffd_register(uffd, area_dst, nr_pages * page_size,
847 fcntl(uffd, F_SETFL, uffd_flags | O_NONBLOCK);
848 if (uffd_register(uffd, area_dst, nr_pages * page_size,
941 uffd_register_detect_zeropage(int uffd, void *addr, uint64_t len)
945 if (uffd_register_with_ioctls(uffd, addr, len, true,
958 has_zeropage = uffd_register_detect_zeropage(uffd, area_dst, page_size);
961 uffd_register_detect_zeropage(uffd, area_dst_alias, page_size);
963 if (do_uffdio_zeropage(uffd, has_zeropage))
968 if (uffd_unregister(uffd, area_dst, page_size))
971 if (area_dst_alias && uffd_unregister(uffd, area_dst_alias, page_size))
977 static void uffd_register_poison(int uffd, void *addr, uint64_t len)
982 if (uffd_register_with_ioctls(uffd, addr, len, true,
990 static void do_uffdio_poison(int uffd, unsigned long offset)
999 ret = ioctl(uffd, UFFDIO_POISON, &uffdio_poison);
1025 copy_page(uffd, offset, false);
1027 do_uffdio_poison(uffd, offset);
1047 fcntl(uffd, F_SETFL, uffd_flags | O_NONBLOCK);
1049 uffd_register_poison(uffd, area_dst, poison_pages * page_size);
1112 if (move_page(uffd, offset, len))
1146 if (uffd_register(uffd, area_dst, nr_pages * page_size,
1372 if (uffd_register(uffd, area_dst, nr_pages * page_size,
1391 if (!uffdio_mmap_changing_test_copy(uffd))
1394 if (!uffdio_mmap_changing_test_zeropage(uffd))
1397 if (!uffdio_mmap_changing_test_move(uffd))
1400 if (!uffdio_mmap_changing_test_poison(uffd))
1403 if (!uffdio_mmap_changing_test_continue(uffd))
1410 uffd_consume_message(uffd);
1465 ret = uffd_register_with_ioctls(uffd, area_dst, page_size,
1496 if (uffd_unregister(uffd, area_dst, page_size))
1565 /* when set, child process should inherit uffd-wp bits */
1581 /* when set, child process should inherit uffd-wp bits */