]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/process_vm_access.c
linux/types.h: enable endian checks for all sparse builds
[karo-tx-linux.git] / mm / process_vm_access.c
index be8dc8d1edb95b34d8c6b7fbf34321e597e981e1..84d0c7eada2b50f2828033334c5a10df7a6a90a5 100644 (file)
@@ -88,7 +88,7 @@ static int process_vm_rw_single_vec(unsigned long addr,
        ssize_t rc = 0;
        unsigned long max_pages_per_loop = PVM_MAX_KMALLOC_PAGES
                / sizeof(struct pages *);
-       unsigned int flags = FOLL_REMOTE;
+       unsigned int flags = 0;
 
        /* Work out address and page range required */
        if (len == 0)
@@ -100,15 +100,19 @@ static int process_vm_rw_single_vec(unsigned long addr,
 
        while (!rc && nr_pages && iov_iter_count(iter)) {
                int pages = min(nr_pages, max_pages_per_loop);
+               int locked = 1;
                size_t bytes;
 
                /*
                 * Get the pages we're interested in.  We must
-                * add FOLL_REMOTE because task/mm might not
+                * access remotely because task/mm might not
                 * current/current->mm
                 */
-               pages = __get_user_pages_unlocked(task, mm, pa, pages,
-                                                 process_pages, flags);
+               down_read(&mm->mmap_sem);
+               pages = get_user_pages_remote(task, mm, pa, pages, flags,
+                                             process_pages, NULL, &locked);
+               if (locked)
+                       up_read(&mm->mmap_sem);
                if (pages <= 0)
                        return -EFAULT;