From: Venkatesh Pallipadi Subject: sched: Change select_nohz_load_balancer to return void select_nohz_load_balancer used to return 1 when ticks are not to be stopped (idle_balancer), 0 otherwise. With change to nohz idle_balancer logic, all idle cpus can go to tickless mode and be woken up by a kick from one of the busy cpus, if and when idle balancing is required. As a result, select_nohz_load_balancer can return void. Signed-off-by: Venkatesh Pallipadi Signed-off-by: Suresh Siddha --- include/linux/sched.h | 7 ++----- kernel/sched_fair.c | 16 ++++++++-------- kernel/time/tick-sched.c | 8 +------- 3 files changed, 11 insertions(+), 20 deletions(-) Index: tip/kernel/sched_fair.c =================================================================== --- tip.orig/kernel/sched_fair.c +++ tip/kernel/sched_fair.c @@ -3266,14 +3266,14 @@ static void nohz_balancer_kick(int cpu) * ilb owner CPU in future (when there is a need for idle load balancing on * behalf of all idle CPUs). */ -int select_nohz_load_balancer(int stop_tick) +void select_nohz_load_balancer(int stop_tick) { int cpu = smp_processor_id(); if (stop_tick) { if (!cpu_active(cpu)) { if (atomic_read(&nohz.load_balancer) != cpu) - return 0; + return; /* * If we are going offline and still the leader, @@ -3282,7 +3282,7 @@ int select_nohz_load_balancer(int stop_t if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) BUG(); - return 0; + return; } cpumask_set_cpu(cpu, nohz.idle_cpus_mask); @@ -3297,7 +3297,7 @@ int select_nohz_load_balancer(int stop_t /* make me the ilb owner */ if (atomic_cmpxchg(&nohz.load_balancer, -1, cpu) != -1) - return 0; + return; /* * Check to see if there is a more power-efficient @@ -3307,13 +3307,13 @@ int select_nohz_load_balancer(int stop_t if (new_ilb < nr_cpu_ids && new_ilb != cpu) { atomic_set(&nohz.load_balancer, -1); resched_cpu(new_ilb); - return 0; + return; } - return 0; + return; } } else { if (!cpumask_test_cpu(cpu, nohz.idle_cpus_mask)) - return 0; + return; cpumask_clear_cpu(cpu, nohz.idle_cpus_mask); @@ -3321,7 +3321,7 @@ int select_nohz_load_balancer(int stop_t if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu) BUG(); } - return 0; + return; } #endif Index: tip/kernel/time/tick-sched.c =================================================================== --- tip.orig/kernel/time/tick-sched.c +++ tip/kernel/time/tick-sched.c @@ -408,13 +408,7 @@ void tick_nohz_stop_sched_tick(int inidl * the scheduler tick in nohz_restart_sched_tick. */ if (!ts->tick_stopped) { - if (select_nohz_load_balancer(1)) { - /* - * sched tick not stopped! - */ - cpumask_clear_cpu(cpu, nohz_cpu_mask); - goto out; - } + select_nohz_load_balancer(1); ts->idle_tick = hrtimer_get_expires(&ts->sched_timer); ts->tick_stopped = 1; Index: tip/include/linux/sched.h =================================================================== --- tip.orig/include/linux/sched.h +++ tip/include/linux/sched.h @@ -272,14 +272,11 @@ extern void task_rq_unlock_wait(struct t extern cpumask_var_t nohz_cpu_mask; #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) -extern int select_nohz_load_balancer(int cpu); +extern void select_nohz_load_balancer(int stop_tick); extern int get_nohz_load_balancer(void); extern int nohz_ratelimit(int cpu); #else -static inline int select_nohz_load_balancer(int cpu) -{ - return 0; -} +static inline void select_nohz_load_balancer(int stop_tick) { } static inline int nohz_ratelimit(int cpu) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/