summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Hansen <dave.hansen@linux.intel.com>2016-02-12 16:01:56 -0500
committerIngo Molnar <mingo@kernel.org>2016-02-16 04:11:12 -0500
commitd4edcf0d56958db0aca0196314ca38a5e730ea92 (patch)
treecf22f82e4768f9db3b7b59491c5188e3d725ff9a
parentcde70140fed8429acf7a14e2e2cbd3e329036653 (diff)
mm/gup: Switch all callers of get_user_pages() to not pass tsk/mm
We will soon modify the vanilla get_user_pages() so it can no longer be used on mm/tasks other than 'current/current->mm', which is by far the most common way it is called. For now, we allow the old-style calls, but warn when they are used. (implemented in previous patch) This patch switches all callers of: get_user_pages() get_user_pages_unlocked() get_user_pages_locked() to stop passing tsk/mm so they will no longer see the warnings. Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Dave Hansen <dave@sr71.net> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: jack@suse.cz Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/20160212210156.113E9407@viggo.jf.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/cris/arch-v32/drivers/cryptocop.c8
-rw-r--r--arch/ia64/kernel/err_inject.c3
-rw-r--r--arch/mips/mm/gup.c3
-rw-r--r--arch/s390/mm/gup.c4
-rw-r--r--arch/sh/mm/gup.c2
-rw-r--r--arch/sparc/mm/gup.c2
-rw-r--r--arch/x86/mm/gup.c2
-rw-r--r--arch/x86/mm/mpx.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c3
-rw-r--r--drivers/gpu/drm/radeon/radeon_ttm.c3
-rw-r--r--drivers/gpu/drm/via/via_dmablit.c3
-rw-r--r--drivers/infiniband/core/umem.c2
-rw-r--r--drivers/infiniband/hw/mthca/mthca_memfree.c3
-rw-r--r--drivers/infiniband/hw/qib/qib_user_pages.c3
-rw-r--r--drivers/infiniband/hw/usnic/usnic_uiom.c2
-rw-r--r--drivers/media/pci/ivtv/ivtv-udma.c4
-rw-r--r--drivers/media/pci/ivtv/ivtv-yuv.c10
-rw-r--r--drivers/media/v4l2-core/videobuf-dma-sg.c3
-rw-r--r--drivers/misc/mic/scif/scif_rma.c2
-rw-r--r--drivers/misc/sgi-gru/grufault.c3
-rw-r--r--drivers/scsi/st.c2
-rw-r--r--drivers/video/fbdev/pvr2fb.c4
-rw-r--r--drivers/virt/fsl_hypervisor.c5
-rw-r--r--mm/frame_vector.c2
-rw-r--r--mm/gup.c6
-rw-r--r--mm/ksm.c2
-rw-r--r--mm/mempolicy.c6
-rw-r--r--net/ceph/pagevec.c2
-rw-r--r--virt/kvm/kvm_main.c10
29 files changed, 44 insertions, 64 deletions
diff --git a/arch/cris/arch-v32/drivers/cryptocop.c b/arch/cris/arch-v32/drivers/cryptocop.c
index 877da1908234..617645d21b20 100644
--- a/arch/cris/arch-v32/drivers/cryptocop.c
+++ b/arch/cris/arch-v32/drivers/cryptocop.c
@@ -2719,9 +2719,7 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
2719 /* Acquire the mm page semaphore. */ 2719 /* Acquire the mm page semaphore. */
2720 down_read(&current->mm->mmap_sem); 2720 down_read(&current->mm->mmap_sem);
2721 2721
2722 err = get_user_pages(current, 2722 err = get_user_pages((unsigned long int)(oper.indata + prev_ix),
2723 current->mm,
2724 (unsigned long int)(oper.indata + prev_ix),
2725 noinpages, 2723 noinpages,
2726 0, /* read access only for in data */ 2724 0, /* read access only for in data */
2727 0, /* no force */ 2725 0, /* no force */
@@ -2736,9 +2734,7 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
2736 } 2734 }
2737 noinpages = err; 2735 noinpages = err;
2738 if (oper.do_cipher){ 2736 if (oper.do_cipher){
2739 err = get_user_pages(current, 2737 err = get_user_pages((unsigned long int)oper.cipher_outdata,
2740 current->mm,
2741 (unsigned long int)oper.cipher_outdata,
2742 nooutpages, 2738 nooutpages,
2743 1, /* write access for out data */ 2739 1, /* write access for out data */
2744 0, /* no force */ 2740 0, /* no force */
diff --git a/arch/ia64/kernel/err_inject.c b/arch/ia64/kernel/err_inject.c
index 0c161ed6d18e..09f845793d12 100644
--- a/arch/ia64/kernel/err_inject.c
+++ b/arch/ia64/kernel/err_inject.c
@@ -142,8 +142,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr,
142 u64 virt_addr=simple_strtoull(buf, NULL, 16); 142 u64 virt_addr=simple_strtoull(buf, NULL, 16);
143 int ret; 143 int ret;
144 144
145 ret = get_user_pages(current, current->mm, virt_addr, 145 ret = get_user_pages(virt_addr, 1, VM_READ, 0, NULL, NULL);
146 1, VM_READ, 0, NULL, NULL);
147 if (ret<=0) { 146 if (ret<=0) {
148#ifdef ERR_INJ_DEBUG 147#ifdef ERR_INJ_DEBUG
149 printk("Virtual address %lx is not existing.\n",virt_addr); 148 printk("Virtual address %lx is not existing.\n",virt_addr);
diff --git a/arch/mips/mm/gup.c b/arch/mips/mm/gup.c
index 1afd87c999b0..982e83f9d11f 100644
--- a/arch/mips/mm/gup.c
+++ b/arch/mips/mm/gup.c
@@ -286,8 +286,7 @@ slow_irqon:
286 start += nr << PAGE_SHIFT; 286 start += nr << PAGE_SHIFT;
287 pages += nr; 287 pages += nr;
288 288
289 ret = get_user_pages_unlocked(current, mm, start, 289 ret = get_user_pages_unlocked(start, (end - start) >> PAGE_SHIFT,
290 (end - start) >> PAGE_SHIFT,
291 write, 0, pages); 290 write, 0, pages);
292 291
293 /* Have to be a bit careful with return values */ 292 /* Have to be a bit careful with return values */
diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c
index 13dab0c1645c..49a1c84ed266 100644
--- a/arch/s390/mm/gup.c
+++ b/arch/s390/mm/gup.c
@@ -210,7 +210,6 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
210int get_user_pages_fast(unsigned long start, int nr_pages, int write, 210int get_user_pages_fast(unsigned long start, int nr_pages, int write,
211 struct page **pages) 211 struct page **pages)
212{ 212{
213 struct mm_struct *mm = current->mm;
214 int nr, ret; 213 int nr, ret;
215 214
216 might_sleep(); 215 might_sleep();
@@ -222,8 +221,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
222 /* Try to get the remaining pages with get_user_pages */ 221 /* Try to get the remaining pages with get_user_pages */
223 start += nr << PAGE_SHIFT; 222 start += nr << PAGE_SHIFT;
224 pages += nr; 223 pages += nr;
225 ret = get_user_pages_unlocked(current, mm, start, 224 ret = get_user_pages_unlocked(start, nr_pages - nr, write, 0, pages);
226 nr_pages - nr, write, 0, pages);
227 /* Have to be a bit careful with return values */ 225 /* Have to be a bit careful with return values */
228 if (nr > 0) 226 if (nr > 0)
229 ret = (ret < 0) ? nr : ret + nr; 227 ret = (ret < 0) ? nr : ret + nr;
diff --git a/arch/sh/mm/gup.c b/arch/sh/mm/gup.c
index e7af6a65baab..40fa6c8adc43 100644
--- a/arch/sh/mm/gup.c
+++ b/arch/sh/mm/gup.c
@@ -257,7 +257,7 @@ slow_irqon:
257 start += nr << PAGE_SHIFT; 257 start += nr << PAGE_SHIFT;
258 pages += nr; 258 pages += nr;
259 259
260 ret = get_user_pages_unlocked(current, mm, start, 260 ret = get_user_pages_unlocked(start,
261 (end - start) >> PAGE_SHIFT, write, 0, pages); 261 (end - start) >> PAGE_SHIFT, write, 0, pages);
262 262
263 /* Have to be a bit careful with return values */ 263 /* Have to be a bit careful with return values */
diff --git a/arch/sparc/mm/gup.c b/arch/sparc/mm/gup.c
index eb3d8e8ebc6b..4e06750a5d29 100644
--- a/arch/sparc/mm/gup.c
+++ b/arch/sparc/mm/gup.c
@@ -237,7 +237,7 @@ slow:
237 start += nr << PAGE_SHIFT; 237 start += nr << PAGE_SHIFT;
238 pages += nr; 238 pages += nr;
239 239
240 ret = get_user_pages_unlocked(current, mm, start, 240 ret = get_user_pages_unlocked(start,
241 (end - start) >> PAGE_SHIFT, write, 0, pages); 241 (end - start) >> PAGE_SHIFT, write, 0, pages);
242 242
243 /* Have to be a bit careful with return values */ 243 /* Have to be a bit careful with return values */
diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
index 6d5eb5900372..ce5e4545203b 100644
--- a/arch/x86/mm/gup.c
+++ b/arch/x86/mm/gup.c
@@ -422,7 +422,7 @@ slow_irqon:
422 start += nr << PAGE_SHIFT; 422 start += nr << PAGE_SHIFT;
423 pages += nr; 423 pages += nr;
424 424
425 ret = get_user_pages_unlocked(current, mm, start, 425 ret = get_user_pages_unlocked(start,
426 (end - start) >> PAGE_SHIFT, 426 (end - start) >> PAGE_SHIFT,
427 write, 0, pages); 427 write, 0, pages);
428 428
diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c
index b2fd67da1701..84fa4a482c78 100644
--- a/arch/x86/mm/mpx.c
+++ b/arch/x86/mm/mpx.c
@@ -546,8 +546,8 @@ static int mpx_resolve_fault(long __user *addr, int write)
546 int nr_pages = 1; 546 int nr_pages = 1;
547 int force = 0; 547 int force = 0;
548 548
549 gup_ret = get_user_pages(current, current->mm, (unsigned long)addr, 549 gup_ret = get_user_pages((unsigned long)addr, nr_pages, write,
550 nr_pages, write, force, NULL, NULL); 550 force, NULL, NULL);
551 /* 551 /*
552 * get_user_pages() returns number of pages gotten. 552 * get_user_pages() returns number of pages gotten.
553 * 0 means we failed to fault in and get anything, 553 * 0 means we failed to fault in and get anything,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 6442a06d6fdc..5fedfb68d7ca 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -518,8 +518,7 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
518 uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE; 518 uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE;
519 struct page **pages = ttm->pages + pinned; 519 struct page **pages = ttm->pages + pinned;
520 520
521 r = get_user_pages(current, current->mm, userptr, num_pages, 521 r = get_user_pages(userptr, num_pages, write, 0, pages, NULL);
522 write, 0, pages, NULL);
523 if (r < 0) 522 if (r < 0)
524 goto release_pages; 523 goto release_pages;
525 524
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index e34307459e50..927a9f2d6570 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -554,8 +554,7 @@ static int radeon_ttm_tt_pin_userptr(struct ttm_tt *ttm)
554 uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE; 554 uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE;
555 struct page **pages = ttm->pages + pinned; 555 struct page **pages = ttm->pages + pinned;
556 556
557 r = get_user_pages(current, current->mm, userptr, num_pages, 557 r = get_user_pages(userptr, num_pages, write, 0, pages, NULL);
558 write, 0, pages, NULL);
559 if (r < 0) 558 if (r < 0)
560 goto release_pages; 559 goto release_pages;
561 560
diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c
index d0cbd5ecd7f0..e797dfc07ae3 100644
--- a/drivers/gpu/drm/via/via_dmablit.c
+++ b/drivers/gpu/drm/via/via_dmablit.c
@@ -239,8 +239,7 @@ via_lock_all_dma_pages(drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)
239 if (NULL == vsg->pages) 239 if (NULL == vsg->pages)
240 return -ENOMEM; 240 return -ENOMEM;
241 down_read(&current->mm->mmap_sem); 241 down_read(&current->mm->mmap_sem);
242 ret = get_user_pages(current, current->mm, 242 ret = get_user_pages((unsigned long)xfer->mem_addr,
243 (unsigned long)xfer->mem_addr,
244 vsg->num_pages, 243 vsg->num_pages,
245 (vsg->direction == DMA_FROM_DEVICE), 244 (vsg->direction == DMA_FROM_DEVICE),
246 0, vsg->pages, NULL); 245 0, vsg->pages, NULL);
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 38acb3cfc545..fe4d2e1a8b58 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -188,7 +188,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
188 sg_list_start = umem->sg_head.sgl; 188 sg_list_start = umem->sg_head.sgl;
189 189
190 while (npages) { 190 while (npages) {
191 ret = get_user_pages(current, current->mm, cur_base, 191 ret = get_user_pages(cur_base,
192 min_t(unsigned long, npages, 192 min_t(unsigned long, npages,
193 PAGE_SIZE / sizeof (struct page *)), 193 PAGE_SIZE / sizeof (struct page *)),
194 1, !umem->writable, page_list, vma_list); 194 1, !umem->writable, page_list, vma_list);
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index 7d2e42dd6926..6c00d04b8b28 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -472,8 +472,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
472 goto out; 472 goto out;
473 } 473 }
474 474
475 ret = get_user_pages(current, current->mm, uaddr & PAGE_MASK, 1, 1, 0, 475 ret = get_user_pages(uaddr & PAGE_MASK, 1, 1, 0, pages, NULL);
476 pages, NULL);
477 if (ret < 0) 476 if (ret < 0)
478 goto out; 477 goto out;
479 478
diff --git a/drivers/infiniband/hw/qib/qib_user_pages.c b/drivers/infiniband/hw/qib/qib_user_pages.c
index 74f90b2619f6..2d2b94fd3633 100644
--- a/drivers/infiniband/hw/qib/qib_user_pages.c
+++ b/drivers/infiniband/hw/qib/qib_user_pages.c
@@ -66,8 +66,7 @@ static int __qib_get_user_pages(unsigned long start_page, size_t num_pages,
66 } 66 }
67 67
68 for (got = 0; got < num_pages; got += ret) { 68 for (got = 0; got < num_pages; got += ret) {
69 ret = get_user_pages(current, current->mm, 69 ret = get_user_pages(start_page + got * PAGE_SIZE,
70 start_page + got * PAGE_SIZE,
71 num_pages - got, 1, 1, 70 num_pages - got, 1, 1,
72 p + got, NULL); 71 p + got, NULL);
73 if (ret < 0) 72 if (ret < 0)
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
index 645a5f6e6c88..7209fbc03ccb 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
@@ -144,7 +144,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
144 ret = 0; 144 ret = 0;
145 145
146 while (npages) { 146 while (npages) {
147 ret = get_user_pages(current, current->mm, cur_base, 147 ret = get_user_pages(cur_base,
148 min_t(unsigned long, npages, 148 min_t(unsigned long, npages,
149 PAGE_SIZE / sizeof(struct page *)), 149 PAGE_SIZE / sizeof(struct page *)),
150 1, !writable, page_list, NULL); 150 1, !writable, page_list, NULL);
diff --git a/drivers/media/pci/ivtv/ivtv-udma.c b/drivers/media/pci/ivtv/ivtv-udma.c
index 24152accc66c..4769469fe842 100644
--- a/drivers/media/pci/ivtv/ivtv-udma.c
+++ b/drivers/media/pci/ivtv/ivtv-udma.c
@@ -124,8 +124,8 @@ int ivtv_udma_setup(struct ivtv *itv, unsigned long ivtv_dest_addr,
124 } 124 }
125 125
126 /* Get user pages for DMA Xfer */ 126 /* Get user pages for DMA Xfer */
127 err = get_user_pages_unlocked(current, current->mm, 127 err = get_user_pages_unlocked(user_dma.uaddr, user_dma.page_count, 0,
128 user_dma.uaddr, user_dma.page_count, 0, 1, dma->map); 128 1, dma->map);
129 129
130 if (user_dma.page_count != err) { 130 if (user_dma.page_count != err) {
131 IVTV_DEBUG_WARN("failed to map user pages, returned %d instead of %d\n", 131 IVTV_DEBUG_WARN("failed to map user pages, returned %d instead of %d\n",
diff --git a/drivers/media/pci/ivtv/ivtv-yuv.c b/drivers/media/pci/ivtv/ivtv-yuv.c
index 2b8e7b2f2b86..b094054cda6e 100644
--- a/drivers/media/pci/ivtv/ivtv-yuv.c
+++ b/drivers/media/pci/ivtv/ivtv-yuv.c
@@ -75,14 +75,12 @@ static int ivtv_yuv_prep_user_dma(struct ivtv *itv, struct ivtv_user_dma *dma,
75 ivtv_udma_get_page_info (&uv_dma, (unsigned long)args->uv_source, 360 * uv_decode_height); 75 ivtv_udma_get_page_info (&uv_dma, (unsigned long)args->uv_source, 360 * uv_decode_height);
76 76
77 /* Get user pages for DMA Xfer */ 77 /* Get user pages for DMA Xfer */
78 y_pages = get_user_pages_unlocked(current, current->mm, 78 y_pages = get_user_pages_unlocked(y_dma.uaddr,
79 y_dma.uaddr, y_dma.page_count, 0, 1, 79 y_dma.page_count, 0, 1, &dma->map[0]);
80 &dma->map[0]);
81 uv_pages = 0; /* silence gcc. value is set and consumed only if: */ 80 uv_pages = 0; /* silence gcc. value is set and consumed only if: */
82 if (y_pages == y_dma.page_count) { 81 if (y_pages == y_dma.page_count) {
83 uv_pages = get_user_pages_unlocked(current, current->mm, 82 uv_pages = get_user_pages_unlocked(uv_dma.uaddr,
84 uv_dma.uaddr, uv_dma.page_count, 0, 1, 83 uv_dma.page_count, 0, 1, &dma->map[y_pages]);
85 &dma->map[y_pages]);
86 } 84 }
87 85
88 if (y_pages != y_dma.page_count || uv_pages != uv_dma.page_count) { 86 if (y_pages != y_dma.page_count || uv_pages != uv_dma.page_count) {
diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c
index f669cedca8bd..df4c052c6bd6 100644
--- a/drivers/media/v4l2-core/videobuf-dma-sg.c
+++ b/drivers/media/v4l2-core/videobuf-dma-sg.c
@@ -181,8 +181,7 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
181 dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n", 181 dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n",
182 data, size, dma->nr_pages); 182 data, size, dma->nr_pages);
183 183
184 err = get_user_pages(current, current->mm, 184 err = get_user_pages(data & PAGE_MASK, dma->nr_pages,
185 data & PAGE_MASK, dma->nr_pages,
186 rw == READ, 1, /* force */ 185 rw == READ, 1, /* force */
187 dma->pages, NULL); 186 dma->pages, NULL);
188 187
diff --git a/drivers/misc/mic/scif/scif_rma.c b/drivers/misc/mic/scif/scif_rma.c
index 8310b4dbff06..0fa0d242b295 100644
--- a/drivers/misc/mic/scif/scif_rma.c
+++ b/drivers/misc/mic/scif/scif_rma.c
@@ -1394,8 +1394,6 @@ retry:
1394 } 1394 }
1395 1395
1396 pinned_pages->nr_pages = get_user_pages( 1396 pinned_pages->nr_pages = get_user_pages(
1397 current,
1398 mm,
1399 (u64)addr, 1397 (u64)addr,
1400 nr_pages, 1398 nr_pages,
1401 !!(prot & SCIF_PROT_WRITE), 1399 !!(prot & SCIF_PROT_WRITE),
diff --git a/drivers/misc/sgi-gru/grufault.c b/drivers/misc/sgi-gru/grufault.c
index f74fc0ca2ef9..a2d97b9b17e3 100644
--- a/drivers/misc/sgi-gru/grufault.c
+++ b/drivers/misc/sgi-gru/grufault.c
@@ -198,8 +198,7 @@ static int non_atomic_pte_lookup(struct vm_area_struct *vma,
198#else 198#else
199 *pageshift = PAGE_SHIFT; 199 *pageshift = PAGE_SHIFT;
200#endif 200#endif
201 if (get_user_pages 201 if (get_user_pages(vaddr, 1, write, 0, &page, NULL) <= 0)
202 (current, current->mm, vaddr, 1, write, 0, &page, NULL) <= 0)
203 return -EFAULT; 202 return -EFAULT;
204 *paddr = page_to_phys(page); 203 *paddr = page_to_phys(page);
205 put_page(page); 204 put_page(page);
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 2e522951b619..664852af4417 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -4817,8 +4817,6 @@ static int sgl_map_user_pages(struct st_buffer *STbp,
4817 /* Try to fault in all of the necessary pages */ 4817 /* Try to fault in all of the necessary pages */
4818 /* rw==READ means read from drive, write into memory area */ 4818 /* rw==READ means read from drive, write into memory area */
4819 res = get_user_pages_unlocked( 4819 res = get_user_pages_unlocked(
4820 current,
4821 current->mm,
4822 uaddr, 4820 uaddr,
4823 nr_pages, 4821 nr_pages,
4824 rw == READ, 4822 rw == READ,
diff --git a/drivers/video/fbdev/pvr2fb.c b/drivers/video/fbdev/pvr2fb.c
index 0e24eb9c219c..71a923e53f93 100644
--- a/drivers/video/fbdev/pvr2fb.c
+++ b/drivers/video/fbdev/pvr2fb.c
@@ -686,8 +686,8 @@ static ssize_t pvr2fb_write(struct fb_info *info, const char *buf,
686 if (!pages) 686 if (!pages)
687 return -ENOMEM; 687 return -ENOMEM;
688 688
689 ret = get_user_pages_unlocked(current, current->mm, (unsigned long)buf, 689 ret = get_user_pages_unlocked((unsigned long)buf, nr_pages, WRITE,
690 nr_pages, WRITE, 0, pages); 690 0, pages);
691 691
692 if (ret < nr_pages) { 692 if (ret < nr_pages) {
693 nr_pages = ret; 693 nr_pages = ret;
diff --git a/drivers/virt/fsl_hypervisor.c b/drivers/virt/fsl_hypervisor.c
index 32c8fc5f7a5c..60bdad3a689b 100644
--- a/drivers/virt/fsl_hypervisor.c
+++ b/drivers/virt/fsl_hypervisor.c
@@ -244,9 +244,8 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
244 244
245 /* Get the physical addresses of the source buffer */ 245 /* Get the physical addresses of the source buffer */
246 down_read(&current->mm->mmap_sem); 246 down_read(&current->mm->mmap_sem);
247 num_pinned = get_user_pages(current, current->mm, 247 num_pinned = get_user_pages(param.local_vaddr - lb_offset,
248 param.local_vaddr - lb_offset, num_pages, 248 num_pages, (param.source == -1) ? READ : WRITE,
249 (param.source == -1) ? READ : WRITE,
250 0, pages, NULL); 249 0, pages, NULL);
251 up_read(&current->mm->mmap_sem); 250 up_read(&current->mm->mmap_sem);
252 251
diff --git a/mm/frame_vector.c b/mm/frame_vector.c
index 7cf2b7163222..381bb07ed14f 100644
--- a/mm/frame_vector.c
+++ b/mm/frame_vector.c
@@ -58,7 +58,7 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,
58 if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) { 58 if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
59 vec->got_ref = true; 59 vec->got_ref = true;
60 vec->is_pfns = false; 60 vec->is_pfns = false;
61 ret = get_user_pages_locked(current, mm, start, nr_frames, 61 ret = get_user_pages_locked(start, nr_frames,
62 write, force, (struct page **)(vec->ptrs), &locked); 62 write, force, (struct page **)(vec->ptrs), &locked);
63 goto out; 63 goto out;
64 } 64 }
diff --git a/mm/gup.c b/mm/gup.c
index 8a035e042b35..de24ef4cd1af 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -936,8 +936,10 @@ long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm,
936EXPORT_SYMBOL(get_user_pages_remote); 936EXPORT_SYMBOL(get_user_pages_remote);
937 937
938/* 938/*
939 * This is the same as get_user_pages_remote() for the time 939 * This is the same as get_user_pages_remote(), just with a
940 * being. 940 * less-flexible calling convention where we assume that the task
941 * and mm being operated on are the current task's. We also
942 * obviously don't pass FOLL_REMOTE in here.
941 */ 943 */
942long get_user_pages6(unsigned long start, unsigned long nr_pages, 944long get_user_pages6(unsigned long start, unsigned long nr_pages,
943 int write, int force, struct page **pages, 945 int write, int force, struct page **pages,
diff --git a/mm/ksm.c b/mm/ksm.c
index ca6d2a06a615..c2013f638d11 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -352,7 +352,7 @@ static inline bool ksm_test_exit(struct mm_struct *mm)
352/* 352/*
353 * We use break_ksm to break COW on a ksm page: it's a stripped down 353 * We use break_ksm to break COW on a ksm page: it's a stripped down
354 * 354 *
355 * if (get_user_pages(current, mm, addr, 1, 1, 1, &page, NULL) == 1) 355 * if (get_user_pages(addr, 1, 1, 1, &page, NULL) == 1)
356 * put_page(page); 356 * put_page(page);
357 * 357 *
358 * but taking great care only to touch a ksm page, in a VM_MERGEABLE vma, 358 * but taking great care only to touch a ksm page, in a VM_MERGEABLE vma,
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 4c4187c0e1de..dd0ce7fbd47b 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -844,12 +844,12 @@ static void get_policy_nodemask(struct mempolicy *p, nodemask_t *nodes)
844 } 844 }
845} 845}
846 846
847static int lookup_node(struct mm_struct *mm, unsigned long addr) 847static int lookup_node(unsigned long addr)
848{ 848{
849 struct page *p; 849 struct page *p;
850 int err; 850 int err;
851 851
852 err = get_user_pages(current, mm, addr & PAGE_MASK, 1, 0, 0, &p, NULL); 852 err = get_user_pages(addr & PAGE_MASK, 1, 0, 0, &p, NULL);
853 if (err >= 0) { 853 if (err >= 0) {
854 err = page_to_nid(p); 854 err = page_to_nid(p);
855 put_page(p); 855 put_page(p);
@@ -904,7 +904,7 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask,
904 904
905 if (flags & MPOL_F_NODE) { 905 if (flags & MPOL_F_NODE) {
906 if (flags & MPOL_F_ADDR) { 906 if (flags & MPOL_F_ADDR) {
907 err = lookup_node(mm, addr); 907 err = lookup_node(addr);
908 if (err < 0) 908 if (err < 0)
909 goto out; 909 goto out;
910 *policy = err; 910 *policy = err;
diff --git a/net/ceph/pagevec.c b/net/ceph/pagevec.c
index d4f5f220a8e5..10297f7a89ba 100644
--- a/net/ceph/pagevec.c
+++ b/net/ceph/pagevec.c
@@ -24,7 +24,7 @@ struct page **ceph_get_direct_page_vector(const void __user *data,
24 return ERR_PTR(-ENOMEM); 24 return ERR_PTR(-ENOMEM);
25 25
26 while (got < num_pages) { 26 while (got < num_pages) {
27 rc = get_user_pages_unlocked(current, current->mm, 27 rc = get_user_pages_unlocked(
28 (unsigned long)data + ((unsigned long)got * PAGE_SIZE), 28 (unsigned long)data + ((unsigned long)got * PAGE_SIZE),
29 num_pages - got, write_page, 0, pages + got); 29 num_pages - got, write_page, 0, pages + got);
30 if (rc < 0) 30 if (rc < 0)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index a11cfd20a6a0..0253ad900ec3 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1264,15 +1264,16 @@ unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn, bool *w
1264 return gfn_to_hva_memslot_prot(slot, gfn, writable); 1264 return gfn_to_hva_memslot_prot(slot, gfn, writable);
1265} 1265}
1266 1266
1267static int get_user_page_nowait(struct task_struct *tsk, struct mm_struct *mm, 1267static int get_user_page_nowait(unsigned long start, int write,
1268 unsigned long start, int write, struct page **page) 1268 struct page **page)
1269{ 1269{
1270 int flags = FOLL_TOUCH | FOLL_NOWAIT | FOLL_HWPOISON | FOLL_GET; 1270 int flags = FOLL_TOUCH | FOLL_NOWAIT | FOLL_HWPOISON | FOLL_GET;
1271 1271
1272 if (write) 1272 if (write)
1273 flags |= FOLL_WRITE; 1273 flags |= FOLL_WRITE;
1274 1274
1275 return __get_user_pages(tsk, mm, start, 1, flags, page, NULL, NULL); 1275 return __get_user_pages(current, current->mm, start, 1, flags, page,
1276 NULL, NULL);
1276} 1277}
1277 1278
1278static inline int check_user_page_hwpoison(unsigned long addr) 1279static inline int check_user_page_hwpoison(unsigned long addr)
@@ -1334,8 +1335,7 @@ static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault,
1334 1335
1335 if (async) { 1336 if (async) {
1336 down_read(&current->mm->mmap_sem); 1337 down_read(&current->mm->mmap_sem);
1337 npages = get_user_page_nowait(current, current->mm, 1338 npages = get_user_page_nowait(addr, write_fault, page);
1338 addr, write_fault, page);
1339 up_read(&current->mm->mmap_sem); 1339 up_read(&current->mm->mmap_sem);
1340 } else 1340 } else
1341 npages = __get_user_pages_unlocked(current, current->mm, addr, 1, 1341 npages = __get_user_pages_unlocked(current, current->mm, addr, 1,