--- include/linux/sched_drv.h | 1 + include/linux/sched_spa.h | 1 + kernel/ingo_ll.c | 5 +++++ kernel/ingosched.c | 5 +++++ kernel/nicksched.c | 5 +++++ kernel/sched.c | 1 + kernel/sched_spa.c | 5 +++++ kernel/sched_spa_ebs.c | 1 + kernel/sched_spa_svr.c | 1 + kernel/sched_spa_ws.c | 1 + kernel/sched_zaphod.c | 1 + kernel/staircase.c | 8 ++++++++ 12 files changed, 35 insertions(+) Index: linux-2.6.16-mm2/include/linux/sched_drv.h =================================================================== --- linux-2.6.16-mm2.orig/include/linux/sched_drv.h 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/include/linux/sched_drv.h 2006-04-02 15:28:56.000000000 +1000 @@ -32,6 +32,7 @@ struct sched_drv { int (*move_tasks)(runqueue_t *, int, runqueue_t *, unsigned long, unsigned long, struct sched_domain *, enum idle_type, int *all_pinned); #endif + void (*sched_system_tick)(task_t *); void (*tick)(struct task_struct*, struct runqueue *, unsigned long long); #ifdef CONFIG_SCHED_SMT struct task_struct *(*head_of_queue)(union runqueue_queue *); Index: linux-2.6.16-mm2/kernel/ingo_ll.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/ingo_ll.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/ingo_ll.c 2006-04-02 15:31:29.000000000 +1000 @@ -752,6 +752,10 @@ out: } #endif +static void ingo_system_tick(struct task_struct *p) +{ +} + /* * This function gets called by the timer code, with HZ frequency. * We call it with interrupts disabled. @@ -1290,6 +1294,7 @@ const struct sched_drv ingo_ll_sched_drv #ifdef CONFIG_SMP .move_tasks = ingo_move_tasks, #endif + .sched_system_tick = ingo_system_tick, .tick = ingo_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = ingo_head_of_queue, Index: linux-2.6.16-mm2/kernel/ingosched.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/ingosched.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/ingosched.c 2006-04-02 15:31:40.000000000 +1000 @@ -777,6 +777,10 @@ out: } #endif +static void ingo_system_tick(struct task_struct *p) +{ +} + /* * This function gets called by the timer code, with HZ frequency. * We call it with interrupts disabled. @@ -1336,6 +1340,7 @@ const struct sched_drv ingo_sched_drv = #ifdef CONFIG_SMP .move_tasks = ingo_move_tasks, #endif + .sched_system_tick = ingo_system_tick, .tick = ingo_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = ingo_head_of_queue, Index: linux-2.6.16-mm2/kernel/nicksched.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/nicksched.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/nicksched.c 2006-04-02 15:32:54.000000000 +1000 @@ -642,6 +642,10 @@ out: } #endif +static void nick_system_tick(struct task_struct *p) +{ +} + /* * This function gets called by the timer code, with HZ frequency. * We call it with interrupts disabled. @@ -1087,6 +1091,7 @@ const struct sched_drv nick_sched_drv = #ifdef CONFIG_SMP .move_tasks = nick_move_tasks, #endif + .sched_system_tick = nick_system_tick, .tick = nick_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = nick_head_of_queue, Index: linux-2.6.16-mm2/kernel/sched.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched.c 2006-04-02 15:29:01.000000000 +1000 @@ -1693,6 +1693,7 @@ void account_system_time(struct task_str cpustat->idle = cputime64_add(cpustat->idle, tmp); /* Account for system time used */ acct_update_integrals(p); + sched_drvp->sched_system_tick(p); } /* Index: linux-2.6.16-mm2/kernel/sched_spa.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched_spa.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched_spa.c 2006-04-02 15:39:37.000000000 +1000 @@ -825,6 +825,10 @@ static void spa_nf_runq_data_tick(unsign { } +void spa_system_tick(struct task_struct *p) +{ +} + /* * This function gets called by the timer code, with HZ frequency. * We call it with interrupts disabled. @@ -1658,6 +1662,7 @@ const struct sched_drv spa_nf_sched_drv #ifdef CONFIG_SMP .move_tasks = spa_move_tasks, #endif + .sched_system_tick = spa_system_tick, .tick = spa_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = spa_head_of_queue, Index: linux-2.6.16-mm2/kernel/staircase.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/staircase.c 2006-04-02 15:11:10.000000000 +1000 +++ linux-2.6.16-mm2/kernel/staircase.c 2006-04-02 15:35:48.000000000 +1000 @@ -652,6 +652,13 @@ static void time_slice_expired(task_t *p enqueue_task(p, rqq); } +static void staircase_system_tick(struct task_struct *p) +{ + struct staircase_sched_drv_task *sp = &p->sdu.staircase; + + sp->systime++; +} + /* * This function gets called by the timer code, with HZ frequency. * We call it with interrupts disabled. @@ -1115,6 +1122,7 @@ const struct sched_drv staircase_sched_d #ifdef CONFIG_SMP .move_tasks = staircase_move_tasks, #endif + .sched_system_tick = staircase_system_tick, .tick = staircase_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = staircase_head_of_queue, Index: linux-2.6.16-mm2/kernel/sched_spa_ebs.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched_spa_ebs.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched_spa_ebs.c 2006-04-02 15:37:52.000000000 +1000 @@ -370,6 +370,7 @@ const struct sched_drv spa_ebs_sched_drv #ifdef CONFIG_SMP .move_tasks = spa_move_tasks, #endif + .sched_system_tick = spa_system_tick, .tick = spa_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = spa_head_of_queue, Index: linux-2.6.16-mm2/kernel/sched_spa_svr.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched_spa_svr.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched_spa_svr.c 2006-04-02 15:38:21.000000000 +1000 @@ -170,6 +170,7 @@ const struct sched_drv spa_svr_sched_drv #ifdef CONFIG_SMP .move_tasks = spa_move_tasks, #endif + .sched_system_tick = spa_system_tick, .tick = spa_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = spa_head_of_queue, Index: linux-2.6.16-mm2/kernel/sched_spa_ws.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched_spa_ws.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched_spa_ws.c 2006-04-02 15:38:12.000000000 +1000 @@ -317,6 +317,7 @@ const struct sched_drv spa_ws_sched_drv #ifdef CONFIG_SMP .move_tasks = spa_move_tasks, #endif + .sched_system_tick = spa_system_tick, .tick = spa_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = spa_head_of_queue, Index: linux-2.6.16-mm2/kernel/sched_zaphod.c =================================================================== --- linux-2.6.16-mm2.orig/kernel/sched_zaphod.c 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/kernel/sched_zaphod.c 2006-04-02 15:38:02.000000000 +1000 @@ -607,6 +607,7 @@ const struct sched_drv zaphod_sched_drv #ifdef CONFIG_SMP .move_tasks = spa_move_tasks, #endif + .sched_system_tick = spa_system_tick, .tick = spa_tick, #ifdef CONFIG_SCHED_SMT .head_of_queue = spa_head_of_queue, Index: linux-2.6.16-mm2/include/linux/sched_spa.h =================================================================== --- linux-2.6.16-mm2.orig/include/linux/sched_spa.h 2006-04-02 14:20:34.000000000 +1000 +++ linux-2.6.16-mm2/include/linux/sched_spa.h 2006-04-02 15:40:47.000000000 +1000 @@ -111,6 +111,7 @@ void spa_wake_up_task(struct task_struct void spa_fork(task_t *); void spa_wake_up_new_task(task_t *, unsigned long); void spa_exit(task_t *); +void spa_system_tick(struct task_struct *); void spa_tick(struct task_struct *, struct runqueue *, unsigned long long); void spa_schedule(void); void spa_set_normal_task_nice(task_t *, long);