fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / alpha / mm / fault.c
index e7a49c1..e5a0c5c 100644 (file)
@@ -4,7 +4,6 @@
  *  Copyright (C) 1995  Linus Torvalds
  */
 
-#include <linux/config.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -40,7 +39,7 @@ extern void die_if_kernel(char *,struct pt_regs *,long, unsigned long *);
 unsigned long last_asn = ASN_FIRST_VERSION;
 #endif
 
-extern void
+void
 __load_new_mm_context(struct mm_struct *next_mm)
 {
        unsigned long mmc;
@@ -98,7 +97,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
           by ignoring such an instruction.  */
        if (cause == 0) {
                unsigned int insn;
-               __get_user(insn, (unsigned int *)regs->pc);
+               __get_user(insn, (unsigned int __user *)regs->pc);
                if ((insn >> 21 & 0x1f) == 0x1f &&
                    /* ldq ldl ldt lds ldg ldf ldwu ldbu */
                    (1ul << (insn >> 26) & 0x30f00001400ul)) {
@@ -109,7 +108,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
 
        /* If we're in an interrupt context, or have no user context,
           we must not take the fault.  */
-       if (!mm || in_interrupt())
+       if (!mm || in_atomic())
                goto no_context;
 
 #ifdef CONFIG_ALPHA_LARGE_VMALLOC
@@ -194,13 +193,13 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
        /* 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:
-       if (current->pid == 1) {
+       if (is_init(current)) {
                yield();
                down_read(&mm->mmap_sem);
                goto survive;
        }
-       printk(KERN_ALERT "VM: killing process %s(%d)\n",
-              current->comm, current->pid);
+       printk(KERN_ALERT "VM: killing process %s(%d:#%u)\n",
+              current->comm, current->pid, current->xid);
        if (!user_mode(regs))
                goto no_context;
        do_exit(SIGKILL);
@@ -211,7 +210,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
        info.si_signo = SIGBUS;
        info.si_errno = 0;
        info.si_code = BUS_ADRERR;
-       info.si_addr = (void *) address;
+       info.si_addr = (void __user *) address;
        force_sig_info(SIGBUS, &info, current);
        if (!user_mode(regs))
                goto no_context;
@@ -221,7 +220,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
        info.si_signo = SIGSEGV;
        info.si_errno = 0;
        info.si_code = si_code;
-       info.si_addr = (void *) address;
+       info.si_addr = (void __user *) address;
        force_sig_info(SIGSEGV, &info, current);
        return;