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)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:54:03 +0000 (13:54 -0800)
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 daafcf121ce082aa0a0fbb43be3e3712b2942f3e..506c225c66cc22def94ea2bf36653a2d6c870797 100644 (file)
@@ -273,10 +273,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))