uffdio_move
struct uffdio_move uffdio_move;
struct uffdio_move __user *user_uffdio_move;
user_uffdio_move = (struct uffdio_move __user *) arg;
if (copy_from_user(&uffdio_move, user_uffdio_move,
sizeof(uffdio_move)-sizeof(__s64)))
ret = validate_range(mm, uffdio_move.dst, uffdio_move.len);
ret = validate_range(mm, uffdio_move.src, uffdio_move.len);
if (uffdio_move.mode & ~(UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES|
ret = move_pages(ctx, uffdio_move.dst, uffdio_move.src,
uffdio_move.len, uffdio_move.mode);
if (!(uffdio_move.mode & UFFDIO_MOVE_MODE_DONTWAKE)) {
range.start = uffdio_move.dst;
ret = range.len == uffdio_move.len ? 0 : -EAGAIN;
struct uffdio_move)
struct uffdio_move)
struct uffdio_move uffdio_move;
uffdio_move.dst = (unsigned long) gopts->area_dst + offset;
uffdio_move.src = (unsigned long) gopts->area_src + offset;
uffdio_move.len = len;
uffdio_move.mode = UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES;
uffdio_move.move = 0;
if (ioctl(gopts->uffd, UFFDIO_MOVE, &uffdio_move)) {
if (uffdio_move.move != -EEXIST)
(int64_t)uffdio_move.move);
wake_range(gopts->uffd, uffdio_move.dst, len);
} else if (uffdio_move.move != len) {
err("UFFDIO_MOVE error: %"PRId64, (int64_t)uffdio_move.move);