Commit c2d23f91 authored by David Rientjes's avatar David Rientjes Committed by Linus Torvalds

mm, oom: remove statically defined arch functions of same name

out_of_memory() is a globally defined function to call the oom killer.
x86, sh, and powerpc all use a function of the same name within file scope
in their respective fault.c unnecessarily.  Inline the functions into the
pagefault handlers to clean the code up.
Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Mundt <lethal@linux-sh.org>
Reviewed-by: default avatarMichal Hocko <mhocko@suse.cz>
Reviewed-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0fa84a4b
...@@ -113,19 +113,6 @@ static int store_updates_sp(struct pt_regs *regs) ...@@ -113,19 +113,6 @@ static int store_updates_sp(struct pt_regs *regs)
#define MM_FAULT_CONTINUE -1 #define MM_FAULT_CONTINUE -1
#define MM_FAULT_ERR(sig) (sig) #define MM_FAULT_ERR(sig) (sig)
static int out_of_memory(struct pt_regs *regs)
{
/*
* We ran out of memory, or some other thing happened to us that made
* us unable to handle the page fault gracefully.
*/
up_read(&current->mm->mmap_sem);
if (!user_mode(regs))
return MM_FAULT_ERR(SIGKILL);
pagefault_out_of_memory();
return MM_FAULT_RETURN;
}
static int do_sigbus(struct pt_regs *regs, unsigned long address) static int do_sigbus(struct pt_regs *regs, unsigned long address)
{ {
siginfo_t info; siginfo_t info;
...@@ -169,8 +156,18 @@ static int mm_fault_error(struct pt_regs *regs, unsigned long addr, int fault) ...@@ -169,8 +156,18 @@ static int mm_fault_error(struct pt_regs *regs, unsigned long addr, int fault)
return MM_FAULT_CONTINUE; return MM_FAULT_CONTINUE;
/* Out of memory */ /* Out of memory */
if (fault & VM_FAULT_OOM) if (fault & VM_FAULT_OOM) {
return out_of_memory(regs); up_read(&current->mm->mmap_sem);
/*
* We ran out of memory, or some other thing happened to us that
* made us unable to handle the page fault gracefully.
*/
if (!user_mode(regs))
return MM_FAULT_ERR(SIGKILL);
pagefault_out_of_memory();
return MM_FAULT_RETURN;
}
/* Bus error. x86 handles HWPOISON here, we'll add this if/when /* Bus error. x86 handles HWPOISON here, we'll add this if/when
* we support the feature in HW * we support the feature in HW
......
...@@ -301,17 +301,6 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code, ...@@ -301,17 +301,6 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code,
__bad_area(regs, error_code, address, SEGV_ACCERR); __bad_area(regs, error_code, address, SEGV_ACCERR);
} }
static void out_of_memory(void)
{
/*
* We ran out of memory, call the OOM killer, and return the userspace
* (which will retry the fault, or kill us if we got oom-killed):
*/
up_read(&current->mm->mmap_sem);
pagefault_out_of_memory();
}
static void static void
do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address) do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
{ {
...@@ -353,8 +342,14 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, ...@@ -353,8 +342,14 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
no_context(regs, error_code, address); no_context(regs, error_code, address);
return 1; return 1;
} }
up_read(&current->mm->mmap_sem);
out_of_memory(); /*
* We ran out of memory, call the OOM killer, and return the
* userspace (which will retry the fault, or kill us if we got
* oom-killed):
*/
pagefault_out_of_memory();
} else { } else {
if (fault & VM_FAULT_SIGBUS) if (fault & VM_FAULT_SIGBUS)
do_sigbus(regs, error_code, address); do_sigbus(regs, error_code, address);
......
...@@ -803,20 +803,6 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code, ...@@ -803,20 +803,6 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code,
__bad_area(regs, error_code, address, SEGV_ACCERR); __bad_area(regs, error_code, address, SEGV_ACCERR);
} }
/* TODO: fixup for "mm-invoke-oom-killer-from-page-fault.patch" */
static void
out_of_memory(struct pt_regs *regs, unsigned long error_code,
unsigned long address)
{
/*
* We ran out of memory, call the OOM killer, and return the userspace
* (which will retry the fault, or kill us if we got oom-killed):
*/
up_read(&current->mm->mmap_sem);
pagefault_out_of_memory();
}
static void static void
do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
unsigned int fault) unsigned int fault)
...@@ -879,7 +865,14 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, ...@@ -879,7 +865,14 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
return 1; return 1;
} }
out_of_memory(regs, error_code, address); up_read(&current->mm->mmap_sem);
/*
* We ran out of memory, call the OOM killer, and return the
* userspace (which will retry the fault, or kill us if we got
* oom-killed):
*/
pagefault_out_of_memory();
} else { } else {
if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON| if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
VM_FAULT_HWPOISON_LARGE)) VM_FAULT_HWPOISON_LARGE))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment