diff options
Diffstat (limited to 'arch/sparc/mm')
-rw-r--r-- | arch/sparc/mm/fault.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/arch/sparc/mm/fault.c b/arch/sparc/mm/fault.c index c3483365db4b..50747fe44356 100644 --- a/arch/sparc/mm/fault.c +++ b/arch/sparc/mm/fault.c | |||
@@ -226,6 +226,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, | |||
226 | unsigned long g2; | 226 | unsigned long g2; |
227 | siginfo_t info; | 227 | siginfo_t info; |
228 | int from_user = !(regs->psr & PSR_PS); | 228 | int from_user = !(regs->psr & PSR_PS); |
229 | int fault; | ||
229 | 230 | ||
230 | if(text_fault) | 231 | if(text_fault) |
231 | address = regs->pc; | 232 | address = regs->pc; |
@@ -289,19 +290,18 @@ good_area: | |||
289 | * make sure we exit gracefully rather than endlessly redo | 290 | * make sure we exit gracefully rather than endlessly redo |
290 | * the fault. | 291 | * the fault. |
291 | */ | 292 | */ |
292 | switch (handle_mm_fault(mm, vma, address, write)) { | 293 | fault = handle_mm_fault(mm, vma, address, write); |
293 | case VM_FAULT_SIGBUS: | 294 | if (unlikely(fault & VM_FAULT_ERROR)) { |
294 | goto do_sigbus; | 295 | if (fault & VM_FAULT_OOM) |
295 | case VM_FAULT_OOM: | 296 | goto out_of_memory; |
296 | goto out_of_memory; | 297 | else if (fault & VM_FAULT_SIGBUS) |
297 | case VM_FAULT_MAJOR: | 298 | goto do_sigbus; |
299 | BUG(); | ||
300 | } | ||
301 | if (fault & VM_FAULT_MAJOR) | ||
298 | current->maj_flt++; | 302 | current->maj_flt++; |
299 | break; | 303 | else |
300 | case VM_FAULT_MINOR: | ||
301 | default: | ||
302 | current->min_flt++; | 304 | current->min_flt++; |
303 | break; | ||
304 | } | ||
305 | up_read(&mm->mmap_sem); | 305 | up_read(&mm->mmap_sem); |
306 | return; | 306 | return; |
307 | 307 | ||