X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Falpha%2Fmm%2Ffault.c;h=e5a0c5c7828238087ad676f176524687e3b28601;hb=refs%2Fheads%2Fvserver;hp=e7a49c16e48e30c273c7b1fd02b2c4fcc4f3704e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index e7a49c16e..e5a0c5c78 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c @@ -4,7 +4,6 @@ * Copyright (C) 1995 Linus Torvalds */ -#include #include #include #include @@ -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;