diff options
| -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) |
