x86/tsc: Always Running Timer (ART) correlated clocksource
authorChristopher S. Hall <christopher.s.hall@intel.com>
Mon, 29 Feb 2016 14:33:47 +0000 (06:33 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Thu, 3 Mar 2016 22:23:34 +0000 (14:23 -0800)
commitf9677e0f83080bb4186865868c359e72e1fac1ea
tree914a27f215d8c86f8ca60154c062a1281cffe677
parent2c756feb18d9ec258dbb3a3d11c47e28820690d7
x86/tsc: Always Running Timer (ART) correlated clocksource

On modern Intel systems TSC is derived from the new Always Running Timer
(ART). ART can be captured simultaneous to the capture of
audio and network device clocks, allowing a correlation between timebases
to be constructed. Upon capture, the driver converts the captured ART
value to the appropriate system clock using the correlated clocksource
mechanism.

On systems that support ART a new CPUID leaf (0x15) returns parameters
“m” and “n” such that:

TSC_value = (ART_value * m) / n + k [n >= 1]

[k is an offset that can adjusted by a privileged agent. The
IA32_TSC_ADJUST MSR is an example of an interface to adjust k.
See 17.14.4 of the Intel SDM for more details]

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: kevin.b.stanton@intel.com
Cc: kevin.j.clarke@intel.com
Cc: hpa@zytor.com
Cc: jeffrey.t.kirsher@intel.com
Cc: netdev@vger.kernel.org
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Christopher S. Hall <christopher.s.hall@intel.com>
[jstultz: Tweaked to fix build issue, also reworked math for
64bit division on 32bit systems, as well as !CONFIG_CPU_FREQ build
fixes]
Signed-off-by: John Stultz <john.stultz@linaro.org>
arch/x86/include/asm/cpufeature.h
arch/x86/include/asm/tsc.h
arch/x86/kernel/tsc.c