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);
