diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-05 07:03:28 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-05 07:03:35 -0500 |
commit | 83895147b702434e6f236deeca75211fd0e3da3a (patch) | |
tree | 550a8a8828592d9aa110d1851cc52e0f2c95bac7 | |
parent | a6a95406c676ffe4f9dee708eb404a17c69f7fdd (diff) | |
parent | 483b4ee60edbefdfbff0dd538fb81f368d9e7c0d (diff) |
Merge branch 'sched/urgent' into timers/urgent
Merging it here because an upcoming timers/urgent fix relies on
a change already in sched/urgent and not yet upstream.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | include/linux/sched.h | 1 | ||||
-rw-r--r-- | kernel/sched.c | 17 |
2 files changed, 12 insertions, 6 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 5a7c76388731..2127e959e0f4 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -443,6 +443,7 @@ struct pacct_struct { | |||
443 | * @utime: time spent in user mode, in &cputime_t units | 443 | * @utime: time spent in user mode, in &cputime_t units |
444 | * @stime: time spent in kernel mode, in &cputime_t units | 444 | * @stime: time spent in kernel mode, in &cputime_t units |
445 | * @sum_exec_runtime: total time spent on the CPU, in nanoseconds | 445 | * @sum_exec_runtime: total time spent on the CPU, in nanoseconds |
446 | * @lock: lock for fields in this struct | ||
446 | * | 447 | * |
447 | * This structure groups together three kinds of CPU time that are | 448 | * This structure groups together three kinds of CPU time that are |
448 | * tracked for threads and thread groups. Most things considering | 449 | * tracked for threads and thread groups. Most things considering |
diff --git a/kernel/sched.c b/kernel/sched.c index 242d0d47a70d..e1fc67d0674c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -3890,19 +3890,24 @@ int select_nohz_load_balancer(int stop_tick) | |||
3890 | int cpu = smp_processor_id(); | 3890 | int cpu = smp_processor_id(); |
3891 | 3891 | ||
3892 | if (stop_tick) { | 3892 | if (stop_tick) { |
3893 | cpumask_set_cpu(cpu, nohz.cpu_mask); | ||
3894 | cpu_rq(cpu)->in_nohz_recently = 1; | 3893 | cpu_rq(cpu)->in_nohz_recently = 1; |
3895 | 3894 | ||
3896 | /* | 3895 | if (!cpu_active(cpu)) { |
3897 | * If we are going offline and still the leader, give up! | 3896 | if (atomic_read(&nohz.load_balancer) != cpu) |
3898 | */ | 3897 | return 0; |
3899 | if (!cpu_active(cpu) && | 3898 | |
3900 | atomic_read(&nohz.load_balancer) == cpu) { | 3899 | /* |
3900 | * If we are going offline and still the leader, | ||
3901 | * give up! | ||
3902 | */ | ||
3901 | if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) | 3903 | if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) |
3902 | BUG(); | 3904 | BUG(); |
3905 | |||
3903 | return 0; | 3906 | return 0; |
3904 | } | 3907 | } |
3905 | 3908 | ||
3909 | cpumask_set_cpu(cpu, nohz.cpu_mask); | ||
3910 | |||
3906 | /* time for ilb owner also to sleep */ | 3911 | /* time for ilb owner also to sleep */ |
3907 | if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) { | 3912 | if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) { |
3908 | if (atomic_read(&nohz.load_balancer) == cpu) | 3913 | if (atomic_read(&nohz.load_balancer) == cpu) |