diff options
Diffstat (limited to 'arch/unicore32/mm/fault.c')
-rw-r--r-- | arch/unicore32/mm/fault.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/unicore32/mm/fault.c b/arch/unicore32/mm/fault.c index 8ed3c4509d84..0dc922dba915 100644 --- a/arch/unicore32/mm/fault.c +++ b/arch/unicore32/mm/fault.c | |||
@@ -209,8 +209,7 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
209 | struct task_struct *tsk; | 209 | struct task_struct *tsk; |
210 | struct mm_struct *mm; | 210 | struct mm_struct *mm; |
211 | int fault, sig, code; | 211 | int fault, sig, code; |
212 | unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE | | 212 | unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; |
213 | ((!(fsr ^ 0x12)) ? FAULT_FLAG_WRITE : 0); | ||
214 | 213 | ||
215 | tsk = current; | 214 | tsk = current; |
216 | mm = tsk->mm; | 215 | mm = tsk->mm; |
@@ -222,6 +221,11 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs) | |||
222 | if (in_atomic() || !mm) | 221 | if (in_atomic() || !mm) |
223 | goto no_context; | 222 | goto no_context; |
224 | 223 | ||
224 | if (user_mode(regs)) | ||
225 | flags |= FAULT_FLAG_USER; | ||
226 | if (!(fsr ^ 0x12)) | ||
227 | flags |= FAULT_FLAG_WRITE; | ||
228 | |||
225 | /* | 229 | /* |
226 | * As per x86, we may deadlock here. However, since the kernel only | 230 | * As per x86, we may deadlock here. However, since the kernel only |
227 | * validly references user space from well defined areas of the code, | 231 | * validly references user space from well defined areas of the code, |