Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc6-git7 /kernel/sched.c

Filename:/kernel/sched.c
Lines Added:19
Lines Deleted:9
Also changed in: (Previous) 2.6.25-rc6-git6  2.6.25-rc6-git5  2.6.25-rc6-git4  2.6.25-rc6-git3  2.6.25-rc6  2.6.25-rc5-git7 
(Following) 2.6.25-rc6-git8  2.6.25-rc7  2.6.25-rc7-git1  2.6.25-rc7-git2  2.6.25-rc7-git3  2.6.25-rc7-git4 

Location
[  2.6.25-rc6-git7
  [  kernel
     o  sched.c

Patch

diff --git a/kernel/sched.c b/kernel/sched.c
index d1ad69b..28c73f0 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -594,18 +594,14 @@ enum {
    SCHED_FEAT_NEW_FAIR_SLEEPERS   = 1,
    SCHED_FEAT_WAKEUP_PREEMPT   = 2,
    SCHED_FEAT_START_DEBIT      = 4,
-   SCHED_FEAT_TREE_AVG      = 8,
-   SCHED_FEAT_APPROX_AVG      = 16,
-   SCHED_FEAT_HRTICK      = 32,
-   SCHED_FEAT_DOUBLE_TICK      = 64,
+   SCHED_FEAT_HRTICK      = 8,
+   SCHED_FEAT_DOUBLE_TICK      = 16,
 };
 
 const_debug unsigned int sysctl_sched_features =
       SCHED_FEAT_NEW_FAIR_SLEEPERS   * 1 |
       SCHED_FEAT_WAKEUP_PREEMPT   * 1 |
       SCHED_FEAT_START_DEBIT      * 1 |
-      SCHED_FEAT_TREE_AVG      * 0 |
-      SCHED_FEAT_APPROX_AVG      * 0 |
       SCHED_FEAT_HRTICK      * 1 |
       SCHED_FEAT_DOUBLE_TICK      * 0;
 
@@ -1396,6 +1392,12 @@ task_hot(struct task_struct *p, u64 now, struct sched_domain *sd)
 {
    s64 delta;
 
+   /*
+    * Buddy candidates are cache hot:
+    */
+   if (&p->se == cfs_rq_of(&p->se)->next)
+      return 1;
+
    if (p->sched_class != &fair_sched_class)
       return 0;
 
@@ -1855,10 +1857,11 @@ out_activate:
       schedstat_inc(p, se.nr_wakeups_remote);
    update_rq_clock(rq);
    activate_task(rq, p, 1);
-   check_preempt_curr(rq, p);
    success = 1;
 
 out_running:
+   check_preempt_curr(rq, p);
+
    p->state = TASK_RUNNING;
 #ifdef CONFIG_SMP
    if (p->sched_class->task_wake_up)
@@ -1892,6 +1895,8 @@ static void __sched_fork(struct task_struct *p)
    p->se.exec_start      = 0;
    p->se.sum_exec_runtime      = 0;
    p->se.prev_sum_exec_runtime   = 0;
+   p->se.last_wakeup      = 0;
+   p->se.avg_overlap      = 0;
 
 #ifdef CONFIG_SCHEDSTATS
    p->se.wait_start      = 0;
@@ -3877,7 +3882,7 @@ need_resched_nonpreemptible:
 
    if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
       if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
-            unlikely(signal_pending(prev)))) {
+            signal_pending(prev))) {
          prev->state = TASK_RUNNING;
       } else {
          deactivate_task(rq, prev, 1);
@@ -6802,6 +6807,10 @@ static int ndoms_cur;      /* number of sched domains in 'doms_cur' */
  */
 static cpumask_t fallback_doms;
 
+void __attribute__((weak)) arch_update_cpu_topology(void)
+{
+}
+
 /*
  * Set up scheduler domains and groups. Callers must hold the hotplug lock.
  * For now this just excludes isolated cpus, but could be used to
@@ -6811,6 +6820,7 @@ static int arch_init_sched_domains(const cpumask_t *cpu_map)
 {
    int err;
 
+   arch_update_cpu_topology();
    ndoms_cur = 1;
    doms_cur = kmalloc(sizeof(cpumask_t), GFP_KERNEL);
    if (!doms_cur)
@@ -6915,7 +6925,7 @@ match2:
 }
 
 #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-static int arch_reinit_sched_domains(void)
+int arch_reinit_sched_domains(void)
 {
    int err;
 


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.