aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/mm/fault.c
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2013-09-12 18:13:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-12 18:38:01 -0400
commit871341023c771ad233620b7a1fb3d9c7031c4e5c (patch)
treef2b008756dffce639759f74885b23e92886600d6 /arch/arm64/mm/fault.c
parent94bce453c78996cc4373d5da6cfabe07fcc6d9f9 (diff)
arch: mm: do not invoke OOM killer on kernel fault OOM
Kernel faults are expected to handle OOM conditions gracefully (gup, uaccess etc.), so they should never invoke the OOM killer. Reserve this for faults triggered in user context when it is the only option. Most architectures already do this, fix up the remaining few. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Michal Hocko <mhocko@suse.cz> Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: David Rientjes <rientjes@google.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: azurIt <azurit@pobox.sk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/arm64/mm/fault.c')
-rw-r--r--arch/arm64/mm/fault.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 6c8ba25bf6bb..0bb7db41f4fe 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -288,6 +288,13 @@ retry:
288 VM_FAULT_BADACCESS)))) 288 VM_FAULT_BADACCESS))))
289 return 0; 289 return 0;
290 290
291 /*
292 * If we are in kernel mode at this point, we have no context to
293 * handle this fault with.
294 */
295 if (!user_mode(regs))
296 goto no_context;
297
291 if (fault & VM_FAULT_OOM) { 298 if (fault & VM_FAULT_OOM) {
292 /* 299 /*
293 * We ran out of memory, call the OOM killer, and return to 300 * We ran out of memory, call the OOM killer, and return to
@@ -298,13 +305,6 @@ retry:
298 return 0; 305 return 0;
299 } 306 }
300 307
301 /*
302 * If we are in kernel mode at this point, we have no context to
303 * handle this fault with.
304 */
305 if (!user_mode(regs))
306 goto no_context;
307
308 if (fault & VM_FAULT_SIGBUS) { 308 if (fault & VM_FAULT_SIGBUS) {
309 /* 309 /*
310 * We had some memory, but were unable to successfully fix up 310 * We had some memory, but were unable to successfully fix up