Skip to content

Commit

Permalink
x86/mm: unify init task OOM handling
Browse files Browse the repository at this point in the history
Linus noticed that the "again:" versus "survive:" OOM logic for
the init task was arbitrarily different.

The 64-bit codepath is the better one, because it correctly re-lookups
the vma after having dropped the ->mmap_sem.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Ingo Molnar committed Oct 13, 2008
1 parent 891cffb commit 3a1dfe6
Showing 1 changed file with 6 additions and 9 deletions.
15 changes: 6 additions & 9 deletions arch/x86/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,8 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
goto bad_area_nosemaphore;

again:
/* When running in the kernel we expect faults to occur only to
/*
* When running in the kernel we expect faults to occur only to
* addresses in user space. All other faults represent errors in the
* kernel and should generate an OOPS. Unfortunately, in the case of an
* erroneous fault occurring in a code path which already holds mmap_sem
Expand Down Expand Up @@ -734,9 +735,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
goto bad_area;
}

#ifdef CONFIG_X86_32
survive:
#endif
/*
* If for any reason at all we couldn't handle the fault,
* make sure we exit gracefully rather than endlessly redo
Expand Down Expand Up @@ -871,12 +869,11 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
up_read(&mm->mmap_sem);
if (is_global_init(tsk)) {
yield();
#ifdef CONFIG_X86_32
down_read(&mm->mmap_sem);
goto survive;
#else
/*
* Re-lookup the vma - in theory the vma tree might
* have changed:
*/
goto again;
#endif
}

printk("VM: killing process %s\n", tsk->comm);
Expand Down

0 comments on commit 3a1dfe6

Please sign in to comment.