Commit d29694f0 authored by Jeremy Kerr's avatar Jeremy Kerr

[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: default avatarJeremy Kerr <jk@ozlabs.org>
parent c0bace5c
...@@ -294,7 +294,7 @@ static int spu_process_callback(struct spu_context *ctx) ...@@ -294,7 +294,7 @@ static int spu_process_callback(struct spu_context *ctx)
u32 ls_pointer, npc; u32 ls_pointer, npc;
void __iomem *ls; void __iomem *ls;
long spu_ret; long spu_ret;
int ret, ret2; int ret;
/* get syscall block from local store */ /* get syscall block from local store */
npc = ctx->ops->npc_read(ctx) & ~3; npc = ctx->ops->npc_read(ctx) & ~3;
...@@ -316,11 +316,9 @@ static int spu_process_callback(struct spu_context *ctx) ...@@ -316,11 +316,9 @@ static int spu_process_callback(struct spu_context *ctx)
if (spu_ret <= -ERESTARTSYS) { if (spu_ret <= -ERESTARTSYS) {
ret = spu_handle_restartsys(ctx, &spu_ret, &npc); ret = spu_handle_restartsys(ctx, &spu_ret, &npc);
} }
ret2 = spu_acquire(ctx); mutex_lock(&ctx->state_mutex);
if (ret == -ERESTARTSYS) if (ret == -ERESTARTSYS)
return ret; return ret;
if (ret2)
return -EINTR;
} }
/* need to re-get the ls, as it may have changed when we released the /* need to re-get the ls, as it may have changed when we released the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment