[POWERPC] spufs: reacquire LS pointer in spu_process_callback
During spu_process callback, we release then acquire the SPU, but keep a pointer to the local store memory. Since the context may have been scheduled out during the callback, the ls pointer may become invalid. This change reacquires the pointer to the context local store after spu_acquire()-ing, so that it isn't invalidated by a context switch. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
This commit is contained in:
parent
af8b44e01b
commit
4eb5aef583
1 changed files with 4 additions and 0 deletions
|
@ -323,6 +323,10 @@ static int spu_process_callback(struct spu_context *ctx)
|
||||||
return -EINTR;
|
return -EINTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* need to re-get the ls, as it may have changed when we released the
|
||||||
|
* spu */
|
||||||
|
ls = (void __iomem *)ctx->ops->get_ls(ctx);
|
||||||
|
|
||||||
/* write result, jump over indirect pointer */
|
/* write result, jump over indirect pointer */
|
||||||
memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret));
|
memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret));
|
||||||
ctx->ops->npc_write(ctx, npc);
|
ctx->ops->npc_write(ctx, npc);
|
||||||
|
|
Loading…
Reference in a new issue