From: Thomas Gleixner <t...@linutronix.de>

This function is intended to use by the freezer once the freezer folks
solved their race issues. Also required to get rid of the ARM BL
switcher tick hackery.

Signed-off-by: Thomas Gleixner <t...@linutronix.de>
Cc: Nicolas Pitre <n...@linaro.org>
Cc: Russell King <rmk+ker...@arm.linux.org.uk>

---
 include/linux/tick.h      |    3 +++
 kernel/time/tick-common.c |   18 +++++++++++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)

Index: linux/include/linux/tick.h
===================================================================
--- linux.orig/include/linux/tick.h
+++ linux/include/linux/tick.h
@@ -27,12 +27,15 @@ extern struct tick_device *tick_get_devi
 
 #ifdef CONFIG_GENERIC_CLOCKEVENTS
 extern void __init tick_init(void);
+/* Should be core only, but arm BL switcher has its homebrewn implementation */
+extern void tick_suspend_local(void);
 /* Should be core only, but XEN resume magic requires this */
 extern void tick_resume_local(void);
 /* CPU hotplug */
 extern void tick_shutdown_local(void);
 #else /* CONFIG_GENERIC_CLOCKEVENTS */
 static inline void tick_init(void) { }
+static inline void tick_suspend_local(void) { }
 static inline void tick_resume_local(void) { }
 static inline void tick_shutdown_local(void) { }
 #endif /* !CONFIG_GENERIC_CLOCKEVENTS */
Index: linux/kernel/time/tick-common.c
===================================================================
--- linux.orig/kernel/time/tick-common.c
+++ linux/kernel/time/tick-common.c
@@ -370,6 +370,20 @@ void tick_shutdown_local(void)
 
 #ifdef CONFIG_PM_SLEEP
 /**
+ * tick_suspend_local - Suspend the local tick device
+ *
+ * Called from the local cpu for freeze with interrupts disabled.
+ *
+ * No locks required. Nothing can change the per cpu device.
+ */
+void tick_suspend_local(void)
+{
+       struct tick_device *td = this_cpu_ptr(&tick_cpu_device);
+
+       clockevents_shutdown(td->evtdev);
+}
+
+/**
  * tick_suspend - Suspend the tick and the broadcast device
  *
  * Called from syscore_suspend() via timekeeping_suspend with only one
@@ -379,9 +393,7 @@ void tick_shutdown_local(void)
  */
 void tick_suspend(void)
 {
-       struct tick_device *td = this_cpu_ptr(&tick_cpu_device);
-
-       clockevents_shutdown(td->evtdev);
+       tick_suspend_local();
        tick_suspend_broadcast();
 }
 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to