Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 81152
b: refs/heads/master
c: 90608a2
h: refs/heads/master
v: v3
  • Loading branch information
Aegis Lin authored and Paul Mackerras committed Dec 21, 2007
1 parent 3ef13a0 commit 4203db4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c9101bdb1b0c56a75a4618542d368fe5013946b9
refs/heads/master: 90608a2928a86b9464a8698275a1138e82e3a010
35 changes: 18 additions & 17 deletions trunk/arch/powerpc/platforms/cell/spufs/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static unsigned long spu_avenrun[3];
static struct spu_prio_array *spu_prio;
static struct task_struct *spusched_task;
static struct timer_list spusched_timer;
static struct timer_list spuloadavg_timer;

/*
* Priority of a normal, non-rt, non-niced'd process (aka nice level 0).
Expand Down Expand Up @@ -922,35 +923,31 @@ static unsigned long count_active_contexts(void)
}

/**
* spu_calc_load - given tick count, update the avenrun load estimates.
* @tick: tick count
* spu_calc_load - update the avenrun load estimates.
*
* No locking against reading these values from userspace, as for
* the CPU loadavg code.
*/
static void spu_calc_load(unsigned long ticks)
static void spu_calc_load(void)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;

count -= ticks;

if (unlikely(count < 0)) {
active_tasks = count_active_contexts() * FIXED_1;
do {
CALC_LOAD(spu_avenrun[0], EXP_1, active_tasks);
CALC_LOAD(spu_avenrun[1], EXP_5, active_tasks);
CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);
count += LOAD_FREQ;
} while (count < 0);
}

active_tasks = count_active_contexts() * FIXED_1;
CALC_LOAD(spu_avenrun[0], EXP_1, active_tasks);
CALC_LOAD(spu_avenrun[1], EXP_5, active_tasks);
CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);
}

static void spusched_wake(unsigned long data)
{
mod_timer(&spusched_timer, jiffies + SPUSCHED_TICK);
wake_up_process(spusched_task);
spu_calc_load(SPUSCHED_TICK);
}

static void spuloadavg_wake(unsigned long data)
{
mod_timer(&spuloadavg_timer, jiffies + LOAD_FREQ);
spu_calc_load();
}

static int spusched_thread(void *unused)
Expand Down Expand Up @@ -1068,13 +1065,16 @@ int __init spu_sched_init(void)
spin_lock_init(&spu_prio->runq_lock);

setup_timer(&spusched_timer, spusched_wake, 0);
setup_timer(&spuloadavg_timer, spuloadavg_wake, 0);

spusched_task = kthread_run(spusched_thread, NULL, "spusched");
if (IS_ERR(spusched_task)) {
err = PTR_ERR(spusched_task);
goto out_free_spu_prio;
}

mod_timer(&spuloadavg_timer, 0);

entry = create_proc_entry("spu_loadavg", 0, NULL);
if (!entry)
goto out_stop_kthread;
Expand All @@ -1100,6 +1100,7 @@ void spu_sched_exit(void)
remove_proc_entry("spu_loadavg", NULL);

del_timer_sync(&spusched_timer);
del_timer_sync(&spuloadavg_timer);
kthread_stop(spusched_task);

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

0 comments on commit 4203db4

Please sign in to comment.