__do_page_fault() is over complicated with multiple goto statements. This
cleans up the code flow and while there drops local variable vm_fault_t.

Signed-off-by: Anshuman Khandual <anshuman.khand...@arm.com>
Cc: Catalin Marinas <catalin.mari...@arm.com>
Cc: Will Deacon <will.dea...@arm.com>
Cc: Mark Rutland <mark.rutl...@arm.com>
Cc: James Morse <james.mo...@arm.com>
Cc: Andrey Konovalov <andreyk...@google.com>
Cc: Christoph Hellwig <h...@infradead.org>
---
 arch/arm64/mm/fault.c | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 4bb65f3..41fa905 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -397,37 +397,29 @@ static void do_bad_area(unsigned long addr, unsigned int 
esr, struct pt_regs *re
 static vm_fault_t __do_page_fault(struct mm_struct *mm, unsigned long addr,
                           unsigned int mm_flags, unsigned long vm_flags)
 {
-       struct vm_area_struct *vma;
-       vm_fault_t fault;
+       struct vm_area_struct *vma = find_vma(mm, addr);
 
-       vma = find_vma(mm, addr);
-       fault = VM_FAULT_BADMAP;
        if (unlikely(!vma))
-               goto out;
-       if (unlikely(vma->vm_start > addr))
-               goto check_stack;
+               return VM_FAULT_BADMAP;
 
        /*
         * Ok, we have a good vm_area for this memory access, so we can handle
         * it.
         */
-good_area:
+       if (unlikely(vma->vm_start > addr)) {
+               if (!(vma->vm_flags & VM_GROWSDOWN))
+                       return VM_FAULT_BADMAP;
+               if (expand_stack(vma, addr))
+                       return VM_FAULT_BADMAP;
+       }
+
        /*
         * Check that the permissions on the VMA allow for the fault which
         * occurred.
         */
-       if (!(vma->vm_flags & vm_flags)) {
-               fault = VM_FAULT_BADACCESS;
-               goto out;
-       }
-
+       if (!(vma->vm_flags & vm_flags))
+               return VM_FAULT_BADACCESS;
        return handle_mm_fault(vma, addr & PAGE_MASK, mm_flags);
-
-check_stack:
-       if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
-               goto good_area;
-out:
-       return fault;
 }
 
 static bool is_el0_instruction_abort(unsigned int esr)
-- 
2.7.4

Reply via email to