lkml.org 
[lkml]   [2014]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH V2 14/19] tick-sched: add comment about 'idle_active' in tick_nohz_idle_exit()
On Tuesday 22 April 2014 04:50 AM, Frederic Weisbecker wrote:
> It's still over-detailed. Much of the above is easily deduced after common review. OTOH
> I proposed to summarize there: https://lkml.org/lkml/2014/4/11/334
> The below disambiguates it a bit further.

Hmm.. Something broke for sure in my repo. I do remember updating this patch with your
comments and something went wrong while playing with patches.

Sorry for that. Fixed my repo now.

> Now it's eventually getting as big as your comment ;-)
>
>
> /*
> * ts->idle_active drives the idle time which typically elapses in the idle loop
> * but breaks on IRQs interrupting idle loop.
> *
> * Hence ts->idle_active can be 1 here if we exit the idle loop without the help of
> * an IRQ. OTOH it can be 0 on idle exit if a wake up IPI pulled the CPU out of
> * the idle loop. Since we know that we'll be exiting the idle task after the wake
> * up IPI, all the pending idle sleep time is flushed on irq entry and no more is
> * accounted further thanks to the need_resched() check on irq_exit().
> */

@Thomas: Please consider this patch instead:

Author: Viresh Kumar <viresh.kumar@linaro.org>
Date: Mon Apr 21 15:25:10 2014 +0530

tick-sched: add comment about 'idle_active' in tick_nohz_idle_exit()

The sequence of calls for dynticks CPUs is a bit confusing. Add a comment in
tick_nohz_idle_exit() to mention it clearly. All information required is in
commit and this conversation with Frederic.

https://lkml.org/lkml/2014/4/10/355

Suggested-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
kernel/time/tick-sched.c | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 71f64ee..b2f024f 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -922,6 +922,17 @@ void tick_nohz_idle_exit(void)

ts->inidle = 0;

+ /*
+ * ts->idle_active drives the idle time which typically elapses in the
+ * idle loop but breaks on IRQs interrupting idle loop.
+ *
+ * Hence ts->idle_active can be 1 here if we exit the idle loop without
+ * the help of an IRQ. OTOH it can be 0 on idle exit if a wake up IPI
+ * pulled the CPU out of the idle loop. Since we know that we'll be
+ * exiting the idle task after the wake up IPI, all the pending idle
+ * sleep time is flushed on irq entry and no more is accounted further
+ * thanks to the need_resched() check on irq_exit().
+ */
if (ts->idle_active || ts->tick_stopped)
now = ktime_get();



\
 
 \ /
  Last update: 2014-04-22 07:01    [W:0.043 / U:0.488 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site