ARM: Ensure correct might_sleep() check in pagefault path
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 20 Sep 2009 11:52:19 +0000 (12:52 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 20 Sep 2009 11:55:50 +0000 (12:55 +0100)
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/fault.c

index 501304f7e30c0bbf5563921d00328a45972c26c3..b8b3bb4423cf433ca2aab05b449db77e08611104 100644 (file)
@@ -271,6 +271,13 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
                if (!user_mode(regs) && !search_exception_tables(regs->ARM_pc))
                        goto no_context;
                down_read(&mm->mmap_sem);
+       } else {
+               /*
+                * The above down_read_trylock() might have succeeded in
+                * which case, we'll have missed the might_sleep() from
+                * down_read()
+                */
+               might_sleep();
        }
 
        fault = __do_page_fault(mm, addr, fsr, tsk);