SOURCES: kernel-desktop-ck.patch - up to patch-2.6.18-ck1

sparky sparky at pld-linux.org
Mon Nov 6 21:39:56 CET 2006


Author: sparky                       Date: Mon Nov  6 20:39:56 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- up to patch-2.6.18-ck1

---- Files affected:
SOURCES:
   kernel-desktop-ck.patch (1.3 -> 1.4) 

---- Diffs:

================================================================
Index: SOURCES/kernel-desktop-ck.patch
diff -u SOURCES/kernel-desktop-ck.patch:1.3 SOURCES/kernel-desktop-ck.patch:1.4
--- SOURCES/kernel-desktop-ck.patch:1.3	Sat Jul  1 00:26:13 2006
+++ SOURCES/kernel-desktop-ck.patch	Mon Nov  6 21:39:50 2006
@@ -1,32 +1,59 @@
-Index: linux-2.6.17-ck1/include/linux/sched.h
+Index: linux-2.6.18-ck1/fs/proc/array.c
 ===================================================================
---- linux-2.6.17-ck1.orig/include/linux/sched.h	2006-06-18 15:32:49.000000000 +1000
-+++ linux-2.6.17-ck1/include/linux/sched.h	2006-06-18 15:34:37.000000000 +1000
-@@ -102,6 +102,7 @@ extern unsigned long nr_running(void);
- extern unsigned long nr_uninterruptible(void);
- extern unsigned long nr_active(void);
- extern unsigned long nr_iowait(void);
-+extern unsigned long weighted_cpuload(const int cpu);
- 
- #include <linux/time.h>
- #include <linux/param.h>
-@@ -163,6 +164,15 @@ extern unsigned long nr_iowait(void);
+--- linux-2.6.18-ck1.orig/fs/proc/array.c	2006-09-21 19:54:55.000000000 +1000
++++ linux-2.6.18-ck1/fs/proc/array.c	2006-09-21 20:00:33.000000000 +1000
+@@ -165,7 +165,7 @@ static inline char * task_state(struct t
+ 	read_lock(&tasklist_lock);
+ 	buffer += sprintf(buffer,
+ 		"State:\t%s\n"
+-		"SleepAVG:\t%lu%%\n"
++		"Bonus:\t%d\n"
+ 		"Tgid:\t%d\n"
+ 		"Pid:\t%d\n"
+ 		"PPid:\t%d\n"
+@@ -173,7 +173,7 @@ static inline char * task_state(struct t
+ 		"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),
++		p->bonus,
+ 	       	p->tgid,
+ 		p->pid, pid_alive(p) ? p->group_leader->real_parent->tgid : 0,
+ 		pid_alive(p) && p->ptrace ? p->parent->pid : 0,
+Index: linux-2.6.18-ck1/kernel/exit.c
+===================================================================
+--- linux-2.6.18-ck1.orig/kernel/exit.c	2006-09-21 19:55:00.000000000 +1000
++++ linux-2.6.18-ck1/kernel/exit.c	2006-09-21 20:00:33.000000000 +1000
+@@ -166,7 +166,6 @@ repeat:
+ 		zap_leader = (leader->exit_signal == -1);
+ 	}
+ 
+-	sched_exit(p);
+ 	write_unlock_irq(&tasklist_lock);
+ 	proc_flush_task(p);
+ 	release_thread(p);
+Index: linux-2.6.18-ck1/include/linux/sched.h
+===================================================================
+--- linux-2.6.18-ck1.orig/include/linux/sched.h	2006-09-21 19:54:58.000000000 +1000
++++ linux-2.6.18-ck1/include/linux/sched.h	2006-09-21 20:05:32.000000000 +1000
+@@ -32,9 +32,16 @@
  #define SCHED_FIFO		1
  #define SCHED_RR		2
  #define SCHED_BATCH		3
 +#define SCHED_ISO		4
 +#define SCHED_IDLEPRIO		5
-+
-+#define SCHED_MIN		0
-+#define SCHED_MAX		5
-+
+ 
+ #ifdef __KERNEL__
+ 
++#define SCHED_MAX		SCHED_IDLEPRIO
 +#define SCHED_RANGE(policy)	((policy) <= SCHED_MAX)
 +#define SCHED_RT(policy)	((policy) == SCHED_FIFO || \
 +					(policy) == SCHED_RR)
- 
++
  struct sched_param {
  	int sched_priority;
-@@ -201,6 +211,7 @@ extern void show_stack(struct task_struc
+ };
+@@ -204,6 +211,7 @@ extern void show_stack(struct task_struc
  
  void io_schedule(void);
  long io_schedule_timeout(long timeout);
@@ -34,7 +61,7 @@
  
  extern void cpu_init (void);
  extern void trap_init(void);
-@@ -480,11 +491,16 @@ struct signal_struct {
+@@ -498,14 +506,18 @@ struct signal_struct {
  
  #define MAX_USER_RT_PRIO	100
  #define MAX_RT_PRIO		MAX_USER_RT_PRIO
@@ -45,34 +72,18 @@
 +#define MIN_USER_PRIO		(MAX_PRIO - 2)
 +#define IDLEPRIO_PRIO		(MAX_PRIO - 1)
  
--#define rt_task(p)		(unlikely((p)->prio < MAX_RT_PRIO))
-+#define rt_task(p)		(unlikely(SCHED_RT((p)->policy)))
+ #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))
+-#define has_rt_policy(p) \
+-	unlikely((p)->policy != SCHED_NORMAL && (p)->policy != SCHED_BATCH)
++#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))
  
  /*
   * Some day this will be a full-fledged user tracking system..
-@@ -517,7 +533,6 @@ extern struct user_struct *find_user(uid
- extern struct user_struct root_user;
- #define INIT_USER (&root_user)
- 
--typedef struct prio_array prio_array_t;
- struct backing_dev_info;
- struct reclaim_state;
- 
-@@ -547,9 +562,9 @@ enum idle_type
- /*
-  * sched-domains (multiprocessor balancing) declarations:
-  */
--#ifdef CONFIG_SMP
- #define SCHED_LOAD_SCALE	128UL	/* increase resolution of load */
- 
-+#ifdef CONFIG_SMP
- #define SD_LOAD_BALANCE		1	/* Do load balancing on this domain. */
- #define SD_BALANCE_NEWIDLE	2	/* Balance when about to become idle */
- #define SD_BALANCE_EXEC		4	/* Balance on exec */
-@@ -638,6 +653,22 @@ extern unsigned int max_cache_size;
+@@ -707,6 +719,22 @@ extern unsigned int max_cache_size;
  
  #endif	/* CONFIG_SMP */
  
@@ -95,7 +106,7 @@
  
  struct io_context;			/* See blkdev.h */
  void exit_io_context(void);
-@@ -686,13 +717,6 @@ struct audit_context;		/* See audit.c */
+@@ -755,15 +783,6 @@ struct audit_context;		/* See audit.c */
  struct mempolicy;
  struct pipe_inode_info;
  
@@ -106,23 +117,16 @@
 -	SLEEP_INTERRUPTED,
 -};
 -
+-struct prio_array;
+-
  struct task_struct {
  	volatile long state;	/* -1 unrunnable, 0 runnable, >0 stopped */
  	struct thread_info *thread_info;
-@@ -702,24 +726,26 @@ struct task_struct {
- 
- 	int lock_depth;		/* BKL lock depth */
- 
--#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
-+#ifdef CONFIG_SMP
-+#ifdef __ARCH_WANT_UNLOCKED_CTXSW
- 	int oncpu;
- #endif
-+#endif
-+	int load_weight;	/* for niceness load balancing purposes */
- 	int prio, static_prio;
+@@ -781,19 +800,18 @@ struct task_struct {
+ 	int load_weight;	/* for niceness load balancing purposes */
+ 	int prio, static_prio, normal_prio;
  	struct list_head run_list;
--	prio_array_t *array;
+-	struct prio_array *array;
  
  	unsigned short ioprio;
  	unsigned int btrace_seq;
@@ -140,49 +144,52 @@
  	cpumask_t cpus_allowed;
 -	unsigned int time_slice, first_time_slice;
  
- #ifdef CONFIG_SCHEDSTATS
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
  	struct sched_info sched_info;
-@@ -838,6 +864,7 @@ struct task_struct {
- 	/* mutex deadlock detection */
- 	struct mutex_waiter *blocked_on;
+@@ -942,6 +960,7 @@ struct task_struct {
+ 	struct held_lock held_locks[MAX_LOCK_DEPTH];
+ 	unsigned int lockdep_recursion;
  #endif
 +	unsigned long mutexes_held;
  
  /* journalling filesystem info */
  	void *journal_info;
-@@ -948,6 +975,9 @@ static inline void put_task_struct(struc
- #define PF_SPREAD_PAGE	0x04000000	/* Spread page cache over cpuset */
- #define PF_SPREAD_SLAB	0x08000000	/* Spread some slab caches over cpuset */
+@@ -1054,8 +1073,11 @@ static inline void put_task_struct(struc
+ #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 */
++#define PF_ISOREF	0x04000000	/* SCHED_ISO task has used up quota */
  #define PF_MEMPOLICY	0x10000000	/* Non-default NUMA mempolicy */
-+#define PF_NONSLEEP	0x20000000	/* Waiting on in kernel activity */
-+#define PF_FORKED	0x40000000	/* Task just forked another process */
-+#define PF_ISOREF	0x80000000	/* SCHED_ISO task has used up quota */
+ #define PF_MUTEX_TESTER	0x20000000	/* Thread belongs to the rt mutex tester */
++#define PF_NONSLEEP	0x40000000	/* Waiting on in kernel activity */
++#define PF_FORKED	0x80000000	/* Task just forked another process */
  
  /*
   * Only the _current_ task can read/write to tsk->flags, but other
-@@ -1069,7 +1099,6 @@ extern void FASTCALL(wake_up_new_task(st
+@@ -1191,7 +1213,6 @@ extern void FASTCALL(wake_up_new_task(st
   static inline void kick_process(struct task_struct *tsk) { }
  #endif
- extern void FASTCALL(sched_fork(task_t * p, int clone_flags));
--extern void FASTCALL(sched_exit(task_t * p));
+ extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags));
+-extern void FASTCALL(sched_exit(struct task_struct * p));
  
  extern int in_group_p(gid_t);
  extern int in_egroup_p(gid_t);
-Index: linux-2.6.17-ck1/kernel/sched.c
+Index: linux-2.6.18-ck1/kernel/sched.c
 ===================================================================
---- linux-2.6.17-ck1.orig/kernel/sched.c	2006-06-18 15:32:49.000000000 +1000
-+++ linux-2.6.17-ck1/kernel/sched.c	2006-06-18 15:34:34.000000000 +1000
-@@ -16,6 +16,9 @@
+--- linux-2.6.18-ck1.orig/kernel/sched.c	2006-09-21 19:55:00.000000000 +1000
++++ linux-2.6.18-ck1/kernel/sched.c	2006-09-21 20:05:30.000000000 +1000
+@@ -16,6 +16,10 @@
   *		by Davide Libenzi, preemptible kernel bits by Robert Love.
   *  2003-09-03	Interactivity tuning by Con Kolivas.
   *  2004-04-02	Scheduler domains code by Nick Piggin
-+ *  2006-06-18	Staircase scheduling policy by Con Kolivas with help
-+ *		from William Lee Irwin III, Zwane Mwaikambo & Peter Williams.
-+ *		Staircase v16
++ *  2006-09-21	Staircase scheduling policy by Con Kolivas with help
++ *		from William Lee Irwin III, Zwane Mwaikambo, Peter Williams
++ *		and Andreas Mohr.
++ *		Staircase v16.2
   */
  
  #include <linux/mm.h>
-@@ -55,6 +58,25 @@
+@@ -57,6 +61,25 @@
  #include <asm/unistd.h>
  
  /*
@@ -208,7 +215,7 @@
   * Convert user-nice values [ -20 ... 0 ... 19 ]
   * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
   * and back.
-@@ -75,125 +97,28 @@
+@@ -77,124 +100,26 @@
  /*
   * Some helpers for converting nanosecond timing to jiffy resolution
   */
@@ -291,10 +298,10 @@
 -#define INTERACTIVE_SLEEP(p) \
 -	(JIFFIES_TO_NS(MAX_SLEEP_AVG * \
 -		(MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
--
 +#define NSJIFFY			(1000000000 / HZ)	/* One jiffy in ns */
 +#define NS_TO_JIFFIES(TIME)	((TIME) / NSJIFFY)
 +#define JIFFIES_TO_NS(TIME)	((TIME) * NSJIFFY)
+ 
  #define TASK_PREEMPTS_CURR(p, rq) \
  	((p)->prio < (rq)->curr->prio)
  
@@ -313,45 +320,35 @@
 +#define DEF_TIMESLICE		(RR_INTERVAL * 19)
  
 -#define SCALE_PRIO(x, prio) \
--	max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO/2), MIN_TIMESLICE)
+-	max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
 -
--static unsigned int task_timeslice(task_t *p)
+-static unsigned int static_prio_timeslice(int static_prio)
 -{
--	if (p->static_prio < NICE_TO_PRIO(0))
--		return SCALE_PRIO(DEF_TIMESLICE*4, p->static_prio);
+-	if (static_prio < NICE_TO_PRIO(0))
+-		return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
 -	else
--		return SCALE_PRIO(DEF_TIMESLICE, p->static_prio);
+-		return SCALE_PRIO(DEF_TIMESLICE, static_prio);
+-}
+-
+-static inline unsigned int task_timeslice(struct task_struct *p)
+-{
+-	return static_prio_timeslice(p->static_prio);
 -}
--#define task_hot(p, now, sd) ((long long) ((now) - (p)->last_ran)	\
-+#define task_hot(p, now, sd) ((long long) ((now) - (p)->timestamp)	\
- 				< (long long) (sd)->cache_hot_time)
  
  /*
   * These are the runqueue data structures:
   */
--
--#define BITMAP_SIZE ((((MAX_PRIO+1+7)/8)+sizeof(long)-1)/sizeof(long))
--
- typedef struct runqueue runqueue_t;
  
 -struct prio_array {
 -	unsigned int nr_active;
--	unsigned long bitmap[BITMAP_SIZE];
+-	DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */
 -	struct list_head queue[MAX_PRIO];
 -};
 -
  /*
   * This is the main, per-CPU runqueue data structure.
   *
-@@ -209,6 +134,7 @@ struct runqueue {
- 	 * remote CPUs use both these fields when doing load calculation.
- 	 */
- 	unsigned long nr_running;
-+	unsigned long raw_weighted_load;
- #ifdef CONFIG_SMP
- 	unsigned long cpu_load[3];
- #endif
-@@ -222,12 +148,15 @@ struct runqueue {
+@@ -224,12 +149,14 @@ struct rq {
  	 */
  	unsigned long nr_uninterruptible;
  
@@ -360,19 +357,18 @@
 +	unsigned short cache_ticks, preempted;
 +	unsigned long iso_ticks;
 +	unsigned short iso_refractory;
-+
- 	task_t *curr, *idle;
+ 	struct task_struct *curr, *idle;
  	struct mm_struct *prev_mm;
--	prio_array_t *active, *expired, arrays[2];
+-	struct prio_array *active, *expired, arrays[2];
 -	int best_expired_prio;
 +	unsigned long bitmap[BITS_TO_LONGS(MAX_PRIO + 1)];
 +	struct list_head queue[MAX_PRIO];
  	atomic_t nr_iowait;
  
  #ifdef CONFIG_SMP
-@@ -492,13 +421,7 @@ static inline runqueue_t *this_rq_lock(v
+@@ -553,13 +480,7 @@ static inline struct rq *this_rq_lock(vo
  
- #ifdef CONFIG_SCHEDSTATS
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
  /*
 - * Called when a process is dequeued from the active array and given
 - * the cpu.  We should note that with the exception of interactive
@@ -385,7 +381,7 @@
   *
   * This function is only called from sched_info_arrive(), rather than
   * dequeue_task(). Even though a task may be queued and dequeued multiple
-@@ -536,13 +459,11 @@ static void sched_info_arrive(task_t *t)
+@@ -592,13 +513,11 @@ static void sched_info_arrive(struct tas
  }
  
  /*
@@ -396,7 +392,7 @@
 - * and requeuing any tasks, we are interested in queuing to either. It
 - * is unusual but not impossible for tasks to be dequeued and immediately
 - * requeued in the same or another array: this can happen in sched_yield(),
-+ * Called when a process is queued
++ * Called when a process is queued.
 + * The time is noted and later used to determine how long we had to wait for
 + * us to reach the cpu.
 + * It is unusual but not impossible for tasks to be dequeued and immediately
@@ -404,10 +400,14 @@
   * set_user_nice(), and even load_balance() as it moves tasks from runqueue
   * to runqueue.
   *
-@@ -596,85 +517,155 @@ static inline void sched_info_switch(tas
+@@ -657,73 +576,81 @@ sched_info_switch(struct task_struct *pr
  #define sched_info_switch(t, next)	do { } while (0)
- #endif /* CONFIG_SCHEDSTATS */
+ #endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
  
+-/*
+- * Adding/removing a task to/from a priority array:
+- */
+-static void dequeue_task(struct task_struct *p, struct prio_array *array)
 +#if BITS_PER_LONG < 64
 +static inline void longlimit(unsigned long long *longlong)
 +{
@@ -422,7 +422,11 @@
 +
 +/* Get nanosecond clock difference without overflowing unsigned long. */
 +static unsigned long ns_diff(unsigned long long v1, unsigned long long v2)
-+{
+ {
+-	array->nr_active--;
+-	list_del(&p->run_list);
+-	if (list_empty(array->queue + p->prio))
+-		__clear_bit(p->prio, array->bitmap);
 +	unsigned long long vdiff;
 +	if (likely(v1 >= v2)) {
 +		vdiff = v1 - v2;
@@ -435,75 +439,48 @@
 +		vdiff = 1;
 +	}
 +	return (unsigned long)vdiff;
-+}
-+
-+static inline int task_queued(const task_t *task)
-+{
-+	return !list_empty(&task->run_list);
-+}
-+
- /*
-- * Adding/removing a task to/from a priority array:
-+ * Adding/removing a task to/from a runqueue:
-  */
--static void dequeue_task(struct task_struct *p, prio_array_t *array)
-+static void dequeue_task(task_t *p, runqueue_t *rq)
- {
--	array->nr_active--;
--	list_del(&p->run_list);
--	if (list_empty(array->queue + p->prio))
--		__clear_bit(p->prio, array->bitmap);
-+	list_del_init(&p->run_list);
-+	if (list_empty(rq->queue + p->prio))
-+		__clear_bit(p->prio, rq->bitmap);
-+	p->ns_debit = 0;
  }
  
--static void enqueue_task(struct task_struct *p, prio_array_t *array)
-+static void enqueue_task(task_t *p, runqueue_t *rq)
+-static void enqueue_task(struct task_struct *p, struct prio_array *array)
++static inline int task_queued(struct task_struct *task)
  {
 -	sched_info_queued(p);
 -	list_add_tail(&p->run_list, array->queue + p->prio);
 -	__set_bit(p->prio, array->bitmap);
 -	array->nr_active++;
 -	p->array = array;
-+	list_add_tail(&p->run_list, rq->queue + p->prio);
-+	__set_bit(p->prio, rq->bitmap);
++	return !list_empty(&task->run_list);
  }
  
  /*
-  * Put task to the end of the run list without the overhead of dequeue
-  * followed by enqueue.
+- * Put task to the end of the run list without the overhead of dequeue
+- * followed by enqueue.
++ * Adding/removing a task to/from a runqueue:
   */
--static void requeue_task(struct task_struct *p, prio_array_t *array)
-+static void requeue_task(task_t *p, runqueue_t *rq, const int prio)
+-static void requeue_task(struct task_struct *p, struct prio_array *array)
++static void dequeue_task(struct task_struct *p, struct rq *rq)
  {
 -	list_move_tail(&p->run_list, array->queue + p->prio);
-+	list_move_tail(&p->run_list, rq->queue + prio);
-+	if (p->prio != prio) {
-+		if (list_empty(rq->queue + p->prio))
-+			__clear_bit(p->prio, rq->bitmap);
-+		p->prio = prio;
-+		__set_bit(prio, rq->bitmap);
-+	}
++	list_del_init(&p->run_list);
++	if (list_empty(rq->queue + p->prio))
++		__clear_bit(p->prio, rq->bitmap);
 +	p->ns_debit = 0;
  }
  
--static inline void enqueue_task_head(struct task_struct *p, prio_array_t *array)
-+static inline void enqueue_task_head(task_t *p, runqueue_t *rq)
+-static inline void
+-enqueue_task_head(struct task_struct *p, struct prio_array *array)
++static void enqueue_task(struct task_struct *p, struct rq *rq)
  {
 -	list_add(&p->run_list, array->queue + p->prio);
 -	__set_bit(p->prio, array->bitmap);
 -	array->nr_active++;
 -	p->array = array;
-+	list_add(&p->run_list, rq->queue + p->prio);
++	list_add_tail(&p->run_list, rq->queue + p->prio);
 +	__set_bit(p->prio, rq->bitmap);
  }
  
-+static unsigned int slice(const task_t *p);
-+
  /*
-- * effective_prio - return the priority that is based on the static
+- * __normal_prio - return the priority that is based on the static
 - * priority but is modified by bonuses/penalties.
 - *
 - * We scale the actual sleep average [0 .... MAX_SLEEP_AVG]
@@ -515,63 +492,24 @@
 - * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks.
 - *
 - * Both properties are important to certain workloads.
-+ * To aid in avoiding the subversion of "niceness" due to uneven distribution
-+ * of tasks with abnormal "nice" values across CPUs the contribution that
-+ * each task makes to its run queue's load is weighted according to its
-+ * scheduling class and "nice" value.  For SCHED_NORMAL tasks this is just a
-+ * scaled version of the new time slice allocation that they receive on time
-+ * slice expiry etc.
++ * Put task to the end of the run list without the overhead of dequeue
++ * followed by enqueue.
   */
--static int effective_prio(task_t *p)
-+
-+/*
-+ * Assume: static_prio_timeslice(NICE_TO_PRIO(0)) == DEF_TIMESLICE
-+ * If static_prio_timeslice() is ever changed to break this assumption then
-+ * this code will need modification
-+ */
-+#define TIME_SLICE_NICE_ZERO DEF_TIMESLICE
-+#define LOAD_WEIGHT(lp) \
-+	(((lp) * SCHED_LOAD_SCALE) / TIME_SLICE_NICE_ZERO)
-+#define TASK_LOAD_WEIGHT(p)	LOAD_WEIGHT(slice(p))
-+#define RTPRIO_TO_LOAD_WEIGHT(rp)	\
-+	(LOAD_WEIGHT((RR_INTERVAL + 20 + (rp))))
-+
-+static void set_load_weight(task_t *p)
+-
+-static inline int __normal_prio(struct task_struct *p)
++static void requeue_task(struct task_struct *p, struct rq *rq, const int prio)
  {
 -	int bonus, prio;
-+	if (rt_task(p)) {
-+#ifdef CONFIG_SMP
-+		if (p == task_rq(p)->migration_thread)
-+			/*
-+			 * The migration thread does the actual balancing.
-+			 * Giving its load any weight will skew balancing
-+			 * adversely.
-+			 */
-+			p->load_weight = 0;
-+		else
-+#endif
-+			p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority);
-+	} else if (idleprio_task(p)) {
-+		/*
-+		 * We want idleprio_tasks to have a presence on weighting but
-+		 * as small as possible
-+		 */
-+		p->load_weight = 1;
-+	} else
-+		p->load_weight = TASK_LOAD_WEIGHT(p);
-+}
- 
--	if (rt_task(p))
--		return p->prio;
-+static inline void inc_raw_weighted_load(runqueue_t *rq, const task_t *p)
-+{
-+	rq->raw_weighted_load += p->load_weight;
-+}
- 
+-
 -	bonus = CURRENT_BONUS(p) - MAX_BONUS / 2;
-+static inline void dec_raw_weighted_load(runqueue_t *rq, const task_t *p)
-+{
-+	rq->raw_weighted_load -= p->load_weight;
++	list_move_tail(&p->run_list, rq->queue + prio);
++	if (p->prio != prio) {
++		if (list_empty(rq->queue + p->prio))
++			__clear_bit(p->prio, rq->bitmap);
++		p->prio = prio;
++		__set_bit(prio, rq->bitmap);
++	}
++	p->ns_debit = 0;
 +}
  
 -	prio = p->static_prio - bonus;
@@ -580,110 +518,144 @@
 -	if (prio > MAX_PRIO-1)
 -		prio = MAX_PRIO-1;
 -	return prio;
-+static inline void inc_nr_running(task_t *p, runqueue_t *rq)
-+{
-+	rq->nr_running++;
-+	inc_raw_weighted_load(rq, p);
-+}
-+
-+static inline void dec_nr_running(task_t *p, runqueue_t *rq)
++static inline void enqueue_task_head(struct task_struct *p, struct rq *rq)
 +{
-+	rq->nr_running--;
-+	dec_raw_weighted_load(rq, p);
++	list_add(&p->run_list, rq->queue + p->prio);
++	__set_bit(p->prio, rq->bitmap);
  }
  
++static unsigned int slice(const struct task_struct *p);
++
  /*
-  * __activate_task - move a task to the runqueue.
-  */
--static void __activate_task(task_t *p, runqueue_t *rq)
-+static inline void __activate_task(task_t *p, runqueue_t *rq)
+  * To aid in avoiding the subversion of "niceness" due to uneven distribution
+  * of tasks with abnormal "nice" values across CPUs the contribution that
+@@ -741,10 +668,9 @@ static inline int __normal_prio(struct t
+ #define TIME_SLICE_NICE_ZERO DEF_TIMESLICE
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/kernel-desktop-ck.patch?r1=1.3&r2=1.4&f=u



More information about the pld-cvs-commit mailing list