Commit 76d3b851 authored by Thomas Gleixner's avatar Thomas Gleixner

x86/tsc: Prepare warp test for TSC adjustment

To allow TSC compensation cross nodes its necessary to know in which
direction the TSC warp was observed. Return the maximum observed value on
the calling CPU so the caller can determine the direction later.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Link: http://lkml.kernel.org/r/20161119134017.970859287@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 4c5e3c63
...@@ -166,9 +166,9 @@ static int random_warps; ...@@ -166,9 +166,9 @@ static int random_warps;
* TSC-warp measurement loop running on both CPUs. This is not called * TSC-warp measurement loop running on both CPUs. This is not called
* if there is no TSC. * if there is no TSC.
*/ */
static void check_tsc_warp(unsigned int timeout) static cycles_t check_tsc_warp(unsigned int timeout)
{ {
cycles_t start, now, prev, end; cycles_t start, now, prev, end, cur_max_warp = 0;
int i, cur_warps = 0; int i, cur_warps = 0;
start = rdtsc_ordered(); start = rdtsc_ordered();
...@@ -209,6 +209,7 @@ static void check_tsc_warp(unsigned int timeout) ...@@ -209,6 +209,7 @@ static void check_tsc_warp(unsigned int timeout)
if (unlikely(prev > now)) { if (unlikely(prev > now)) {
arch_spin_lock(&sync_lock); arch_spin_lock(&sync_lock);
max_warp = max(max_warp, prev - now); max_warp = max(max_warp, prev - now);
cur_max_warp = max_warp;
/* /*
* Check whether this bounces back and forth. Only * Check whether this bounces back and forth. Only
* one CPU should observe time going backwards. * one CPU should observe time going backwards.
...@@ -223,6 +224,7 @@ static void check_tsc_warp(unsigned int timeout) ...@@ -223,6 +224,7 @@ static void check_tsc_warp(unsigned int timeout)
WARN(!(now-start), WARN(!(now-start),
"Warning: zero tsc calibration delta: %Ld [max: %Ld]\n", "Warning: zero tsc calibration delta: %Ld [max: %Ld]\n",
now-start, end-start); now-start, end-start);
return cur_max_warp;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment