lkml.org 
[lkml]   [2015]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 34/35] tick: Provide tick_suspend_local()
From: Thomas Gleixner <tglx@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 <tglx@linutronix.de>
Cc: Nicolas Pitre <nico@linaro.org>
Cc: Russell King <rmk+kernel@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();
}




\
 
 \ /
  Last update: 2015-02-16 14:21    [W:0.780 / U:0.604 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site