Skip to content

Commit

Permalink
powerpc/spufs: fix missed stop-and-signal event
Browse files Browse the repository at this point in the history
There is a delay in the transition to the stopped state for class 2
interrupts. In some cases, the controlling thread detects the state of
the spu as running, and goes back to sleep resulting in a hung
application as the event is missed.

This change detects the stop condition and re-generates the wakeup event
after a context save.

Signed-off-by: Luke Browning <lukebrowning@us.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
  • Loading branch information
Luke Browning authored and Jeremy Kerr committed Jun 16, 2008
1 parent 2c911a1 commit 028fda0
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions arch/powerpc/platforms/cell/spufs/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,8 @@ static int has_affinity(struct spu_context *ctx)
*/
static void spu_unbind_context(struct spu *spu, struct spu_context *ctx)
{
u32 status;

spu_context_trace(spu_unbind_context__enter, ctx, spu);

spuctx_switch_state(ctx, SPU_UTIL_SYSTEM);
Expand Down Expand Up @@ -452,6 +454,9 @@ static void spu_unbind_context(struct spu *spu, struct spu_context *ctx)
/* This maps the underlying spu state to idle */
spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED);
ctx->spu = NULL;

if (spu_stopped(ctx, &status))
wake_up_all(&ctx->stop_wq);
}

/**
Expand Down

0 comments on commit 028fda0

Please sign in to comment.