[POWERPC] spufs: don't requeue victim contex in find_victim if it's not in spu_run
authorChristoph Hellwig <hch@lst.de>
Thu, 8 May 2008 05:26:32 +0000 (15:26 +1000)
committerJeremy Kerr <jk@ozlabs.org>
Thu, 8 May 2008 05:26:32 +0000 (15:26 +1000)
We should not requeue the victim context in find_victim if the owner is
not in spu_run. It's first not needed because leaving the context on
the spu is an optimization and second is harmful because it means the
owner could re-enter spu_run when the context is on the runqueue and
trip the BUG_ON in __spu_update_sched_info.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
arch/powerpc/platforms/cell/spufs/sched.c

index 1df7d6d152c7c7b0093e3e5ad132aff70d0c8ef3..8a05ac863a27b0f614e01816dbd97508c7666f3c 100644 (file)
@@ -659,7 +659,8 @@ static struct spu *find_victim(struct spu_context *ctx)
 
                        victim->stats.invol_ctx_switch++;
                        spu->stats.invol_ctx_switch++;
-                       spu_add_to_rq(victim);
+                       if (test_bit(SPU_SCHED_SPU_RUN, &ctx->sched_flags))
+                               spu_add_to_rq(victim);
 
                        mutex_unlock(&victim->state_mutex);