x86: add might_sleep() to do_page_fault()
authorPeter Zijlstra <peterz@infradead.org>
Thu, 29 Jan 2009 15:02:12 +0000 (16:02 +0100)
committerIngo Molnar <mingo@elte.hu>
Thu, 29 Jan 2009 15:03:34 +0000 (16:03 +0100)
Impact: widen debug checks

VirtualBox calls do_page_fault() from an atomic context but runs into a
might_sleep() way pas this point, cure that.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/fault.c

index 8f4b859a04b3ff95caabfcfce54523e3adc1c313..eb4d7fe05938eac3324ed500f90ebd2cd62fddcd 100644 (file)
@@ -888,6 +888,12 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
                        return;
                }
                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();
        }
 
        vma = find_vma(mm, address);