[PATCH v2 1/2] clocksource: track usage
From: Thomas Gleixner <hidden>
Date: 2015-01-20 10:52:48
Also in:
lkml
On Fri, 16 Jan 2015, Alexandre Belloni wrote:
quoted hunk ↗ jump to hunk
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index abcafaa20b86..7735902fc5f6 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h@@ -210,6 +210,8 @@ struct clocksource { #define CLOCK_SOURCE_SUSPEND_NONSTOP 0x80 #define CLOCK_SOURCE_RESELECT 0x100 +#define CLOCK_SOURCE_USED 0x200
You track whether the clocksource is enabled or not, right?
quoted hunk ↗ jump to hunk
/* simplify initialization of mask field */ #define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1)@@ -282,6 +284,8 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) extern int clocksource_register(struct clocksource*); extern int clocksource_unregister(struct clocksource*); +extern int clocksource_enable(struct clocksource *); +extern void clocksource_disable(struct clocksource *);
This should be in kernel/time/timekeeping_internal.h
quoted hunk ↗ jump to hunk
extern void clocksource_touch_watchdog(void); extern struct clocksource* clocksource_get_next(void); extern void clocksource_change_rating(struct clocksource *cs, int rating);diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index b79f39bda7e1..03cfc5a08e3b 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c@@ -889,6 +889,36 @@ int clocksource_unregister(struct clocksource *cs) } EXPORT_SYMBOL(clocksource_unregister); +/** + * clocksource_enable - enable a registered clocksource + * @cs: clocksource to enable + */ +int clocksource_enable(struct clocksource *cs) +{ + int ret = 0; + + if (cs->enable) + ret = cs->enable(cs); + + if (!ret) + cs->flags |= CLOCK_SOURCE_USED; + + return ret; +} +EXPORT_SYMBOL(clocksource_enable);
Why on earth do you want to export that?
+/**
+ * clocksource_disable - disable a registered clocksource
+ * @cs: clocksource to disable
+ */
+void clocksource_disable(struct clocksource *cs)
+{
+ cs->flags &= ~CLOCK_SOURCE_USED;
+ if (cs->disable)
+ cs->disable(cs);
+}
+EXPORT_SYMBOL(clocksource_disable);Ditto. Thanks, tglx