aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-05-16 13:40:51 +0100
committerKeir Fraser <keir@xen.org>2011-05-16 13:40:51 +0100
commit6aa8e87387f01788698d9a2806bf06c5d238b5f8 (patch)
treefb62eee6d558d803513da2d0e5884c52b48dc427
parenta9e870539a2e3d1741a485883b2ca5f2763add73 (diff)
downloadxen-6aa8e87387f01788698d9a2806bf06c5d238b5f8.tar.gz
xen-6aa8e87387f01788698d9a2806bf06c5d238b5f8.tar.bz2
xen-6aa8e87387f01788698d9a2806bf06c5d238b5f8.zip
x86/tsc: Remove incorrect assertion from cstate_restore_tsc()...
..fix and move to write_tsc(). Signed-off-by: Keir Fraser <keir@xen.org> xen-unstable changeset: 23342:16d12acccacf xen-unstable date: Mon May 16 13:24:05 2011 +0100
-rw-r--r--xen/arch/x86/time.c2
-rw-r--r--xen/include/asm-x86/msr.h8
2 files changed, 7 insertions, 3 deletions
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c
index c08f815b17..286281f16b 100644
--- a/xen/arch/x86/time.c
+++ b/xen/arch/x86/time.c
@@ -724,8 +724,6 @@ void cstate_restore_tsc(void)
new_tsc = t->local_tsc_stamp + scale_delta(stime_delta, &sys_to_tsc);
- ASSERT(boot_cpu_has(X86_FEATURE_TSC_RELIABLE));
-
write_tsc(new_tsc);
}
diff --git a/xen/include/asm-x86/msr.h b/xen/include/asm-x86/msr.h
index f84c0dddf8..4335bf551f 100644
--- a/xen/include/asm-x86/msr.h
+++ b/xen/include/asm-x86/msr.h
@@ -82,7 +82,13 @@ static inline void wrmsrl(unsigned int msr, __u64 val)
} while(0)
#endif
-#define write_tsc(val) wrmsrl(MSR_IA32_TSC, val)
+#define __write_tsc(val) wrmsrl(MSR_IA32_TSC, val)
+#define write_tsc(val) ({ \
+ /* Reliable TSCs are in lockstep across all CPUs. We should \
+ * never write to them. */ \
+ ASSERT(!boot_cpu_has(X86_FEATURE_TSC_RELIABLE)); \
+ __write_tsc(val); \
+})
#define write_rdtscp_aux(val) wrmsr(MSR_TSC_AUX, (val), 0)