Message ID | 3346281.BDGJiv2ZOp@aspire.rjw.lan (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
On Tue, Mar 06, 2018 at 10:02:15AM +0100, Rafael J. Wysocki wrote: > Index: linux-pm/kernel/sched/idle.c > =================================================================== > --- linux-pm.orig/kernel/sched/idle.c > +++ linux-pm/kernel/sched/idle.c > @@ -220,13 +220,17 @@ static void do_idle(void) > */ > > __current_set_polling(); > - tick_nohz_idle_enter(); > + tick_nohz_idle_prepare(); Since we leave tick_nohz_idle_exit() unchanged, can we keep tick_nohz_idle_prepare() under the name tick_nohz_idle_enter() so that we stay symetric? And then make xen call the two functions: tick_nohz_idle_enter(); tick_nohz_idle_go_idle(); Also can we rename tick_nohz_idle_go_idle() to tick_nohz_idle_stop_tick() ? This will be more self-explanatory. Thanks.
On Thursday, March 8, 2018 12:39:12 AM CET Frederic Weisbecker wrote: > On Tue, Mar 06, 2018 at 10:02:15AM +0100, Rafael J. Wysocki wrote: > > Index: linux-pm/kernel/sched/idle.c > > =================================================================== > > --- linux-pm.orig/kernel/sched/idle.c > > +++ linux-pm/kernel/sched/idle.c > > @@ -220,13 +220,17 @@ static void do_idle(void) > > */ > > > > __current_set_polling(); > > - tick_nohz_idle_enter(); > > + tick_nohz_idle_prepare(); > > Since we leave tick_nohz_idle_exit() unchanged, can we keep tick_nohz_idle_prepare() > under the name tick_nohz_idle_enter() so that we stay symetric? And then make xen call > the two functions: > > tick_nohz_idle_enter(); > tick_nohz_idle_go_idle(); No problem with that. > Also can we rename tick_nohz_idle_go_idle() to tick_nohz_idle_stop_tick() ? > This will be more self-explanatory. But it doesn't always stop the tick which is why I chose the other name.
Index: linux-pm/kernel/sched/idle.c =================================================================== --- linux-pm.orig/kernel/sched/idle.c +++ linux-pm/kernel/sched/idle.c @@ -220,13 +220,17 @@ static void do_idle(void) */ __current_set_polling(); - tick_nohz_idle_enter(); + tick_nohz_idle_prepare(); while (!need_resched()) { check_pgt_cache(); rmb(); if (cpu_is_offline(cpu)) { + local_irq_disable(); + tick_nohz_idle_go_idle(true); + local_irq_enable(); + cpuhp_report_idle_dead(); arch_cpu_idle_dead(); } @@ -240,10 +244,13 @@ static void do_idle(void) * broadcast device expired for us, we don't want to go deep * idle as we know that the IPI is going to arrive right away. */ - if (cpu_idle_force_poll || tick_check_broadcast_expired()) + if (cpu_idle_force_poll || tick_check_broadcast_expired()) { + tick_nohz_idle_go_idle(false); cpu_idle_poll(); - else + } else { + tick_nohz_idle_go_idle(true); cpuidle_idle_call(); + } arch_cpu_idle_exit(); } Index: linux-pm/kernel/time/tick-sched.c =================================================================== --- linux-pm.orig/kernel/time/tick-sched.c +++ linux-pm/kernel/time/tick-sched.c @@ -1007,7 +1007,7 @@ void tick_nohz_irq_exit(void) struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched); if (ts->inidle) - __tick_nohz_idle_enter(ts, true); + __tick_nohz_idle_enter(ts, false); else tick_nohz_full_update_tick(ts); }