diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/mm/fault.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c index cbbdcad8fcb3..1f49c28affa9 100644 --- a/arch/sh/mm/fault.c +++ b/arch/sh/mm/fault.c | |||
@@ -301,17 +301,6 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code, | |||
301 | __bad_area(regs, error_code, address, SEGV_ACCERR); | 301 | __bad_area(regs, error_code, address, SEGV_ACCERR); |
302 | } | 302 | } |
303 | 303 | ||
304 | static void out_of_memory(void) | ||
305 | { | ||
306 | /* | ||
307 | * We ran out of memory, call the OOM killer, and return the userspace | ||
308 | * (which will retry the fault, or kill us if we got oom-killed): | ||
309 | */ | ||
310 | up_read(¤t->mm->mmap_sem); | ||
311 | |||
312 | pagefault_out_of_memory(); | ||
313 | } | ||
314 | |||
315 | static void | 304 | static void |
316 | do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address) | 305 | do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address) |
317 | { | 306 | { |
@@ -353,8 +342,14 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, | |||
353 | no_context(regs, error_code, address); | 342 | no_context(regs, error_code, address); |
354 | return 1; | 343 | return 1; |
355 | } | 344 | } |
345 | up_read(¤t->mm->mmap_sem); | ||
356 | 346 | ||
357 | out_of_memory(); | 347 | /* |
348 | * We ran out of memory, call the OOM killer, and return the | ||
349 | * userspace (which will retry the fault, or kill us if we got | ||
350 | * oom-killed): | ||
351 | */ | ||
352 | pagefault_out_of_memory(); | ||
358 | } else { | 353 | } else { |
359 | if (fault & VM_FAULT_SIGBUS) | 354 | if (fault & VM_FAULT_SIGBUS) |
360 | do_sigbus(regs, error_code, address); | 355 | do_sigbus(regs, error_code, address); |