Signed-off-by: Andrew Jones <[email protected]>
---
x86/tsc_adjust.c | 44 +++++++++++++-------------------------------
1 file changed, 13 insertions(+), 31 deletions(-)
diff --git a/x86/tsc_adjust.c b/x86/tsc_adjust.c
index 0e9679235eafe..725e4ff75b4ba 100644
--- a/x86/tsc_adjust.c
+++ b/x86/tsc_adjust.c
@@ -7,35 +7,22 @@ int main()
{
u64 t1, t2, t3, t4, t5;
u64 est_delta_time;
- bool pass = true;
if (cpuid(7).b & (1 << 1)) { // IA32_TSC_ADJUST Feature is enabled?
- if ( rdmsr(IA32_TSC_ADJUST) != 0x0) {
- printf("failure: IA32_TSC_ADJUST msr was incorrectly"
- " initialized\n");
- pass = false;
- }
+ report("IA32_TSC_ADJUST msr initialization",
+ rdmsr(IA32_TSC_ADJUST) == 0x0);
t3 = 100000000000ull;
t1 = rdtsc();
wrmsr(IA32_TSC_ADJUST, t3);
t2 = rdtsc();
- if (rdmsr(IA32_TSC_ADJUST) != t3) {
- printf("failure: IA32_TSC_ADJUST msr read / write"
- " incorrect\n");
- pass = false;
- }
- if (t2 - t1 < t3) {
- printf("failure: TSC did not adjust for IA32_TSC_ADJUST"
- " value\n");
- pass = false;
- }
+ report("IA32_TSC_ADJUST msr read / write",
+ rdmsr(IA32_TSC_ADJUST) == t3);
+ report("TSC adjustment for IA32_TSC_ADJUST value",
+ (t2 - t1) >= t3);
t3 = 0x0;
wrmsr(IA32_TSC_ADJUST, t3);
- if (rdmsr(IA32_TSC_ADJUST) != t3) {
- printf("failure: IA32_TSC_ADJUST msr read / write"
- " incorrect\n");
- pass = false;
- }
+ report("IA32_TSC_ADJUST msr read / write",
+ rdmsr(IA32_TSC_ADJUST) == t3);
t4 = 100000000000ull;
t1 = rdtsc();
wrtsc(t4);
@@ -44,17 +31,12 @@ int main()
// est of time between reading tsc and writing tsc,
// (based on IA32_TSC_ADJUST msr value) should be small
est_delta_time = t4 - t5 - t1;
- if (est_delta_time > 2 * (t2 - t4)) {
- // arbitray 2x latency (wrtsc->rdtsc) threshold
- printf("failure: IA32_TSC_ADJUST msr incorrectly"
- " adjusted on tsc write\n");
- pass = false;
- }
- if (pass) printf("success: IA32_TSC_ADJUST enabled and"
- " working correctly\n");
+ // arbitray 2x latency (wrtsc->rdtsc) threshold
+ report("IA32_TSC_ADJUST msr adjustment on tsc write",
+ est_delta_time <= (2 * (t2 - t4)));
}
else {
- printf("success: IA32_TSC_ADJUST feature not enabled\n");
+ report("IA32_TSC_ADJUST feature not enabled", true);
}
- return pass?0:1;
+ return report_summary();
}
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html