ANDROID: arm: fault: assume no context when IRQs are disabled during data abort.
authorJP Abgrall <jpa@google.com>
Mon, 29 Apr 2013 23:07:00 +0000 (16:07 -0700)
committerAmit Pundir <amit.pundir@linaro.org>
Mon, 18 Dec 2017 15:41:22 +0000 (21:11 +0530)
Bail out early if IRQs are disabled in do_page_fault or else
  [14415.157266] BUG: sleeping function called from invalid context at arch/arm/mm/fault.c:301

Russell King's idea from
  http://comments.gmane.org/gmane.linux.ports.arm.omap/59256

Signed-off-by: JP Abgrall <jpa@google.com>
arch/arm/mm/fault.c

index 42f585379e19c97fcb6abe1004d9b469f90215ce..6123d126e5ae6e2744d9065d0d3dfb88657ee839 100644 (file)
@@ -274,10 +274,10 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
                local_irq_enable();
 
        /*
-        * If we're in an interrupt or have no user
+        * If we're in an interrupt, or have no irqs, or have no user
         * context, we must not take the fault..
         */
-       if (faulthandler_disabled() || !mm)
+       if (faulthandler_disabled() || irqs_disabled() || !mm)
                goto no_context;
 
        if (user_mode(regs))