Skip to content

Commit

Permalink
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/gi…
Browse files Browse the repository at this point in the history
…t/jk/spufs into merge
  • Loading branch information
Paul Mackerras committed Mar 12, 2008
2 parents 86f4e5d + c368392 commit 9cf7f7f
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 4 deletions.
3 changes: 2 additions & 1 deletion arch/powerpc/platforms/cell/spufs/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 2 additions & 1 deletion arch/powerpc/platforms/cell/spufs/run.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ static int spu_run_init(struct spu_context *ctx, u32 *npc)
}
}

set_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags);
return 0;
}

Expand All @@ -234,7 +235,7 @@ static int spu_run_fini(struct spu_context *ctx, u32 *npc,
*npc = ctx->ops->npc_read(ctx);

spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED);
ctx->policy = SCHED_IDLE;
clear_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags);
spu_release(ctx);

if (signal_pending(current))
Expand Down
4 changes: 2 additions & 2 deletions arch/powerpc/platforms/cell/spufs/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ static noinline void spusched_tick(struct spu_context *ctx)
if (ctx->policy == SCHED_FIFO)
goto out;

if (--ctx->time_slice && ctx->policy != SCHED_IDLE)
if (--ctx->time_slice && test_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags))
goto out;

spu = ctx->spu;
Expand All @@ -877,7 +877,7 @@ static noinline void spusched_tick(struct spu_context *ctx)
new = grab_runnable_context(ctx->prio + 1, spu->node);
if (new) {
spu_unschedule(spu, ctx);
if (ctx->policy != SCHED_IDLE)
if (test_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags))
spu_add_to_rq(ctx);
} else {
spu_context_nospu_trace(spusched_tick__newslice, ctx);
Expand Down
1 change: 1 addition & 0 deletions arch/powerpc/platforms/cell/spufs/spufs.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ struct spu_gang;
enum {
SPU_SCHED_NOTIFY_ACTIVE,
SPU_SCHED_WAS_ACTIVE, /* was active upon spu_acquire_saved() */
SPU_SCHED_SPU_RUN, /* context is within spu_run */
};

struct spu_context {
Expand Down

0 comments on commit 9cf7f7f

Please sign in to comment.