]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - arch/arm/mm/fault.c
Merge branch '4.0.8-rt6'
[zynq/linux.git] / arch / arm / mm / fault.c
index 6333d9c178757fe4f365b8e765b2a9ea75e2b80b..62016e3e4a9c265d4e9bc3bd7bde1e560ef5735c 100644 (file)
@@ -276,7 +276,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
         * If we're in an interrupt or have no user
         * context, we must not take the fault..
         */
-       if (in_atomic() || !mm)
+       if (faulthandler_disabled() || !mm)
                goto no_context;
 
        if (user_mode(regs))
@@ -430,6 +430,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr,
        if (addr < TASK_SIZE)
                return do_page_fault(addr, fsr, regs);
 
+       if (interrupts_enabled(regs))
+               local_irq_enable();
+
        if (user_mode(regs))
                goto bad_area;
 
@@ -497,6 +500,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr,
 static int
 do_sect_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 {
+       if (interrupts_enabled(regs))
+               local_irq_enable();
+
        do_bad_area(addr, fsr, regs);
        return 0;
 }