diff -urN oldtree/fs/proc/array.c newtree/fs/proc/array.c --- oldtree/fs/proc/array.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/fs/proc/array.c 2006-09-17 06:41:45.000000000 -0400 @@ -165,7 +165,12 @@ rcu_read_lock(); buffer += sprintf(buffer, "State:\t%s\n" - "SleepAVG:\t%lu%%\n" +#ifdef CONFIG_INGOSCHED + "SleepAVG:\t%lu%%\n" +#endif +#ifdef CONFIG_STAIRCASE + "Bonus:\t%d\n" +#endif "Tgid:\t%d\n" "Pid:\t%d\n" "PPid:\t%d\n" @@ -173,7 +178,12 @@ "Uid:\t%d\t%d\t%d\t%d\n" "Gid:\t%d\t%d\t%d\t%d\n", get_task_state(p), - (p->sleep_avg/1024)*100/(1020000000/1024), +#ifdef CONFIG_INGOSCHED + (p->sleep_avg/1024)*100/(1020000000/1024), +#endif +#ifdef CONFIG_STAIRCASE + p->bonus, +#endif p->tgid, p->pid, pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0, diff -urN oldtree/include/linux/init_task.h newtree/include/linux/init_task.h --- oldtree/include/linux/init_task.h 2006-09-17 06:40:54.000000000 -0400 +++ newtree/include/linux/init_task.h 2006-09-17 06:41:08.000000000 -0400 @@ -98,9 +98,16 @@ .usage = ATOMIC_INIT(2), \ .flags = 0, \ .lock_depth = -1, \ +#ifdef CONFIG_INGOSCHED \ + .prio = MAX_PRIO-20, \ + .static_prio = MAX_PRIO-20, \ + .normal_prio = MAX_PRIO-20, \ +#endif \ +#ifdef CONFIG_STAIRCASE \ .prio = MAX_PRIO-21, \ .static_prio = MAX_PRIO-21, \ .normal_prio = MAX_PRIO-21, \ +#endif \ .policy = SCHED_NORMAL, \ .cpus_allowed = CPU_MASK_ALL, \ .mm = NULL, \ diff -urN oldtree/include/linux/sched.h newtree/include/linux/sched.h --- oldtree/include/linux/sched.h 2006-09-17 06:40:54.000000000 -0400 +++ newtree/include/linux/sched.h 2006-09-17 06:42:41.000000000 -0400 @@ -34,15 +34,19 @@ #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_BATCH 3 +#ifdef CONFIG_STAIRCASE #define SCHED_ISO 4 #define SCHED_IDLEPRIO 5 +#endif #ifdef __KERNEL__ +#ifdef CONFIG_STAIRCASE #define SCHED_MAX SCHED_IDLEPRIO #define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) #define SCHED_RT(policy) ((policy) == SCHED_FIFO || \ (policy) == SCHED_RR) +#endif struct sched_param { int sched_priority; @@ -511,7 +515,9 @@ #define MAX_USER_RT_PRIO 100 #define MAX_RT_PRIO MAX_USER_RT_PRIO +#ifdef CONFIG_STAIRCASE #define ISO_PRIO (MAX_RT_PRIO - 1) +#endif #ifdef CONFIG_INGOSCHED #define MAX_PRIO (MAX_RT_PRIO + 40) @@ -811,6 +817,7 @@ struct pipe_inode_info; struct uts_namespace; +#ifdef CONFIG_INGOSCHED enum sleep_type { SLEEP_NORMAL, SLEEP_NONINTERACTIVE, @@ -819,6 +826,7 @@ }; struct prio_array; +#endif struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ @@ -837,16 +845,28 @@ int load_weight; /* for niceness load balancing purposes */ int prio, static_prio, normal_prio; struct list_head run_list; +#ifdef CONFIG_INGOSCHED struct prio_array *array; +#endif unsigned short ioprio; #ifdef CONFIG_BLK_DEV_IO_TRACE unsigned int btrace_seq; #endif +#ifdef CONFIG_INGOSCHED unsigned long sleep_avg; - unsigned long long timestamp, last_ran; + unsigned long long timestamp, last_ran; +#endif +#ifdef CONFIG_STAIRCASE + unsigned long long timestamp; + unsigned long runtime, totalrun, ns_debit, systime; + unsigned int bonus; + unsigned int slice, time_slice; +#endif unsigned long long sched_time; /* sched_clock time spent running */ +#ifdef CONFIG_INGOSCHED enum sleep_type sleep_type; +#endif unsigned long policy; cpumask_t cpus_allowed; @@ -1159,9 +1179,15 @@ #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ +#ifdef CONFIG_STAIRCASE #define PF_ISOREF 0x04000000 /* SCHED_ISO task has used up quota */ +#endif #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ +#ifdef CONFIG_STAIRCASE +#define PF_NONSLEEP 0x40000000 /* Waiting on in kernel activity */ +#define PF_FORKED 0x80000000 /* Task just forked another process */ +#endif /* * Only the _current_ task can read/write to tsk->flags, but other @@ -1297,7 +1323,9 @@ static inline void kick_process(struct task_struct *tsk) { } #endif extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags)); +#ifdef CONFIG_INGOSCHED extern void FASTCALL(sched_exit(struct task_struct * p)); +#endif extern int in_group_p(gid_t); extern int in_egroup_p(gid_t); diff -urN oldtree/kernel/exit.c newtree/kernel/exit.c --- oldtree/kernel/exit.c 2006-09-17 05:38:20.000000000 -0400 +++ newtree/kernel/exit.c 2006-09-17 06:41:08.000000000 -0400 @@ -169,7 +169,9 @@ zap_leader = (leader->exit_signal == -1); } - sched_exit(p); +#ifdef CONFIG_INGOSCHED + sched_exit(p); +#endif write_unlock_irq(&tasklist_lock); proc_flush_task(p); release_thread(p);