[PATCH] trace: stop critical timings before idle loop on idle=poll

From: Daniel Bristot de Oliveira
Date: Thu Oct 08 2015 - 14:36:34 EST


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@xxxxxxxxxx>
Reviewed-by: Luis Claudio R. Goncalves <lgoncalv@xxxxxxxxxx>
---
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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/