diff options
Diffstat (limited to 'arch/sparc64/mm')
-rw-r--r-- | arch/sparc64/mm/fault.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c index b582024d2199..17123e9ecf78 100644 --- a/arch/sparc64/mm/fault.c +++ b/arch/sparc64/mm/fault.c | |||
@@ -278,7 +278,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) | |||
278 | struct mm_struct *mm = current->mm; | 278 | struct mm_struct *mm = current->mm; |
279 | struct vm_area_struct *vma; | 279 | struct vm_area_struct *vma; |
280 | unsigned int insn = 0; | 280 | unsigned int insn = 0; |
281 | int si_code, fault_code; | 281 | int si_code, fault_code, fault; |
282 | unsigned long address, mm_rss; | 282 | unsigned long address, mm_rss; |
283 | 283 | ||
284 | fault_code = get_thread_fault_code(); | 284 | fault_code = get_thread_fault_code(); |
@@ -415,20 +415,18 @@ good_area: | |||
415 | goto bad_area; | 415 | goto bad_area; |
416 | } | 416 | } |
417 | 417 | ||
418 | switch (handle_mm_fault(mm, vma, address, (fault_code & FAULT_CODE_WRITE))) { | 418 | fault = handle_mm_fault(mm, vma, address, (fault_code & FAULT_CODE_WRITE)); |
419 | case VM_FAULT_MINOR: | 419 | if (unlikely(fault & VM_FAULT_ERROR)) { |
420 | current->min_flt++; | 420 | if (fault & VM_FAULT_OOM) |
421 | break; | 421 | goto out_of_memory; |
422 | case VM_FAULT_MAJOR: | 422 | else if (fault & VM_FAULT_SIGBUS) |
423 | current->maj_flt++; | 423 | goto do_sigbus; |
424 | break; | ||
425 | case VM_FAULT_SIGBUS: | ||
426 | goto do_sigbus; | ||
427 | case VM_FAULT_OOM: | ||
428 | goto out_of_memory; | ||
429 | default: | ||
430 | BUG(); | 424 | BUG(); |
431 | } | 425 | } |
426 | if (fault & VM_FAULT_MAJOR) | ||
427 | current->maj_flt++; | ||
428 | else | ||
429 | current->min_flt++; | ||
432 | 430 | ||
433 | up_read(&mm->mmap_sem); | 431 | up_read(&mm->mmap_sem); |
434 | 432 | ||