All,
Here is the next rev of my monotonic-clock patch. Adds fixes to
insure atomicity when reading the cyclone register, as well as minor
cleanups to the scaled math code. I plan on submitting this later this
week if no major complaints are raised.
This patch, written with the advice of Joel Becker, addresses a
problem with the hangcheck-timer. The basic problem is that the
hangcheck-timer code (Required for Oracle) needs a accurate hard clock
which can be used to detect OS stalls (due to udelay() or pci bus hangs)
that would cause system time to skew (its sort of a sanity check that
insures the system's notion of time is accurate). However, currently
they are using get_cycles() to fetch the cpu's TSC register, thus this
does not work on systems w/o a synced TSC. As suggested by Andi Kleen
(see thread here:
http://www.uwsg.iu.edu/hypermail/linux/kernel/0302.0/1234.html ) I've
worked with Joel and others to implement the monotonic_clock()
interface. Some of the major considerations made when writing this patch
were:
o Needs to be able to return accurate time in the absence of
multiple timer interrupts
o Needs to be abstracted out from the hardware
o Avoids impacting gettimeofday() performance
This interface returns a unsigned long long representing the number of
nanoseconds that has passed since time_init().
Future plans to the interface include properly handling cpu_freq changes
and porting to the different arches.
Comments, suggestions and flames welcome.
thanks
-john