sched: symmetric sync vs avg_overlap
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Wed, 28 Jan 2009 13:51:38 +0000 (14:51 +0100)
committerIngo Molnar <mingo@elte.hu>
Sun, 1 Feb 2009 09:49:49 +0000 (10:49 +0100)
Reinstate the weakening of the sync hint if set. This yields a more
symmetric usage of avg_overlap.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched.c

index 770b1f9..242d0d4 100644 (file)
@@ -2266,9 +2266,15 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
        if (!sched_feat(SYNC_WAKEUPS))
                sync = 0;
 
-       if (!sync && (current->se.avg_overlap < sysctl_sched_migration_cost &&
-                           p->se.avg_overlap < sysctl_sched_migration_cost))
-               sync = 1;
+       if (!sync) {
+               if (current->se.avg_overlap < sysctl_sched_migration_cost &&
+                         p->se.avg_overlap < sysctl_sched_migration_cost)
+                       sync = 1;
+       } else {
+               if (current->se.avg_overlap >= sysctl_sched_migration_cost ||
+                         p->se.avg_overlap >= sysctl_sched_migration_cost)
+                       sync = 0;
+       }
 
 #ifdef CONFIG_SMP
        if (sched_feat(LB_WAKEUP_UPDATE)) {