diff options
Diffstat (limited to 'arch/arm/mm/fault.c')
-rw-r--r-- | arch/arm/mm/fault.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index ec83c8fca62d..0e417233dad7 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -154,10 +154,11 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, | |||
154 | * User mode accesses just cause a SIGSEGV | 154 | * User mode accesses just cause a SIGSEGV |
155 | */ | 155 | */ |
156 | static void | 156 | static void |
157 | __do_user_fault(struct task_struct *tsk, unsigned long addr, | 157 | __do_user_fault(unsigned long addr, unsigned int fsr, unsigned int sig, |
158 | unsigned int fsr, unsigned int sig, int code, | 158 | int code, struct pt_regs *regs) |
159 | struct pt_regs *regs) | ||
160 | { | 159 | { |
160 | struct task_struct *tsk = current; | ||
161 | |||
161 | if (addr > TASK_SIZE) | 162 | if (addr > TASK_SIZE) |
162 | harden_branch_predictor(); | 163 | harden_branch_predictor(); |
163 | 164 | ||
@@ -181,7 +182,7 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr, | |||
181 | tsk->thread.address = addr; | 182 | tsk->thread.address = addr; |
182 | tsk->thread.error_code = fsr; | 183 | tsk->thread.error_code = fsr; |
183 | tsk->thread.trap_no = 14; | 184 | tsk->thread.trap_no = 14; |
184 | force_sig_fault(sig, code, (void __user *)addr, tsk); | 185 | force_sig_fault(sig, code, (void __user *)addr); |
185 | } | 186 | } |
186 | 187 | ||
187 | void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | 188 | void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) |
@@ -194,7 +195,7 @@ void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
194 | * have no context to handle this fault with. | 195 | * have no context to handle this fault with. |
195 | */ | 196 | */ |
196 | if (user_mode(regs)) | 197 | if (user_mode(regs)) |
197 | __do_user_fault(tsk, addr, fsr, SIGSEGV, SEGV_MAPERR, regs); | 198 | __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs); |
198 | else | 199 | else |
199 | __do_kernel_fault(mm, addr, fsr, regs); | 200 | __do_kernel_fault(mm, addr, fsr, regs); |
200 | } | 201 | } |
@@ -390,7 +391,7 @@ retry: | |||
390 | SEGV_ACCERR : SEGV_MAPERR; | 391 | SEGV_ACCERR : SEGV_MAPERR; |
391 | } | 392 | } |
392 | 393 | ||
393 | __do_user_fault(tsk, addr, fsr, sig, code, regs); | 394 | __do_user_fault(addr, fsr, sig, code, regs); |
394 | return 0; | 395 | return 0; |
395 | 396 | ||
396 | no_context: | 397 | no_context: |