diff options
| author | Nick Piggin <npiggin@suse.de> | 2010-04-29 17:48:18 -0400 |
|---|---|---|
| committer | Matt Turner <mattst88@monolith.freenet-rz.de> | 2010-05-25 18:40:28 -0400 |
| commit | 1cb3d8e2c8d30d2cbfe42b696d501d0a016edec1 (patch) | |
| tree | 063a37d4a4f06321c2cad8a96979c1638c667771 | |
| parent | 9ce34c8f4466608bc67630a42d04f4aaf0443d9b (diff) | |
alpha: invoke oom-killer from page fault
As explained in commit 1c0fe6e3bd, we want to call the architecture
independent oom killer when getting an unexplained OOM from
handle_mm_fault, rather than simply killing current.
[mattst88: kill now unused 'survive' label]
Cc: linux-alpha@vger.kernel.org
Cc: Richard Henderson <rth@twiddle.net>
Cc: linux-arch@vger.kernel.org
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Nick Piggin <npiggin@suse.de>
| -rw-r--r-- | arch/alpha/mm/fault.c | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index 00a31deaa96e..fadd5f882ff9 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c | |||
| @@ -142,7 +142,6 @@ do_page_fault(unsigned long address, unsigned long mmcsr, | |||
| 142 | goto bad_area; | 142 | goto bad_area; |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | survive: | ||
| 146 | /* If for any reason at all we couldn't handle the fault, | 145 | /* If for any reason at all we couldn't handle the fault, |
| 147 | make sure we exit gracefully rather than endlessly redo | 146 | make sure we exit gracefully rather than endlessly redo |
| 148 | the fault. */ | 147 | the fault. */ |
| @@ -188,16 +187,10 @@ do_page_fault(unsigned long address, unsigned long mmcsr, | |||
| 188 | /* We ran out of memory, or some other thing happened to us that | 187 | /* We ran out of memory, or some other thing happened to us that |
| 189 | made us unable to handle the page fault gracefully. */ | 188 | made us unable to handle the page fault gracefully. */ |
| 190 | out_of_memory: | 189 | out_of_memory: |
| 191 | if (is_global_init(current)) { | ||
| 192 | yield(); | ||
| 193 | down_read(&mm->mmap_sem); | ||
| 194 | goto survive; | ||
| 195 | } | ||
| 196 | printk(KERN_ALERT "VM: killing process %s(%d)\n", | ||
| 197 | current->comm, task_pid_nr(current)); | ||
| 198 | if (!user_mode(regs)) | 190 | if (!user_mode(regs)) |
| 199 | goto no_context; | 191 | goto no_context; |
| 200 | do_group_exit(SIGKILL); | 192 | pagefault_out_of_memory(); |
| 193 | return; | ||
| 201 | 194 | ||
| 202 | do_sigbus: | 195 | do_sigbus: |
| 203 | /* Send a sigbus, regardless of whether we were in kernel | 196 | /* Send a sigbus, regardless of whether we were in kernel |
