uffdio_copy
struct uffdio_copy uffdio_copy;
struct uffdio_copy __user *user_uffdio_copy;
user_uffdio_copy = (struct uffdio_copy __user *) arg;
if (copy_from_user(&uffdio_copy, user_uffdio_copy,
sizeof(uffdio_copy)-sizeof(__s64)))
ret = validate_unaligned_range(ctx->mm, uffdio_copy.src,
uffdio_copy.len);
ret = validate_range(ctx->mm, uffdio_copy.dst, uffdio_copy.len);
if (uffdio_copy.mode & ~(UFFDIO_COPY_MODE_DONTWAKE|UFFDIO_COPY_MODE_WP))
if (uffdio_copy.mode & UFFDIO_COPY_MODE_WP)
ret = mfill_atomic_copy(ctx, uffdio_copy.dst, uffdio_copy.src,
uffdio_copy.len, flags);
if (!(uffdio_copy.mode & UFFDIO_COPY_MODE_DONTWAKE)) {
range.start = uffdio_copy.dst;
ret = range.len == uffdio_copy.len ? 0 : -EAGAIN;
struct uffdio_copy)
struct uffdio_copy)
struct uffdio_copy copy;
struct uffdio_copy copy;
struct uffdio_copy uffdio_copy;
uffdio_copy.dst = (unsigned long) dst;
uffdio_copy.src = (unsigned long) src;
uffdio_copy.len = pagesize;
uffdio_copy.mode = 0;
if (ioctl(uffd, UFFDIO_COPY, &uffdio_copy)) {
static void retry_copy_page(uffd_global_test_opts_t *gopts, struct uffdio_copy *uffdio_copy,
&uffdio_copy->dst,
uffdio_copy->len,
if (ioctl(gopts->uffd, UFFDIO_COPY, uffdio_copy)) {
if (uffdio_copy->copy != -EEXIST)
(int64_t)uffdio_copy->copy);
(int64_t)uffdio_copy->copy);
struct uffdio_copy uffdio_copy;
uffdio_copy.dst = (unsigned long) gopts->area_dst + offset;
uffdio_copy.src = (unsigned long) gopts->area_src + offset;
uffdio_copy.len = gopts->page_size;
uffdio_copy.mode = UFFDIO_COPY_MODE_WP;
uffdio_copy.mode = 0;
uffdio_copy.copy = 0;
if (ioctl(gopts->uffd, UFFDIO_COPY, &uffdio_copy)) {
if (uffdio_copy.copy != -EEXIST)
(int64_t)uffdio_copy.copy);
wake_range(gopts->uffd, uffdio_copy.dst, gopts->page_size);
} else if (uffdio_copy.copy != gopts->page_size) {
err("UFFDIO_COPY error: %"PRId64, (int64_t)uffdio_copy.copy);
retry_copy_page(gopts, &uffdio_copy, offset);
uffdio_copy.dst = msg.arg.pagefault.address & ~(pagesize-1);
offset = (char *) uffdio_copy.dst - uf_mem;
uffdio_copy.src = (unsigned long) &backing_mem[offset];
uffdio_copy.len = pagesize;
uffdio_copy.mode = 0;
uffdio_copy.copy = 0;
if (ioctl(uffd, UFFDIO_COPY, &uffdio_copy) == -1) {
struct uffdio_copy uffdio_copy;
struct uffdio_copy req;