Skip to content

Commit

Permalink
[POWERPC] spusched: Disable tick when not needed
Browse files Browse the repository at this point in the history
Only enable the scheduler tick if we have any context waiting to be
scheduled.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Christoph Hellwig authored and Paul Mackerras committed Jul 3, 2007
1 parent 08c9692 commit c77239b
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions arch/powerpc/platforms/cell/spufs/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,21 +294,24 @@ static void __spu_add_to_rq(struct spu_context *ctx)
{
int prio = ctx->prio;

spu_prio->nr_waiting++;
list_add_tail(&ctx->rq, &spu_prio->runq[prio]);
set_bit(prio, spu_prio->bitmap);
if (!spu_prio->nr_waiting++)
__mod_timer(&spusched_timer, jiffies + SPUSCHED_TICK);
}

static void __spu_del_from_rq(struct spu_context *ctx)
{
int prio = ctx->prio;

if (!list_empty(&ctx->rq)) {
if (!--spu_prio->nr_waiting)
del_timer(&spusched_timer);
list_del_init(&ctx->rq);
spu_prio->nr_waiting--;

if (list_empty(&spu_prio->runq[prio]))
clear_bit(prio, spu_prio->bitmap);
}
if (list_empty(&spu_prio->runq[prio]))
clear_bit(prio, spu_prio->bitmap);
}

static void spu_prio_wait(struct spu_context *ctx)
Expand Down Expand Up @@ -654,9 +657,6 @@ static int spusched_thread(void *unused)
struct spu *spu, *next;
int node;

setup_timer(&spusched_timer, spusched_wake, 0);
__mod_timer(&spusched_timer, jiffies + SPUSCHED_TICK);

while (!kthread_should_stop()) {
set_current_state(TASK_INTERRUPTIBLE);
schedule();
Expand All @@ -670,7 +670,6 @@ static int spusched_thread(void *unused)
}
}

del_timer_sync(&spusched_timer);
return 0;
}

Expand Down Expand Up @@ -732,6 +731,8 @@ int __init spu_sched_init(void)
}
spin_lock_init(&spu_prio->runq_lock);

setup_timer(&spusched_timer, spusched_wake, 0);

spusched_task = kthread_run(spusched_thread, NULL, "spusched");
if (IS_ERR(spusched_task)) {
err = PTR_ERR(spusched_task);
Expand Down Expand Up @@ -762,6 +763,7 @@ void __exit spu_sched_exit(void)

remove_proc_entry("spu_loadavg", NULL);

del_timer_sync(&spusched_timer);
kthread_stop(spusched_task);

for (node = 0; node < MAX_NUMNODES; node++) {
Expand Down

0 comments on commit c77239b

Please sign in to comment.