Resend - Added x86/tsc_adjust.c to test the ia32_tsc_adjust funtionality.
PATCH 1/1 Resend - Added x86/tsc_adjust.c to test the ia32_tsc_adjust funtionality.
Signed-off-by Will Auld <[email protected]>
--- config-x86-common.mak | 5 ++++- x86/tsc_adjust.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 x86/tsc_adjust.c
config-x86-common.mak +4 -1
@@ -34,7 +34,8 @@ tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ - $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat $(TEST_DIR)/asyncpf.flat + $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ + $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat ifdef API tests-common += api/api-sample
@@ -64,6 +65,8 @@ $(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o $(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o +$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o + $(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
x86/tsc_adjust.c new file +43 -0
43 lines not on this page · raw message
Signature · 1 line
1.8.0.rc0
Will,
1. Please check CPUID before using ADJUST_TSC MSR, exit test successfully if CPUID bit disabled.
2. Please test the implementation of ADJUST_TSC MSR (functional test). vmexit.flat test can be used for performance of MSR emulation.
Example
tsc1 = rdtsc();
wrmsr(IA32_TSC_ADJUST, 100000000000ull);
tsc2 = rdtsc();
if (tsc2 - tsc1 < 100000000000ull) {
printf("failure ... should be ...");
failure++;
}
...
write to tsc
check if IA32_TSC_ADJUST is adjusted accordingly
return !failure ? 0 : 1;Thanks
Quoted 88 lines · Will Auld
Signed-off-by Will Auld <[email protected]>--- config-x86-common.mak | 5 ++++- x86/tsc_adjust.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 x86/tsc_adjust.cconfig-x86-common.mak +4
-1@@ -34,7 +34,8 @@ tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \ $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \ $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \ $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \ - $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat $(TEST_DIR)/asyncpf.flat + $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \ + $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat ifdef API tests-common += api/api-sample@@ -64,6 +65,8 @@ $(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o $(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o +$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o + $(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.ox86/tsc_adjust.c new file +43
-0@@ -0,0 +1,43 @@ +#include "libcflat.h" +#include "processor.h" + +#define IA32_TSC_ADJUST 0x3b + +int main () +{ +u64 t1, t2, t3, t4, t5; +u64 lat; + + t3 =0x0 ; + + t1 =rdtsc (); +wrmsr (IA32_TSC_ADJUST , t3); + t2 =rdtsc (); + lat = t2 - t1; +printf ("rdtsc/wrmsr/rdtsc latency %lld\n" , lat); +printf ("Initial rdtsc: %lld\n" , t2); + + t1 =rdmsr (IA32_TSC_ADJUST ); +printf ("Initial rdmsr IA32_TSC_ADJUST: %lld\n" , t1); + + t5 =100000000000ull ; +wrtsc (t5); + t1 =rdmsr (IA32_TSC_ADJUST ); +printf ("wrtsc %lld, rdmsr IA32_TSC_ADJUST: %lld\n" , t5, t1); + +wrmsr (IA32_TSC_ADJUST , t3); + t2 =rdtsc (); + t1 =rdmsr (IA32_TSC_ADJUST ); +printf ("wrmsr IA32_TSC_ADJUST %lld, rdmsr IA32_TSC_ADJUST: %lld, rdtsc: %lld\n" , t3, t1, t2); + + t3 =0xffff ; + t4 =rdtsc (); +wrmsr (IA32_TSC_ADJUST , t3); + t2 =rdtsc (); + t1 =rdmsr (IA32_TSC_ADJUST ); +printf ("wrmsr IA32_TSC_ADJUST %lld, rdmsr IA32_TSC_ADJUST: %lld, rdtsc: %lld\n" , t3, t1, t2); + lat = t2 - t4; +printf ("rdtsc/wrmsr/rdtsc latency %lld\n" , lat); + +return 0 ; +}Signature · 8 lines
1.8.0.rc0 -- 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