aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arc/mm/fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arc/mm/fault.c')
-rw-r--r--arch/arc/mm/fault.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c
index be8ea91fcc8b..a3a292c58e50 100644
--- a/arch/arc/mm/fault.c
+++ b/arch/arc/mm/fault.c
@@ -64,23 +64,18 @@ void do_page_fault(unsigned long address, struct pt_regs *regs)
64 struct task_struct *tsk = current; 64 struct task_struct *tsk = current;
65 struct mm_struct *mm = tsk->mm; 65 struct mm_struct *mm = tsk->mm;
66 int si_code = SEGV_MAPERR; 66 int si_code = SEGV_MAPERR;
67 int ret;
68 vm_fault_t fault; 67 vm_fault_t fault;
69 int write = regs->ecr_cause & ECR_C_PROTV_STORE; /* ST/EX */ 68 int write = regs->ecr_cause & ECR_C_PROTV_STORE; /* ST/EX */
70 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; 69 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
71 70
72 /* 71 /*
73 * We fault-in kernel-space virtual memory on-demand. The
74 * 'reference' page table is init_mm.pgd.
75 *
76 * NOTE! We MUST NOT take any locks for this case. We may 72 * NOTE! We MUST NOT take any locks for this case. We may
77 * be in an interrupt or a critical region, and should 73 * be in an interrupt or a critical region, and should
78 * only copy the information from the master page table, 74 * only copy the information from the master page table,
79 * nothing more. 75 * nothing more.
80 */ 76 */
81 if (address >= VMALLOC_START && !user_mode(regs)) { 77 if (address >= VMALLOC_START && !user_mode(regs)) {
82 ret = handle_kernel_vaddr_fault(address); 78 if (unlikely(handle_kernel_vaddr_fault(address)))
83 if (unlikely(ret))
84 goto no_context; 79 goto no_context;
85 else 80 else
86 return; 81 return;