uffdio_zeropage
struct uffdio_zeropage uffdio_zeropage;
struct uffdio_zeropage __user *user_uffdio_zeropage;
user_uffdio_zeropage = (struct uffdio_zeropage __user *) arg;
if (copy_from_user(&uffdio_zeropage, user_uffdio_zeropage,
sizeof(uffdio_zeropage)-sizeof(__s64)))
ret = validate_range(ctx->mm, uffdio_zeropage.range.start,
uffdio_zeropage.range.len);
if (uffdio_zeropage.mode & ~UFFDIO_ZEROPAGE_MODE_DONTWAKE)
ret = mfill_atomic_zeropage(ctx, uffdio_zeropage.range.start,
uffdio_zeropage.range.len);
if (!(uffdio_zeropage.mode & UFFDIO_ZEROPAGE_MODE_DONTWAKE)) {
range.start = uffdio_zeropage.range.start;
ret = range.len == uffdio_zeropage.range.len ? 0 : -EAGAIN;
struct uffdio_zeropage)
struct uffdio_zeropage)
struct uffdio_zeropage *uffdio_zeropage)
uffd_test_ops->alias_mapping(gopts, &uffdio_zeropage->range.start,
uffdio_zeropage->range.len,
if (ioctl(gopts->uffd, UFFDIO_ZEROPAGE, uffdio_zeropage)) {
if (uffdio_zeropage->zeropage != -EEXIST)
(int64_t)uffdio_zeropage->zeropage);
(int64_t)uffdio_zeropage->zeropage);
struct uffdio_zeropage uffdio_zeropage = { 0 };
uffdio_zeropage.range.start = (unsigned long) gopts->area_dst;
uffdio_zeropage.range.len = gopts->page_size;
uffdio_zeropage.mode = 0;
ret = ioctl(gopts->uffd, UFFDIO_ZEROPAGE, &uffdio_zeropage);
res = uffdio_zeropage.zeropage;
retry_uffdio_zeropage(gopts, &uffdio_zeropage);