Commit 12c0f452 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

uffd: Unify page handling in normal and remaining modes (v2)

This run away from previous set :) Two routines are now
identical, only page-read flags differ.

v2: Keep the uffd_hanle_pages() name

travis-ci: success for Some more cleanups over uffd.c (rev3)
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
parent e82f03e1
...@@ -619,7 +619,7 @@ static int uffd_seek_or_zero_pages(struct lazy_pages_info *lpi, __u64 address, ...@@ -619,7 +619,7 @@ static int uffd_seek_or_zero_pages(struct lazy_pages_info *lpi, __u64 address,
return 1; return 1;
} }
static int uffd_handle_pages(struct lazy_pages_info *lpi, __u64 address, int nr) static int uffd_handle_pages(struct lazy_pages_info *lpi, __u64 address, int nr, unsigned flags)
{ {
int ret; int ret;
...@@ -627,7 +627,7 @@ static int uffd_handle_pages(struct lazy_pages_info *lpi, __u64 address, int nr) ...@@ -627,7 +627,7 @@ static int uffd_handle_pages(struct lazy_pages_info *lpi, __u64 address, int nr)
if (ret <= 0) if (ret <= 0)
return ret; return ret;
ret = lpi->pr.read_pages(&lpi->pr, address, nr, lpi->buf, 0); ret = lpi->pr.read_pages(&lpi->pr, address, nr, lpi->buf, flags);
if (ret <= 0) { if (ret <= 0) {
pr_err("%d: failed reading pages at %llx\n", lpi->pid, address); pr_err("%d: failed reading pages at %llx\n", lpi->pid, address);
return ret; return ret;
...@@ -648,7 +648,7 @@ static int handle_remaining_pages(struct lazy_pages_info *lpi) ...@@ -648,7 +648,7 @@ static int handle_remaining_pages(struct lazy_pages_info *lpi)
list_for_each_entry(lazy_iov, &lpi->iovs, l) { list_for_each_entry(lazy_iov, &lpi->iovs, l) {
nr_pages = lazy_iov->len / PAGE_SIZE; nr_pages = lazy_iov->len / PAGE_SIZE;
err = uffd_handle_pages(lpi, lazy_iov->base, nr_pages); err = uffd_handle_pages(lpi, lazy_iov->base, nr_pages, 0);
if (err < 0) { if (err < 0) {
pr_err("Error during UFFD copy\n"); pr_err("Error during UFFD copy\n");
return -1; return -1;
...@@ -658,23 +658,6 @@ static int handle_remaining_pages(struct lazy_pages_info *lpi) ...@@ -658,23 +658,6 @@ static int handle_remaining_pages(struct lazy_pages_info *lpi)
return 0; return 0;
} }
static int handle_page_fault(struct lazy_pages_info *lpi, __u64 address, int nr)
{
int ret;
ret = uffd_seek_or_zero_pages(lpi, address, nr);
if (ret <= 0)
return ret;
ret = lpi->pr.read_pages(&lpi->pr, address, nr, lpi->buf, PR_ASYNC | PR_ASAP);
if (ret <= 0) {
pr_err("%d: failed reading pages at %llx\n", lpi->pid, address);
return ret;
}
return 0;
}
static int handle_user_fault(struct lazy_pages_fd *lpfd) static int handle_user_fault(struct lazy_pages_fd *lpfd)
{ {
struct lazy_pages_info *lpi; struct lazy_pages_info *lpi;
...@@ -720,7 +703,7 @@ static int handle_user_fault(struct lazy_pages_fd *lpfd) ...@@ -720,7 +703,7 @@ static int handle_user_fault(struct lazy_pages_fd *lpfd)
} }
#endif #endif
ret = handle_page_fault(lpi, address, 1); ret = uffd_handle_pages(lpi, address, 1, PR_ASYNC | PR_ASAP);
if (ret < 0) { if (ret < 0) {
pr_err("Error during regular page copy\n"); pr_err("Error during regular page copy\n");
return -1; return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment