2013/1/8 Li Zhong <[email protected]>: > On Tue, 2013-01-08 at 03:08 +0100, Frederic Weisbecker wrote: >> move_tasks() and active_load_balance_cpu_stop() both need >> to have the busiest rq clock uptodate because they may end >> up calling can_migrate_task() that uses rq->clock_task >> to determine if the task running in the busiest runqueue >> is cache hot. >> >> Hence if the busiest runqueue is tickless, update its clock >> before reading it. >> >> Signed-off-by: Frederic Weisbecker <[email protected]> >> Cc: Alessio Igor Bogani <[email protected]> >> Cc: Andrew Morton <[email protected]> >> Cc: Chris Metcalf <[email protected]> >> Cc: Christoph Lameter <[email protected]> >> Cc: Geoff Levand <[email protected]> >> Cc: Gilad Ben Yossef <[email protected]> >> Cc: Hakan Akkan <[email protected]> >> Cc: Ingo Molnar <[email protected]> >> Cc: Li Zhong <[email protected]> >> Cc: Namhyung Kim <[email protected]> >> Cc: Paul E. McKenney <[email protected]> >> Cc: Paul Gortmaker <[email protected]> >> Cc: Peter Zijlstra <[email protected]> >> Cc: Steven Rostedt <[email protected]> >> Cc: Thomas Gleixner <[email protected]> >> [ Forward port conflicts ] >> Signed-off-by: Steven Rostedt <[email protected]> >> --- >> kernel/sched/fair.c | 17 +++++++++++++++++ >> 1 files changed, 17 insertions(+), 0 deletions(-) >> >> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c >> index 3d65ac7..e78d81104 100644 >> --- a/kernel/sched/fair.c >> +++ b/kernel/sched/fair.c >> @@ -5002,6 +5002,7 @@ static int load_balance(int this_cpu, struct rq >> *this_rq, >> { >> int ld_moved, cur_ld_moved, active_balance = 0; >> int lb_iterations, max_lb_iterations; >> + int clock_updated; >> struct sched_group *group; >> struct rq *busiest; >> unsigned long flags; >> @@ -5045,6 +5046,7 @@ redo: >> >> ld_moved = 0; >> lb_iterations = 1; >> + clock_updated = 0; >> if (busiest->nr_running > 1) { >> /* >> * Attempt to move tasks. If find_busiest_group has found >> @@ -5068,6 +5070,14 @@ more_balance: >> */ >> cur_ld_moved = move_tasks(&env); >> ld_moved += cur_ld_moved; >> + >> + /* >> + * Move tasks may end up calling can_migrate_task() which >> + * requires an uptodate value of the rq clock. >> + */ >> + update_nohz_rq_clock(busiest); >> + clock_updated = 1; > > According to the change log, it seems these lines should be added before > move_tasks() above?
Yeah, but eventually it seems that can_migrate_task() doesn't make use of rq clock anymore. I guess I'll just drop that patch. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

