aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/cell/spufs/fault.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/cell/spufs/fault.c')
-rw-r--r--arch/powerpc/platforms/cell/spufs/fault.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/fault.c b/arch/powerpc/platforms/cell/spufs/fault.c
index e064d0c0d80..f53a0743747 100644
--- a/arch/powerpc/platforms/cell/spufs/fault.c
+++ b/arch/powerpc/platforms/cell/spufs/fault.c
@@ -75,22 +75,20 @@ good_area:
}
ret = 0;
*flt = handle_mm_fault(mm, vma, ea, is_write);
- switch (*flt) {
- case VM_FAULT_MINOR:
- current->min_flt++;
- break;
- case VM_FAULT_MAJOR:
- current->maj_flt++;
- break;
- case VM_FAULT_SIGBUS:
- ret = -EFAULT;
- goto bad_area;
- case VM_FAULT_OOM:
- ret = -ENOMEM;
- goto bad_area;
- default:
+ if (unlikely(*flt & VM_FAULT_ERROR)) {
+ if (*flt & VM_FAULT_OOM) {
+ ret = -ENOMEM;
+ goto bad_area;
+ } else if (*flt & VM_FAULT_SIGBUS) {
+ ret = -EFAULT;
+ goto bad_area;
+ }
BUG();
}
+ if (*flt & VM_FAULT_MAJOR)
+ current->maj_flt++;
+ else
+ current->min_flt++;
up_read(&mm->mmap_sem);
return ret;
@@ -212,15 +210,15 @@ int spufs_handle_class1(struct spu_context *ctx)
* In case of unhandled error report the problem to user space.
*/
if (!ret) {
- if (flt == VM_FAULT_MINOR)
- ctx->stats.min_flt++;
- else
+ if (flt & VM_FAULT_MAJOR)
ctx->stats.maj_flt++;
+ else
+ ctx->stats.min_flt++;
if (ctx->state == SPU_STATE_RUNNABLE) {
- if (flt == VM_FAULT_MINOR)
- ctx->spu->stats.min_flt++;
- else
+ if (flt & VM_FAULT_MAJOR)
ctx->spu->stats.maj_flt++;
+ else
+ ctx->spu->stats.min_flt++;
}
if (ctx->spu)