fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / parisc / mm / fault.c
index fd1c772..a041b43 100644 (file)
@@ -152,7 +152,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
        const struct exception_table_entry *fix;
        unsigned long acc_type;
 
-       if (in_interrupt() || !mm)
+       if (in_atomic() || !mm)
                goto no_context;
 
        down_read(&mm->mmap_sem);
@@ -178,17 +178,17 @@ good_area:
         */
 
        switch (handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) != 0)) {
-             case 1:
+             case VM_FAULT_MINOR:
                ++current->min_flt;
                break;
-             case 2:
+             case VM_FAULT_MAJOR:
                ++current->maj_flt;
                break;
-             case 0:
+             case VM_FAULT_SIGBUS:
                /*
-                * We ran out of memory, or some other thing happened
-                * to us that made us unable to handle the page fault
-                * gracefully.
+                * We hit a shared mapping outside of the file, or some
+                * other thing happened to us that made us unable to
+                * handle the page fault gracefully.
                 */
                goto bad_area;
              default:
@@ -213,8 +213,9 @@ bad_area:
 
 #ifdef PRINT_USER_FAULTS
                printk(KERN_DEBUG "\n");
-               printk(KERN_DEBUG "do_page_fault() pid=%d command='%s' type=%lu address=0x%08lx\n",
-                   tsk->pid, tsk->comm, code, address);
+               printk(KERN_DEBUG "do_page_fault() pid=%d:#%u "
+                   "command='%s' type=%lu address=0x%08lx\n",
+                   tsk->pid, tsk->xid, tsk->comm, code, address);
                if (vma) {
                        printk(KERN_DEBUG "vm_start = 0x%08lx, vm_end = 0x%08lx\n",
                                        vma->vm_start, vma->vm_end);
@@ -225,7 +226,7 @@ bad_area:
                si.si_signo = SIGSEGV;
                si.si_errno = 0;
                si.si_code = SEGV_MAPERR;
-               si.si_addr = (void *) address;
+               si.si_addr = (void __user *) address;
                force_sig_info(SIGSEGV, &si, current);
                return;
        }
@@ -264,7 +265,8 @@ no_context:
 
   out_of_memory:
        up_read(&mm->mmap_sem);
-       printk(KERN_CRIT "VM: killing process %s\n", current->comm);
+       printk(KERN_CRIT "VM: killing process %s(%d:#%u)\n",
+               current->comm, current->pid, current->xid);
        if (user_mode(regs))
                do_exit(SIGKILL);
        goto no_context;