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>
This commit is contained in:
@@ -58,7 +58,7 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,
|
||||
if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
|
||||
vec->got_ref = true;
|
||||
vec->is_pfns = false;
|
||||
ret = get_user_pages_locked(current, mm, start, nr_frames,
|
||||
ret = get_user_pages_locked(start, nr_frames,
|
||||
write, force, (struct page **)(vec->ptrs), &locked);
|
||||
goto out;
|
||||
}
|
||||
|
6
mm/gup.c
6
mm/gup.c
@@ -936,8 +936,10 @@ long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm,
|
||||
EXPORT_SYMBOL(get_user_pages_remote);
|
||||
|
||||
/*
|
||||
* This is the same as get_user_pages_remote() for the time
|
||||
* being.
|
||||
* This is the same as get_user_pages_remote(), just with a
|
||||
* less-flexible calling convention where we assume that the task
|
||||
* and mm being operated on are the current task's. We also
|
||||
* obviously don't pass FOLL_REMOTE in here.
|
||||
*/
|
||||
long get_user_pages6(unsigned long start, unsigned long nr_pages,
|
||||
int write, int force, struct page **pages,
|
||||
|
2
mm/ksm.c
2
mm/ksm.c
@@ -352,7 +352,7 @@ static inline bool ksm_test_exit(struct mm_struct *mm)
|
||||
/*
|
||||
* We use break_ksm to break COW on a ksm page: it's a stripped down
|
||||
*
|
||||
* if (get_user_pages(current, mm, addr, 1, 1, 1, &page, NULL) == 1)
|
||||
* if (get_user_pages(addr, 1, 1, 1, &page, NULL) == 1)
|
||||
* put_page(page);
|
||||
*
|
||||
* but taking great care only to touch a ksm page, in a VM_MERGEABLE vma,
|
||||
|
@@ -844,12 +844,12 @@ static void get_policy_nodemask(struct mempolicy *p, nodemask_t *nodes)
|
||||
}
|
||||
}
|
||||
|
||||
static int lookup_node(struct mm_struct *mm, unsigned long addr)
|
||||
static int lookup_node(unsigned long addr)
|
||||
{
|
||||
struct page *p;
|
||||
int err;
|
||||
|
||||
err = get_user_pages(current, mm, addr & PAGE_MASK, 1, 0, 0, &p, NULL);
|
||||
err = get_user_pages(addr & PAGE_MASK, 1, 0, 0, &p, NULL);
|
||||
if (err >= 0) {
|
||||
err = page_to_nid(p);
|
||||
put_page(p);
|
||||
@@ -904,7 +904,7 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask,
|
||||
|
||||
if (flags & MPOL_F_NODE) {
|
||||
if (flags & MPOL_F_ADDR) {
|
||||
err = lookup_node(mm, addr);
|
||||
err = lookup_node(addr);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
*policy = err;
|
||||
|
Reference in New Issue
Block a user