From: john stultz <johnstul@us.ibm.com>
To: lkml <linux-kernel@vger.kernel.org>
Cc: rmk+lkml@arm.linux.org.uk, cooloney@kernel.org, starvik@axis.com,
takata@linux-m32r.org, geert@linux-m68k.org,
Roman Zippel <zippel@linux-m68k.org>,
lethal@linux-sh.org, Magnus Damm <magnus.damm@gmail.com>,
wli@holomorphy.com, chris@zankel.net,
Thomas Gleixner <tglx@linutronix.de>
Subject: [RFC][PATCH 1/10] Create arch_gettimeoffset infrastructure for use in the generic timekeeping core.
Date: Wed, 28 Jan 2009 20:06:35 -0800 [thread overview]
Message-ID: <1233201995.6895.27.camel@localhost.localdomain> (raw)
In-Reply-To: <1233201926.6895.25.camel@localhost.localdomain>
Some arches don't supply their own clocksource. This is mainly the case
in architectures that get their inter-tick times by reading the counter
on their interval timer. Since these timers wrap every tick, they're not
really useful as clocksources. Wrapping them to act like one is possible
but not very efficient. So we provide a callout these arches can
implement for use with the jiffies clocksource to provide finer then
tick granular time.
Signed-off-by: John Stultz <johnstul@us.ibm.com>
diff --git a/include/linux/time.h b/include/linux/time.h
index fbbd2a1..4768f16 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -113,6 +113,21 @@ struct timespec current_kernel_time(void);
#define CURRENT_TIME (current_kernel_time())
#define CURRENT_TIME_SEC ((struct timespec) { get_seconds(), 0 })
+/* Some architectures do not supply their own clocksource.
+ * This is mainly the case in architectures that get their
+ * inter-tick times by reading the counter on their interval
+ * timer. Since these timers wrap every tick, they're not really
+ * useful as clocksources. Wrapping them to act like one is possible
+ * but not very efficient. So we provide a callout these arches
+ * can implement for use with the jiffies clocksource to provide
+ * finer then tick granular time.
+ */
+#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
+extern u32 arch_gettimeoffset(void);
+#else
+#define arch_gettimeoffset() (0)
+#endif
+
extern void do_gettimeofday(struct timeval *tv);
extern int do_settimeofday(struct timespec *tv);
extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 900f1b6..45d777f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -77,6 +77,10 @@ static void clocksource_forward_now(void)
clock->cycle_last = cycle_now;
nsec = cyc2ns(clock, cycle_delta);
+
+ /* If arch requires, add in gettimeoffset() */
+ nsec += arch_gettimeoffset();
+
timespec_add_ns(&xtime, nsec);
nsec = ((s64)cycle_delta * clock->mult_orig) >> clock->shift;
@@ -111,6 +115,9 @@ void getnstimeofday(struct timespec *ts)
/* convert to nanoseconds: */
nsecs = cyc2ns(clock, cycle_delta);
+ /* If arch requires, add in gettimeoffset() */
+ nsecs += arch_gettimeoffset();
+
} while (read_seqretry(&xtime_lock, seq));
timespec_add_ns(ts, nsecs);
next prev parent reply other threads:[~2009-01-29 4:06 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-29 4:05 [RFC][PATCH 0/10] Convert the remaining !GENERIC_TIME architectures to use the generic timekeeping core john stultz
2009-01-29 4:06 ` john stultz [this message]
2009-01-29 4:07 ` [RFC][PATCH 2/10] Convert arm to use arch_getoffset() infrastructure john stultz
2009-01-29 4:07 ` [RFC][PATCH 3/10] Convert blackfin " john stultz
2009-01-29 4:08 ` [RFC][PATCH 4/10] Convert cris " john stultz
2009-01-29 4:08 ` [RFC][PATCH 5/10] Convert m32r " john stultz
2009-01-29 4:09 ` [RFC][PATCH 6/10] Convert m68k " john stultz
2009-01-29 4:10 ` [RFC][PATCH 7/10] Convert sh " john stultz
2009-01-29 4:10 ` [RFC][PATCH 8/10] Convert sparc " john stultz
2009-01-29 4:11 ` [RFC][PATCH 9/10] Convert xtensa " john stultz
2009-01-29 4:11 ` [RFC][PATCH 10/10] Remove CONFIG_GENERIC_TIME john stultz
2009-01-29 4:36 ` [RFC][PATCH 8/10] Convert sparc to use arch_getoffset() infrastructure David Miller
2009-01-29 5:36 ` [RFC][PATCH 7/10] Convert sh " Paul Mundt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1233201995.6895.27.camel@localhost.localdomain \
--to=johnstul@us.ibm.com \
--cc=chris@zankel.net \
--cc=cooloney@kernel.org \
--cc=geert@linux-m68k.org \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=rmk+lkml@arm.linux.org.uk \
--cc=starvik@axis.com \
--cc=takata@linux-m32r.org \
--cc=tglx@linutronix.de \
--cc=wli@holomorphy.com \
--cc=zippel@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox