forked from Minki/linux
[POWERPC] spufs: fix rescheduling of non-runnable contexts
At present, we can hit the BUG_ON in __spu_update_sched_info by reading the regs file of a context between two calls to spu_run. The spu_release_saved called by spufs_regs_read() is resulting in the (now non-runnable) context being placed back on the run queue, so the next call to spu_run ends up in the bug condition. This change uses the SPU_SCHED_SPU_RUN flag to only reschedule a context if it's still in spu_run(). Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
This commit is contained in:
parent
ce7c191bca
commit
c368392a99
@ -170,7 +170,8 @@ void spu_release_saved(struct spu_context *ctx)
|
||||
{
|
||||
BUG_ON(ctx->state != SPU_STATE_SAVED);
|
||||
|
||||
if (test_and_clear_bit(SPU_SCHED_WAS_ACTIVE, &ctx->sched_flags))
|
||||
if (test_and_clear_bit(SPU_SCHED_WAS_ACTIVE, &ctx->sched_flags) &&
|
||||
test_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags))
|
||||
spu_activate(ctx, 0);
|
||||
|
||||
spu_release(ctx);
|
||||
|
Loading…
Reference in New Issue
Block a user