From: john stultz <johnstul@us.ibm.com>
To: Roman Zippel <zippel@linux-m68k.org>
Cc: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: clocksource
Date: Mon, 05 Jun 2006 13:53:32 -0700 [thread overview]
Message-ID: <1149540812.11470.4.camel@localhost.localdomain> (raw)
In-Reply-To: <1149538810.9226.29.camel@localhost.localdomain>
On Mon, 2006-06-05 at 13:20 -0700, john stultz wrote:
> On Mon, 2006-06-05 at 01:50 +0200, Roman Zippel wrote:
> > > time-let-user-request-precision-from-current_tick_length.patch
> >
> > This is broken, as it simply throws away resolution depending on the
> > clock.
>
> So if the clock shift value is less then 12 (SHIFT_SCALE - 10), this is
> true, and currently that's only the jiffies case.
>
> Just to be clear, are you then suggesting that the accumulation in
> update_wall_time should be done in a fixed shifted nanosecond unit
> regardless of the clock shift value? Is SHIFT_SCALE-10, good enough in
> your mind for this?
>
> That seems not too difficult to do, and can be done w/ an incremental
> patch. I'll try to crank that out today.
Just to quickly get some feedback on this. Currently untested (I'm
working on that part now - Andrew, I'll send it to once it clears), but
it builds.
Roman: Your thoughts? Does it cover your concern?
thanks
-john
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index 4bc9428..884980a 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -146,14 +146,17 @@ static inline s64 cyc2ns(struct clocksou
return ret;
}
+
+#define CLOCKSOURCE_INTERVAL_SHIFT (SHIFT_SCALE - 10)
+
/**
* clocksource_calculate_interval - Calculates a clocksource interval struct
*
* @c: Pointer to clocksource.
* @length_nsec: Desired interval length in nanoseconds.
*
- * Calculates a fixed cycle/nsec interval for a given clocksource/adjustment
- * pair and interval request.
+ * Calculates a fixed cycle/nsec interval (in CLOCKSOURCE_INTERVAL_SHIFT units)
+ * for a given clocksource/adjustment pair and interval request.
*
* Unless you're the timekeeping code, you should not be using this!
*/
@@ -164,7 +167,7 @@ static inline void clocksource_calculate
/* XXX - All of this could use a whole lot of optimization */
tmp = length_nsec;
- tmp <<= c->shift;
+ tmp <<= CLOCKSOURCE_INTERVAL_SHIFT;
tmp += c->mult/2;
do_div(tmp, c->mult);
@@ -215,8 +218,8 @@ static inline int error_aproximation(u64
* @cycles_delta: Current unacounted cycle delta
* @error: Pointer to current error value
*
- * Returns clock shifted nanosecond adjustment to be applied against
- * the accumulated time value (ie: xtime).
+ * Returns CLOCKSOURCE_INTERVAL_SHIFT shifted nanosecond adjustment to be
+ * applied against the accumulated time value (ie: xtime).
*
* If the error value is large enough, this function calulates the
* (power of two) adjustment value, and adjusts the clock's mult and
diff --git a/kernel/timer.c b/kernel/timer.c
index 0569d40..588bfcd 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -1029,8 +1029,8 @@ static void update_wall_time(void)
s64 snsecs_per_sec;
cycle_t now, offset;
- snsecs_per_sec = (s64)NSEC_PER_SEC << clock->shift;
- remainder_snsecs += (s64)xtime.tv_nsec << clock->shift;
+ snsecs_per_sec = (s64)NSEC_PER_SEC << CLOCKSOURCE_INTERVAL_SHIFT;
+ remainder_snsecs += (s64)xtime.tv_nsec << CLOCKSOURCE_INTERVAL_SHIFT;
now = clocksource_read(clock);
offset = (now - last_clock_cycle)&clock->mask;
@@ -1039,8 +1039,11 @@ static void update_wall_time(void)
* case of lost or late ticks, it will accumulate correctly.
*/
while (offset > clock->interval_cycles) {
- /* get the ntp interval in clock shifted nanoseconds */
- s64 ntp_snsecs = current_tick_length(clock->shift);
+ /* get the ntp interval in CLOCKSOURCE_INTERVAL_SHIFT
+ * shifted nanoseconds:
+ */
+ s64 ntp_snsecs =
+ current_tick_length(CLOCKSOURCE_INTERVAL_SHIFT);
/* accumulate one interval */
remainder_snsecs += clock->interval_snsecs;
@@ -1049,7 +1052,7 @@ static void update_wall_time(void)
/* interpolator bits */
time_interpolator_update(clock->interval_snsecs
- >> clock->shift);
+ >> CLOCKSOURCE_INTERVAL_SHIFT);
/* increment the NTP state machine */
update_ntp_one_tick();
@@ -1066,8 +1069,8 @@ static void update_wall_time(void)
}
}
/* store full nanoseconds into xtime */
- xtime.tv_nsec = remainder_snsecs >> clock->shift;
- remainder_snsecs -= (s64)xtime.tv_nsec << clock->shift;
+ xtime.tv_nsec = remainder_snsecs >> CLOCKSOURCE_INTERVAL_SHIFT;
+ remainder_snsecs -= (s64)xtime.tv_nsec << CLOCKSOURCE_INTERVAL_SHIFT;
/* check to see if there is a new clocksource to use */
if (change_clocksource()) {
next prev parent reply other threads:[~2006-06-05 20:53 UTC|newest]
Thread overview: 166+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-04 20:50 2.6.18 -mm merge plans Andrew Morton
2006-06-04 21:20 ` 2.6.18 hdrinstall (Re: 2.6.18 -mm merge plans) Bernhard Rosenkraenzer
2006-06-04 21:33 ` header cleanup and install David Woodhouse
2006-06-04 21:43 ` Andrew Morton
2006-06-05 10:52 ` Jens Axboe
2006-06-05 10:54 ` David Woodhouse
2006-06-05 10:59 ` Jens Axboe
2006-06-05 10:57 ` David Woodhouse
2006-06-05 11:03 ` Jens Axboe
2006-06-05 18:09 ` Andrew Morton
2006-06-05 19:19 ` David Woodhouse
2006-06-17 20:35 ` Alistair John Strachan
2006-06-17 21:20 ` David Woodhouse
2006-06-04 21:36 ` 2.6.18 -mm merge plans Alan Cox
2006-06-04 21:41 ` kbuild, kconfig and hrdinstall stuff Sam Ravnborg
2006-06-04 21:54 ` David Woodhouse
2006-06-04 23:04 ` klibc (was: 2.6.18 -mm merge plans) H. Peter Anvin
2006-06-05 18:09 ` Roman Zippel
2006-06-06 15:20 ` Pavel Machek
2006-06-06 20:56 ` Rafael J. Wysocki
2006-06-07 3:37 ` H. Peter Anvin
2006-06-07 4:00 ` Nigel Cunningham
2006-06-07 4:10 ` H. Peter Anvin
2006-06-07 4:25 ` Nigel Cunningham
2006-06-07 4:26 ` klibc H. Peter Anvin
2006-06-07 6:22 ` klibc Nigel Cunningham
2006-06-07 6:38 ` klibc H. Peter Anvin
2006-06-07 6:51 ` klibc (was: 2.6.18 -mm merge plans) Joshua Hudson
2006-06-07 21:12 ` H. Peter Anvin
2006-06-09 8:03 ` klibc Nix
2006-06-09 18:45 ` klibc H. Peter Anvin
[not found] ` <bda6d13a0606091050n40fda044v668eef09af3c29a7@mail.gmail.com>
[not found] ` <871wty6rl9.fsf@hades.wkstn.nix>
2006-06-09 22:28 ` klibc Joshua Hudson
2006-06-09 22:48 ` klibc H. Peter Anvin
2006-06-09 23:13 ` klibc Joshua Hudson
2006-06-09 23:44 ` klibc H. Peter Anvin
2006-06-16 6:02 ` klibc Joshua Hudson
2006-06-16 19:19 ` klibc H. Peter Anvin
2006-06-07 8:44 ` klibc (was: 2.6.18 -mm merge plans) Pavel Machek
2006-06-07 9:44 ` Rafael J. Wysocki
2006-06-04 23:50 ` clocksource Roman Zippel
2006-06-05 20:20 ` clocksource john stultz
2006-06-05 20:53 ` john stultz [this message]
2006-06-05 21:07 ` clocksource Roman Zippel
2006-06-06 19:42 ` clocksource john stultz
2006-06-07 0:41 ` clocksource Roman Zippel
2006-06-08 8:05 ` clocksource john stultz
2006-06-15 11:40 ` clocksource Roman Zippel
2006-06-16 3:21 ` clocksource john stultz
2006-06-16 3:35 ` clocksource john stultz
2006-06-16 15:33 ` clocksource Roman Zippel
2006-06-16 18:48 ` clocksource john stultz
2006-06-17 19:45 ` clocksource Roman Zippel
2006-06-17 17:04 ` clocksource Andrew Morton
2006-06-05 0:02 ` utsname/hostname Randy.Dunlap
2006-06-05 1:06 ` utsname/hostname Andrew Morton
2006-06-05 3:10 ` utsname/hostname Randy.Dunlap
[not found] ` <20060605002807.GA4919@mail.ustc.edu.cn>
2006-06-05 0:28 ` readahead benchmark Fengguang Wu
2006-06-05 1:02 ` Andrew Morton
2006-06-05 0:32 ` new SCSI drivers (was Re: 2.6.18 -mm merge plans) Jeff Garzik
2006-06-05 1:06 ` wireless " Jeff Garzik
2006-06-05 1:15 ` Andrew Morton
2006-06-05 8:33 ` Andreas Mohr
2006-06-05 8:45 ` Arjan van de Ven
2006-06-05 10:26 ` Alan Cox
2006-06-05 10:35 ` Arjan van de Ven
2006-06-05 10:59 ` Alan Cox
2006-06-10 6:58 ` Pavel Machek
2006-06-05 8:54 ` Christoph Hellwig
2006-06-05 12:33 ` Jeff Garzik
2006-06-05 12:48 ` Arjan van de Ven
2006-06-05 12:52 ` Jeff Garzik
2006-06-05 14:02 ` Linux kernel and laws Adrian Bunk
2006-06-05 14:21 ` linux-os (Dick Johnson)
2006-06-06 5:33 ` Evgeniy Polyakov
2006-06-05 13:27 ` wireless (was Re: 2.6.18 -mm merge plans) John W. Linville
2006-06-05 13:31 ` Christoph Hellwig
2006-06-05 13:42 ` Arjan van de Ven
2006-06-05 16:24 ` Alan Cox
2006-06-29 14:26 ` ACX100 (softmac-based) driver ready to merge, but is it legal? -- " John W. Linville
[not found] ` <20060629144233.GB24463@tuxdriver.com>
2006-06-29 14:47 ` [Acx100-users] Denis Vlasenko, where are you? (mail bounced) Andreas Mohr
2006-06-05 1:32 ` merging new drivers (was Re: 2.6.18 -mm merge plans) Jeff Garzik
2006-06-05 1:47 ` Andrew Morton
2006-06-05 8:59 ` Christoph Hellwig
2006-06-05 9:10 ` Andrew Morton
2006-06-05 9:16 ` Arjan van de Ven
2006-06-05 11:10 ` Ivan Novick
2006-06-05 11:26 ` Adrian Bunk
2006-06-05 6:58 ` Francois Romieu
2006-06-05 10:32 ` Alan Cox
2006-06-05 10:36 ` Arjan van de Ven
2006-06-06 2:02 ` Chris Wright
2006-06-06 7:01 ` Andi Kleen
2006-06-06 13:04 ` Steven Rostedt
2006-06-05 13:38 ` 2.6.18 -mm merge plans -- GFS David Woodhouse
2006-06-05 14:10 ` Russell King
2006-06-05 15:01 ` Steven Whitehouse
2006-06-07 7:12 ` Steven Whitehouse
2006-06-05 14:08 ` 2.6.18 -mm merge plans Oleg Nesterov
2006-06-05 14:43 ` Serge E. Hallyn
2006-06-08 19:56 ` Eric W. Biederman
2006-06-09 13:02 ` Serge E. Hallyn
2006-06-09 23:25 ` Serge E. Hallyn
2006-06-10 0:39 ` Eric W. Biederman
2006-06-10 1:23 ` Serge E. Hallyn
2006-06-10 7:52 ` Eric W. Biederman
2006-06-10 8:09 ` Eric W. Biederman
2006-06-10 9:53 ` Christoph Hellwig
[not found] ` <20060605010501.GA4931@mail.ustc.edu.cn>
2006-06-05 1:05 ` statistics infrastructure Fengguang Wu
2006-06-05 16:30 ` Greg KH
2006-06-13 23:47 ` statistics infrastructure (in -mm tree) review Greg KH
2006-06-14 0:18 ` Randy.Dunlap
2006-06-14 16:45 ` Greg KH
2006-06-14 22:48 ` Martin Peschke
2006-06-19 22:12 ` Greg KH
2006-06-20 15:40 ` Martin Peschke
2006-06-20 16:50 ` Randy.Dunlap
2006-06-21 18:51 ` Martin Peschke
2006-06-21 19:38 ` Matthew Frost
2006-06-22 11:43 ` Martin Peschke
2006-06-14 5:04 ` Andi Kleen
2006-06-14 22:49 ` Martin Peschke
2006-06-16 20:40 ` Greg KH
2006-06-16 21:34 ` Martin Peschke
2006-06-17 6:51 ` Andi Kleen
2006-06-17 11:03 ` Martin Peschke
2006-06-17 10:30 ` Martin Peschke
2006-06-06 0:54 ` Merge of per task delay accounting (was Re: 2.6.18 -mm merge plans) Balbir Singh
2006-06-06 22:28 ` Shailabh Nagar
2006-06-06 22:40 ` Andrew Morton
2006-06-08 14:27 ` Shailabh Nagar
2006-06-08 17:42 ` Andrew Morton
2006-06-08 18:36 ` Shailabh Nagar
2006-06-08 19:33 ` Balbir Singh
2006-06-06 22:52 ` Jay Lan
2006-06-06 22:55 ` Shailabh Nagar
2006-06-12 12:02 ` Martin Peschke
2006-06-12 13:28 ` Shailabh Nagar
2006-06-06 12:32 ` 2.6.18 -mm pi-futex merge Steven Rostedt
2006-06-06 13:34 ` Roman Zippel
2006-06-06 13:44 ` Steven Rostedt
2006-06-06 14:42 ` genirq Ingo Molnar
2006-06-06 16:56 ` genirq Daniel Walker
2006-06-07 8:42 ` genirq Ingo Molnar
2006-06-07 3:46 ` genirq Benjamin Herrenschmidt
2006-06-06 14:53 ` 2.6.18 -mm merge plans Ingo Molnar
2006-06-06 16:02 ` Andrew Morton
2006-06-06 16:35 ` Arjan van de Ven
2006-06-06 20:47 ` lock validator [2.6.18 -mm merge plans] Ingo Molnar
2006-06-07 3:52 ` mutex vs. local irqs (Was: 2.6.18 -mm merge plans) Benjamin Herrenschmidt
2006-06-07 4:29 ` Andrew Morton
2006-06-07 5:04 ` Benjamin Herrenschmidt
2006-06-07 5:29 ` Andrew Morton
2006-06-07 6:44 ` Benjamin Herrenschmidt
2006-06-07 7:03 ` Andrew Morton
2006-06-07 13:21 ` Ingo Molnar
2006-06-08 0:31 ` Benjamin Herrenschmidt
2006-06-08 10:49 ` David Woodhouse
2006-06-08 10:53 ` Ingo Molnar
2006-06-08 11:01 ` David Woodhouse
2006-06-08 11:17 ` Roman Zippel
2006-06-08 13:38 ` Benjamin Herrenschmidt
2006-06-08 14:02 ` Roman Zippel
2006-06-08 23:40 ` Benjamin Herrenschmidt
2006-06-08 22:59 ` Paul Mackerras
2006-06-10 10:22 ` 2.6.18 -mm merge plans Christoph Hellwig
2006-06-14 15:18 ` Michael Halcrow
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=1149540812.11470.4.camel@localhost.localdomain \
--to=johnstul@us.ibm.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--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