mm: do not pass mm_struct into handle_mm_fault
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Tue, 26 Jul 2016 22:25:18 +0000 (15:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 26 Jul 2016 23:19:19 +0000 (16:19 -0700)
We always have vma->vm_mm around.

Link: http://lkml.kernel.org/r/1466021202-61880-8-git-send-email-kirill.shutemov@linux.intel.com
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
36 files changed:
arch/alpha/mm/fault.c
arch/arc/mm/fault.c
arch/arm/mm/fault.c
arch/arm64/mm/fault.c
arch/avr32/mm/fault.c
arch/cris/mm/fault.c
arch/frv/mm/fault.c
arch/hexagon/mm/vm_fault.c
arch/ia64/mm/fault.c
arch/m32r/mm/fault.c
arch/m68k/mm/fault.c
arch/metag/mm/fault.c
arch/microblaze/mm/fault.c
arch/mips/mm/fault.c
arch/mn10300/mm/fault.c
arch/nios2/mm/fault.c
arch/openrisc/mm/fault.c
arch/parisc/mm/fault.c
arch/powerpc/mm/copro_fault.c
arch/powerpc/mm/fault.c
arch/s390/mm/fault.c
arch/score/mm/fault.c
arch/sh/mm/fault.c
arch/sparc/mm/fault_32.c
arch/sparc/mm/fault_64.c
arch/tile/mm/fault.c
arch/um/kernel/trap.c
arch/unicore32/mm/fault.c
arch/x86/mm/fault.c
arch/xtensa/mm/fault.c
drivers/iommu/amd_iommu_v2.c
drivers/iommu/intel-svm.c
include/linux/mm.h
mm/gup.c
mm/ksm.c
mm/memory.c

index 4a905bd..83e9eee 100644 (file)
@@ -147,7 +147,7 @@ retry:
        /* If for any reason at all we couldn't handle the fault,
           make sure we exit gracefully rather than endlessly redo
           the fault.  */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index af63f4a..e94e5aa 100644 (file)
@@ -137,7 +137,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        /* If Pagefault was interrupted by SIGKILL, exit page fault "early" */
        if (unlikely(fatal_signal_pending(current))) {
index ad58418..3a2e678 100644 (file)
@@ -243,7 +243,7 @@ good_area:
                goto out;
        }
 
-       return handle_mm_fault(mm, vma, addr & PAGE_MASK, flags);
+       return handle_mm_fault(vma, addr & PAGE_MASK, flags);
 
 check_stack:
        /* Don't allow expansion below FIRST_USER_ADDRESS */
index b1166d1..031820d 100644 (file)
@@ -233,7 +233,7 @@ good_area:
                goto out;
        }
 
-       return handle_mm_fault(mm, vma, addr & PAGE_MASK, mm_flags);
+       return handle_mm_fault(vma, addr & PAGE_MASK, mm_flags);
 
 check_stack:
        if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
index c035339..a4b7eda 100644 (file)
@@ -134,7 +134,7 @@ good_area:
         * sure we exit gracefully rather than endlessly redo the
         * fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 3066d40..112ef26 100644 (file)
@@ -168,7 +168,7 @@ retry:
         * the fault.
         */
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 61d9976..614a46c 100644 (file)
@@ -164,7 +164,7 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, ear0, flags);
+       fault = handle_mm_fault(vma, ear0, flags);
        if (unlikely(fault & VM_FAULT_ERROR)) {
                if (fault & VM_FAULT_OOM)
                        goto out_of_memory;
index 8704c93..bd7c251 100644 (file)
@@ -101,7 +101,7 @@ good_area:
                break;
        }
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 70b40d1..fa6ad95 100644 (file)
@@ -159,7 +159,7 @@ retry:
         * sure we exit gracefully rather than endlessly redo the
         * fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 8f9875b..a3785d3 100644 (file)
@@ -196,7 +196,7 @@ good_area:
         */
        addr = (address & PAGE_MASK);
        set_thread_fault_code(error_code);
-       fault = handle_mm_fault(mm, vma, addr, flags);
+       fault = handle_mm_fault(vma, addr, flags);
        if (unlikely(fault & VM_FAULT_ERROR)) {
                if (fault & VM_FAULT_OOM)
                        goto out_of_memory;
index 6a94cdd..bd66a0b 100644 (file)
@@ -136,7 +136,7 @@ good_area:
         * the fault.
         */
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
        pr_debug("handle_mm_fault returns %d\n", fault);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
index f57edca..372783a 100644 (file)
@@ -133,7 +133,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return 0;
index 177dfc0..abb678c 100644 (file)
@@ -216,7 +216,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 4b88fa0..9560ad7 100644 (file)
@@ -153,7 +153,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 4a1d181..f23781d 100644 (file)
@@ -254,7 +254,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index b51878b..affc4eb 100644 (file)
@@ -131,7 +131,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 230ac20..e94cd22 100644 (file)
@@ -163,7 +163,7 @@ good_area:
         * the fault.
         */
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 16dbe81..163af2c 100644 (file)
@@ -239,7 +239,7 @@ good_area:
         * fault.
         */
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 6527882..bb03542 100644 (file)
@@ -75,7 +75,7 @@ int copro_handle_mm_fault(struct mm_struct *mm, unsigned long ea,
        }
 
        ret = 0;
-       *flt = handle_mm_fault(mm, vma, ea, is_write ? FAULT_FLAG_WRITE : 0);
+       *flt = handle_mm_fault(vma, ea, is_write ? FAULT_FLAG_WRITE : 0);
        if (unlikely(*flt & VM_FAULT_ERROR)) {
                if (*flt & VM_FAULT_OOM) {
                        ret = -ENOMEM;
index a67c6d7..a4db22f 100644 (file)
@@ -429,7 +429,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
        if (unlikely(fault & (VM_FAULT_RETRY|VM_FAULT_ERROR))) {
                if (fault & VM_FAULT_SIGSEGV)
                        goto bad_area;
index 19288c1..6c47488 100644 (file)
@@ -456,7 +456,7 @@ retry:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
        /* No reason to continue if interrupted by SIGKILL. */
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
                fault = VM_FAULT_SIGNAL;
index 37a6c2e..995b71e 100644 (file)
@@ -111,7 +111,7 @@ good_area:
        * make sure we exit gracefully rather than endlessly redo
        * the fault.
        */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
        if (unlikely(fault & VM_FAULT_ERROR)) {
                if (fault & VM_FAULT_OOM)
                        goto out_of_memory;
index 79d8276..9bf8767 100644 (file)
@@ -487,7 +487,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if (unlikely(fault & (VM_FAULT_RETRY | VM_FAULT_ERROR)))
                if (mm_fault_error(regs, error_code, address, fault))
index b6c559c..4714061 100644 (file)
@@ -241,7 +241,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
@@ -411,7 +411,7 @@ good_area:
                if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
                        goto bad_area;
        }
-       switch (handle_mm_fault(mm, vma, address, flags)) {
+       switch (handle_mm_fault(vma, address, flags)) {
        case VM_FAULT_SIGBUS:
        case VM_FAULT_OOM:
                goto do_sigbus;
index cb841a3..6c43b92 100644 (file)
@@ -436,7 +436,7 @@ good_area:
                        goto bad_area;
        }
 
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                goto exit_exception;
index 2673421..beba986 100644 (file)
@@ -434,7 +434,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return 0;
index 98783dd..ad8f206 100644 (file)
@@ -73,7 +73,7 @@ good_area:
        do {
                int fault;
 
-               fault = handle_mm_fault(mm, vma, address, flags);
+               fault = handle_mm_fault(vma, address, flags);
 
                if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                        goto out_nosemaphore;
index 2ec3d3a..6c7f70b 100644 (file)
@@ -194,7 +194,7 @@ good_area:
         * If for any reason at all we couldn't handle the fault, make
         * sure we exit gracefully rather than endlessly redo the fault.
         */
-       fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, flags);
+       fault = handle_mm_fault(vma, addr & PAGE_MASK, flags);
        return fault;
 
 check_stack:
index d22161a..dc80230 100644 (file)
@@ -1353,7 +1353,7 @@ good_area:
         * the fault.  Since we never set FAULT_FLAG_RETRY_NOWAIT, if
         * we get VM_FAULT_RETRY back, the mmap_sem has been unlocked.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
        major |= fault & VM_FAULT_MAJOR;
 
        /*
index 7f4a1fd..2725e08 100644 (file)
@@ -110,7 +110,7 @@ good_area:
         * make sure we exit gracefully rather than endlessly redo
         * the fault.
         */
-       fault = handle_mm_fault(mm, vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags);
 
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
                return;
index 56999d2..fbdaf81 100644 (file)
@@ -538,8 +538,7 @@ static void do_fault(struct work_struct *work)
        if (access_error(vma, fault))
                goto out;
 
-       ret = handle_mm_fault(mm, vma, address, flags);
-
+       ret = handle_mm_fault(vma, address, flags);
 out:
        up_read(&mm->mmap_sem);
 
index d9939fa..8ebb353 100644 (file)
@@ -583,7 +583,7 @@ static irqreturn_t prq_event_thread(int irq, void *d)
                if (access_error(vma, req))
                        goto invalid;
 
-               ret = handle_mm_fault(svm->mm, vma, address,
+               ret = handle_mm_fault(vma, address,
                                      req->wr_req ? FAULT_FLAG_WRITE : 0);
                if (ret & VM_FAULT_ERROR)
                        goto invalid;
index 6c9a394..646bc36 100644 (file)
@@ -1215,15 +1215,14 @@ int generic_error_remove_page(struct address_space *mapping, struct page *page);
 int invalidate_inode_page(struct page *page);
 
 #ifdef CONFIG_MMU
-extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
-                       unsigned long address, unsigned int flags);
+extern int handle_mm_fault(struct vm_area_struct *vma, unsigned long address,
+               unsigned int flags);
 extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
                            unsigned long address, unsigned int fault_flags,
                            bool *unlocked);
 #else
-static inline int handle_mm_fault(struct mm_struct *mm,
-                       struct vm_area_struct *vma, unsigned long address,
-                       unsigned int flags)
+static inline int handle_mm_fault(struct vm_area_struct *vma,
+               unsigned long address, unsigned int flags)
 {
        /* should never happen if there's no MMU */
        BUG();
index dee142e..9671e29 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -352,7 +352,6 @@ unmap:
 static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
                unsigned long address, unsigned int *flags, int *nonblocking)
 {
-       struct mm_struct *mm = vma->vm_mm;
        unsigned int fault_flags = 0;
        int ret;
 
@@ -377,7 +376,7 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
                fault_flags |= FAULT_FLAG_TRIED;
        }
 
-       ret = handle_mm_fault(mm, vma, address, fault_flags);
+       ret = handle_mm_fault(vma, address, fault_flags);
        if (ret & VM_FAULT_ERROR) {
                if (ret & VM_FAULT_OOM)
                        return -ENOMEM;
@@ -692,7 +691,7 @@ retry:
        if (!vma_permits_fault(vma, fault_flags))
                return -EFAULT;
 
-       ret = handle_mm_fault(mm, vma, address, fault_flags);
+       ret = handle_mm_fault(vma, address, fault_flags);
        major |= ret & VM_FAULT_MAJOR;
        if (ret & VM_FAULT_ERROR) {
                if (ret & VM_FAULT_OOM)
index 35b8aef..73d43ba 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -376,9 +376,8 @@ static int break_ksm(struct vm_area_struct *vma, unsigned long addr)
                if (IS_ERR_OR_NULL(page))
                        break;
                if (PageKsm(page))
-                       ret = handle_mm_fault(vma->vm_mm, vma, addr,
-                                                       FAULT_FLAG_WRITE |
-                                                       FAULT_FLAG_REMOTE);
+                       ret = handle_mm_fault(vma, addr,
+                                       FAULT_FLAG_WRITE | FAULT_FLAG_REMOTE);
                else
                        ret = VM_FAULT_WRITE;
                put_page(page);
index 5e6eadd..6bf2b85 100644 (file)
@@ -3420,9 +3420,10 @@ unlock:
  * The mmap_sem may have been released depending on flags and our
  * return value.  See filemap_fault() and __lock_page_or_retry().
  */
-static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
-                            unsigned long address, unsigned int flags)
+static int __handle_mm_fault(struct vm_area_struct *vma, unsigned long address,
+               unsigned int flags)
 {
+       struct mm_struct *mm = vma->vm_mm;
        pgd_t *pgd;
        pud_t *pud;
        pmd_t *pmd;
@@ -3509,15 +3510,15 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
  * The mmap_sem may have been released depending on flags and our
  * return value.  See filemap_fault() and __lock_page_or_retry().
  */
-int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
-                   unsigned long address, unsigned int flags)
+int handle_mm_fault(struct vm_area_struct *vma, unsigned long address,
+               unsigned int flags)
 {
        int ret;
 
        __set_current_state(TASK_RUNNING);
 
        count_vm_event(PGFAULT);
-       mem_cgroup_count_vm_event(mm, PGFAULT);
+       mem_cgroup_count_vm_event(vma->vm_mm, PGFAULT);
 
        /* do counter updates before entering really critical section. */
        check_sync_rss_stat(current);
@@ -3529,7 +3530,7 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
        if (flags & FAULT_FLAG_USER)
                mem_cgroup_oom_enable();
 
-       ret = __handle_mm_fault(mm, vma, address, flags);
+       ret = __handle_mm_fault(vma, address, flags);
 
        if (flags & FAULT_FLAG_USER) {
                mem_cgroup_oom_disable();