* X86_64 monotonic_clock goes backwards
@ 2006-08-04 14:34 Dimitri Sivanich
2006-08-05 0:09 ` Andi Kleen
0 siblings, 1 reply; 2+ messages in thread
From: Dimitri Sivanich @ 2006-08-04 14:34 UTC (permalink / raw)
To: linux-kernel
I've noticed some erratic behavior while testing the X86_64 version
of monotonic_clock().
While spinning in a loop reading monotonic clock values (pinned to a
single cpu) I noticed that the difference between subsequent values
occasionally went negative (time going backwards).
I found that in the following code:
this_offset = get_cycles_sync();
/* FIXME: 1000 or 1000000? */
--> offset = (this_offset - last_offset)*1000 / cpu_khz;
}
return base + offset;
the offset sometimes turns out to be 0, even though
this_offset > last_offset.
The following patch does correct this, and -seems- to be correct.
Some reording of code may still be desired.
Dimitri
Index: linux/arch/x86_64/kernel/time.c
===================================================================
--- linux.orig/arch/x86_64/kernel/time.c
+++ linux/arch/x86_64/kernel/time.c
@@ -281,6 +281,7 @@ static void set_rtc_mmss(unsigned long n
* Note: This function is required to return accurate
* time even in the absence of multiple timer ticks.
*/
+static inline unsigned long long cycles_2_ns(unsigned long long cyc);
unsigned long long monotonic_clock(void)
{
unsigned long seq;
@@ -305,8 +306,7 @@ unsigned long long monotonic_clock(void)
base = monotonic_base;
} while (read_seqretry(&xtime_lock, seq));
this_offset = get_cycles_sync();
- /* FIXME: 1000 or 1000000? */
- offset = (this_offset - last_offset)*1000 / cpu_khz;
+ offset = cycles_2_ns(this_offset - last_offset);
}
return base + offset;
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: X86_64 monotonic_clock goes backwards
2006-08-04 14:34 X86_64 monotonic_clock goes backwards Dimitri Sivanich
@ 2006-08-05 0:09 ` Andi Kleen
0 siblings, 0 replies; 2+ messages in thread
From: Andi Kleen @ 2006-08-05 0:09 UTC (permalink / raw)
To: Dimitri Sivanich; +Cc: linux-kernel
Dimitri Sivanich <sivanich@sgi.com> writes:
> I've noticed some erratic behavior while testing the X86_64 version
> of monotonic_clock().
Added thanks.
-Andi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-08-05 0:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-04 14:34 X86_64 monotonic_clock goes backwards Dimitri Sivanich
2006-08-05 0:09 ` Andi Kleen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox