aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/cell/spufs
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2008-04-23 02:02:10 -0400
committerJeremy Kerr <jk@ozlabs.org>2008-05-04 23:33:43 -0400
commitd29694f0681e188cf75477f20904041744e78ef7 (patch)
tree5c515a71302a1ad4a560c028e6a745bc11b6e400 /arch/powerpc/platforms/cell/spufs
parentc0bace5c7029ef7cbb6e6ffaa0469a3c042e5029 (diff)
[POWERPC] spufs: don't acquire state_mutex interruptible while performing callback
There's currently no way to tell if spu_process_callback has returned with the state mutex held, as -EINTR may be returned by either the syscall or the spu_acquire fail case. Instead, just do a non-interruptible mutex_lock here. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'arch/powerpc/platforms/cell/spufs')
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index 0634fecfe54c..e764a43b544e 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -294,7 +294,7 @@ static int spu_process_callback(struct spu_context *ctx)
294 u32 ls_pointer, npc; 294 u32 ls_pointer, npc;
295 void __iomem *ls; 295 void __iomem *ls;
296 long spu_ret; 296 long spu_ret;
297 int ret, ret2; 297 int ret;
298 298
299 /* get syscall block from local store */ 299 /* get syscall block from local store */
300 npc = ctx->ops->npc_read(ctx) & ~3; 300 npc = ctx->ops->npc_read(ctx) & ~3;
@@ -316,11 +316,9 @@ static int spu_process_callback(struct spu_context *ctx)
316 if (spu_ret <= -ERESTARTSYS) { 316 if (spu_ret <= -ERESTARTSYS) {
317 ret = spu_handle_restartsys(ctx, &spu_ret, &npc); 317 ret = spu_handle_restartsys(ctx, &spu_ret, &npc);
318 } 318 }
319 ret2 = spu_acquire(ctx); 319 mutex_lock(&ctx->state_mutex);
320 if (ret == -ERESTARTSYS) 320 if (ret == -ERESTARTSYS)
321 return ret; 321 return ret;
322 if (ret2)
323 return -EINTR;
324 } 322 }
325 323
326 /* need to re-get the ls, as it may have changed when we released the 324 /* need to re-get the ls, as it may have changed when we released the