diff options
Diffstat (limited to 'arch/arc/mm/fault.c')
-rw-r--r-- | arch/arc/mm/fault.c | 7 |
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; |