diff -urN oldtree/fs/proc/array.c newtree/fs/proc/array.c --- oldtree/fs/proc/array.c 2006-08-18 15:01:22.000000000 -0400 +++ newtree/fs/proc/array.c 2006-08-19 09:10:58.000000000 -0400 @@ -165,7 +165,12 @@ read_lock(&tasklist_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) ? p->group_leader->real_parent->tgid : 0, pid_alive(p) && p->ptrace ? 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-08-19 09:06:33.000000000 -0400 +++ newtree/include/linux/init_task.h 2006-08-19 09:15:21.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-08-19 09:06:33.000000000 -0400 +++ newtree/include/linux/sched.h 2006-08-19 09:21:47.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,18 +515,30 @@ #define MAX_USER_RT_PRIO 100 #define MAX_RT_PRIO MAX_USER_RT_PRIO +#ifdef CONFIG_STAIRCASE #define ISO_PRIO (MAX_RT_PRIO - 1) #define MAX_PRIO (MAX_RT_PRIO + 41) #define MIN_USER_PRIO (MAX_PRIO - 2) #define IDLEPRIO_PRIO (MAX_PRIO - 1) +#endif + +#ifdef CONFIG_INGOSCHED +#define MAX_PRIO (MAX_RT_PRIO + 40) +#endif #define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) #define rt_task(p) rt_prio((p)->prio) #define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) +#ifdef CONFIG_INGOSCHED +#define has_rt_policy(p) \ + unlikely((p)->policy != SCHED_NORMAL && (p)->policy != SCHED_BATCH) +#endif +#ifdef CONFIG_STAIRCASE #define has_rt_policy(p) unlikely(SCHED_RT((p)->policy)) #define iso_task(p) (unlikely((p)->policy == SCHED_ISO)) #define idleprio_task(p) (unlikely((p)->policy == SCHED_IDLEPRIO)) +#endif /* Must be high prio: stop_machine expects to yield to it. */ #define MIGRATION_THREAD_PRIO (MAX_RT_PRIO-20) @@ -792,6 +808,7 @@ struct pipe_inode_info; struct uts_namespace; +#ifdef CONFIG_INGOSCHED enum sleep_type { SLEEP_NORMAL, SLEEP_NONINTERACTIVE, @@ -800,6 +817,7 @@ }; struct prio_array; +#endif struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ @@ -818,16 +836,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; @@ -1117,9 +1147,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 @@ -1255,7 +1291,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-08-18 15:01:22.000000000 -0400 +++ newtree/kernel/exit.c 2006-08-19 09:22:35.000000000 -0400 @@ -168,7 +168,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);