[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <10fc3705874aef11dbe152a068b591a7be1899b4.1444314899.git.bristot@redhat.com>
Date: Thu, 8 Oct 2015 15:36:06 -0300
From: Daniel Bristot de Oliveira <bristot@...hat.com>
To: Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Steven Rostedt <rostedt@...dmis.org>
Cc: LKML <linux-kernel@...r.kernel.org>,
"Luis Claudio R. Goncalves" <lgoncalv@...hat.com>
Subject: [PATCH] trace: stop critical timings before idle loop on idle=poll
When using idle=poll, the preemptoff tracer is always showing the idle
task as the culprit for long latencies. That happens because critical
timings are not stopped before idle loop. This patch stops critical
timings before entering the idle loop, starting it again after the
idle loop.
This problem does not affect the irqsoff tracer because interruptions
are enabled before entering the idle loop.
Signed-off-by: Daniel Bristot de Oliveira <bristot@...hat.com>
Reviewed-by: Luis Claudio R. Goncalves <lgoncalv@...hat.com>
---
kernel/sched/idle.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 8f177c7..4a2ef5a 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -57,9 +57,11 @@ static inline int cpu_idle_poll(void)
rcu_idle_enter();
trace_cpu_idle_rcuidle(0, smp_processor_id());
local_irq_enable();
+ stop_critical_timings();
while (!tif_need_resched() &&
(cpu_idle_force_poll || tick_check_broadcast_expired()))
cpu_relax();
+ start_critical_timings();
trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
rcu_idle_exit();
return 1;
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists