2006-03-04 05:02:24

by john stultz

[permalink] [raw]
Subject: [RFC][PATCH] export clocksource resolution (experimental)

Hey Thomas,
Earlier there was some discussion of trying to export the clocksource
resolution so it could be used to make sure we don't expire hrtimers
early. I scratched out this first pass patch to provide an interface to
do so. Let me know if this was similar to what you were thinking of.

thanks
-john

include/linux/timeofday.h | 1 +
kernel/time/timeofday.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+)

linux-2.6.16-rc5_timeofday-clocksource-resolution_B20.patch
============================================
diff --git a/include/linux/timeofday.h b/include/linux/timeofday.h
index 5222c4c..fb47e82 100644
--- a/include/linux/timeofday.h
+++ b/include/linux/timeofday.h
@@ -30,6 +30,7 @@ extern int do_settimeofday(struct timesp

/* Internal functions */
extern int timeofday_is_continuous(void);
+extern u32 timeofday_get_clockres(void);
extern void timeofday_init(void);

#ifndef CONFIG_IS_TICK_BASED
diff --git a/kernel/time/timeofday.c b/kernel/time/timeofday.c
index 8085b86..5d1d6e4 100644
--- a/kernel/time/timeofday.c
+++ b/kernel/time/timeofday.c
@@ -650,6 +650,24 @@ int timeofday_is_continuous(void)
}

/**
+ * timeofday_get_clockres - returns the underlying clocksource's resolution
+ */
+u32 timeofday_get_clockres(void)
+{
+ unsigned long seq;
+ u32 res;
+ do {
+ seq = read_seqbegin(&system_time_lock);
+
+ /* take one cycle -> N+1 nsecs */
+ res = cyc2ns(clock, 0, 1) + 1;
+
+ } while (read_seqretry(&system_time_lock, seq));
+
+ return res;
+}
+
+/**
* timeofday_init - Initializes time variables
*/
void __init timeofday_init(void)