[POWERPC] spu sched: ensure preempted threads are put back on the runqueue
To not lose a spu thread we need to make sure it always gets put back on the runqueue. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
parent
43c2bbd932
commit
b3e76cc324
|
@ -97,7 +97,7 @@ void spu_sched_tick(struct work_struct *work)
|
|||
struct spu_context *ctx =
|
||||
container_of(work, struct spu_context, sched_work.work);
|
||||
struct spu *spu;
|
||||
int rearm = 1;
|
||||
int preempted = 0;
|
||||
|
||||
/*
|
||||
* If this context is being stopped avoid rescheduling from the
|
||||
|
@ -113,12 +113,19 @@ void spu_sched_tick(struct work_struct *work)
|
|||
int best = sched_find_first_bit(spu_prio->bitmap);
|
||||
if (best <= ctx->prio) {
|
||||
spu_deactivate(ctx);
|
||||
rearm = 0;
|
||||
preempted = 1;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&ctx->state_mutex);
|
||||
|
||||
if (rearm)
|
||||
if (preempted) {
|
||||
/*
|
||||
* We need to break out of the wait loop in spu_run manually
|
||||
* to ensure this context gets put on the runqueue again
|
||||
* ASAP.
|
||||
*/
|
||||
wake_up(&ctx->stop_wq);
|
||||
} else
|
||||
spu_start_tick(ctx);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue