All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4][resend] cpuidle : handle clockevent notify from the cpuidle framework
@ 2013-03-21 12:21 Daniel Lezcano
  2013-03-21 12:21 ` [PATCH 2/4] cpuidle / omap4 : use CPUIDLE_FLAG_TIMER_STOP flag Daniel Lezcano
                   ` (5 more replies)
  0 siblings, 6 replies; 20+ messages in thread
From: Daniel Lezcano @ 2013-03-21 12:21 UTC (permalink / raw)
  To: rjw
  Cc: linaro-kernel, linux-pm, patches, lenb, linus.walleij,
	santosh.shilimkar, rnayak, kernel, tglx

When a cpu enters a deep idle state, the local timers are stopped and
the time framework falls back to the timer device used as a broadcast
timer.

The different cpuidle drivers are calling clockevents_notify ENTER/EXIT
when the idle state stops the local timer.

Add a new flag CPUIDLE_FLAG_TIMER_STOP which can be set by the cpuidle
drivers. If the flag is set, the cpuidle core code takes care of the
notification on behalf of the driver to avoid pointless code duplication.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Len Brown <lenb@kernel.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: Rajendra Nayak <rnayak@ti.com>
Cc: Sascha Hauer <kernel@pengutronix.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/cpuidle/cpuidle.c |    9 +++++++++
 include/linux/cpuidle.h   |    1 +
 2 files changed, 10 insertions(+)

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index eba6929..c500370 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -8,6 +8,7 @@
  * This code is licenced under the GPL.
  */
 
+#include <linux/clockchips.h>
 #include <linux/kernel.h>
 #include <linux/mutex.h>
 #include <linux/sched.h>
@@ -146,12 +147,20 @@ int cpuidle_idle_call(void)
 
 	trace_cpu_idle_rcuidle(next_state, dev->cpu);
 
+	if (drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP)
+		clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER,
+				   &dev->cpu);
+
 	if (cpuidle_state_is_coupled(dev, drv, next_state))
 		entered_state = cpuidle_enter_state_coupled(dev, drv,
 							    next_state);
 	else
 		entered_state = cpuidle_enter_state(dev, drv, next_state);
 
+	if (drv->states[next_state].flags & CPUIDLE_FLAG_TIMER_STOP)
+		clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT,
+				   &dev->cpu);
+
 	trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu);
 
 	/* give the governor an opportunity to reflect on the outcome */
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index 480c14d..a837b33 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -57,6 +57,7 @@ struct cpuidle_state {
 /* Idle State Flags */
 #define CPUIDLE_FLAG_TIME_VALID	(0x01) /* is residency time measurable? */
 #define CPUIDLE_FLAG_COUPLED	(0x02) /* state applies to multiple cpus */
+#define CPUIDLE_FLAG_TIMER_STOP (0x04)  /* timer is stopped on this state */
 
 #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000)
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2013-03-26  8:39 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-21 12:21 [PATCH 1/4][resend] cpuidle : handle clockevent notify from the cpuidle framework Daniel Lezcano
2013-03-21 12:21 ` [PATCH 2/4] cpuidle / omap4 : use CPUIDLE_FLAG_TIMER_STOP flag Daniel Lezcano
2013-03-21 13:01   ` Santosh Shilimkar
2013-03-21 13:05     ` Santosh Shilimkar
2013-03-21 13:14       ` Daniel Lezcano
2013-03-21 13:21         ` Santosh Shilimkar
2013-03-22 17:05   ` Kevin Hilman
2013-03-21 12:21 ` [PATCH 3/4] cpuidle / imx6 " Daniel Lezcano
2013-03-21 13:03   ` Santosh Shilimkar
2013-03-21 12:21 ` [PATCH 4/4] cpuidle / ux500 " Daniel Lezcano
2013-03-21 12:59 ` [PATCH 1/4][resend] cpuidle : handle clockevent notify from the cpuidle framework Santosh Shilimkar
2013-03-21 13:52   ` Daniel Lezcano
2013-03-21 14:04     ` Santosh Shilimkar
2013-03-21 14:41       ` Daniel Lezcano
2013-03-21 14:52         ` Santosh Shilimkar
2013-03-21 15:25           ` Lorenzo Pieralisi
2013-03-26  8:41             ` Santosh Shilimkar
2013-03-21 13:54   ` Daniel Lezcano
2013-03-22  0:41 ` Rafael J. Wysocki
2013-03-22 17:04 ` Kevin Hilman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.