X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=arch%2Falpha%2Fmm%2Ffault.c;h=a0e18da594d94216e716d69f66b2cec0074aa43d;hb=fdb64f93b38a3470fa4db8cd5720b8c731922d1a;hp=8871529a34e2026e4f2bd4eda531df7ec59808a4;hpb=c0341b0f47722fbe5ab45f436fc6ddc1c58c0a6f;p=karo-tx-linux.git diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index 8871529a34e2..a0e18da594d9 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include @@ -108,7 +107,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 @@ -149,21 +148,17 @@ do_page_fault(unsigned long address, unsigned long mmcsr, the fault. */ fault = handle_mm_fault(mm, vma, address, cause > 0); up_read(&mm->mmap_sem); - - switch (fault) { - case VM_FAULT_MINOR: - current->min_flt++; - break; - case VM_FAULT_MAJOR: - current->maj_flt++; - break; - case VM_FAULT_SIGBUS: - goto do_sigbus; - case VM_FAULT_OOM: - goto out_of_memory; - default: + if (unlikely(fault & VM_FAULT_ERROR)) { + if (fault & VM_FAULT_OOM) + goto out_of_memory; + else if (fault & VM_FAULT_SIGBUS) + goto do_sigbus; BUG(); } + if (fault & VM_FAULT_MAJOR) + current->maj_flt++; + else + current->min_flt++; return; /* Something tried to access memory that isn't in our memory map.