MIPS: Port "mm: invoke oom-killer from page fault" from UML / x86
authorRalf Baechle <ralf@linux-mips.org>
Mon, 12 Jan 2009 00:09:13 +0000 (00:09 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 30 Jan 2009 21:32:57 +0000 (21:32 +0000)
Original commit 1c0fe6e3bda0464728c23c8d84aa47567e8b716c.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mm/fault.c

index fa636fc6b7b90403a2a8771ef3c5f023a1a82cd4..55767ad9f00ee4a5aec5be3e984d5a971b808eb9 100644 (file)
@@ -97,7 +97,6 @@ good_area:
                        goto bad_area;
        }
 
-survive:
        /*
         * If for any reason at all we couldn't handle the fault,
         * make sure we exit gracefully rather than endlessly redo
@@ -167,21 +166,13 @@ no_context:
               field,  regs->regs[31]);
        die("Oops", regs);
 
-/*
- * We ran out of memory, or some other thing happened to us that made
- * us unable to handle the page fault gracefully.
- */
 out_of_memory:
-       up_read(&mm->mmap_sem);
-       if (is_global_init(tsk)) {
-               yield();
-               down_read(&mm->mmap_sem);
-               goto survive;
-       }
-       printk("VM: killing process %s\n", tsk->comm);
-       if (user_mode(regs))
-               do_group_exit(SIGKILL);
-       goto no_context;
+       /*
+        * 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();
+       return;
 
 do_sigbus:
        up_read(&mm->mmap_sem);