From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:37931) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Td3fL-0008GC-Oh for qemu-devel@nongnu.org; Mon, 26 Nov 2012 13:44:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Td3fF-0008Ay-JR for qemu-devel@nongnu.org; Mon, 26 Nov 2012 13:44:23 -0500 Received: from mail-pa0-f45.google.com ([209.85.220.45]:34375) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Td3fF-00089t-DQ for qemu-devel@nongnu.org; Mon, 26 Nov 2012 13:44:17 -0500 Received: by mail-pa0-f45.google.com with SMTP id bg2so5438107pad.4 for ; Mon, 26 Nov 2012 10:44:16 -0800 (PST) From: Will Auld Content-Type: text/plain; charset="UTF-8" Date: Mon, 26 Nov 2012 10:44:14 -0800 Message-ID: <1353955454.6006.0.camel@WillAuldHomeLinux> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] Resend - Added x86/tsc_adjust.c to test the ia32_tsc_adjust funtionality. Reply-To: will.auld@intel.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel , Gleb , "mtosatti@redhat.com" , "kvm@vger.kernel.org" , "donald.d.dugger@intel.com" , "jinsong.liu@intel.com" , "xiantao.zhang@intel.com" , "will.auld@intel.com" , "avi@redhat.com" Signed-off-by: Will Auld --- config-x86-common.mak | 5 ++++- x86/tsc_adjust.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 x86/tsc_adjust.c diff --git a/config-x86-common.mak b/config-x86-common.mak index c76cd11..47a9056 100644 --- a/config-x86-common.mak +++ b/config-x86-common.mak @@ -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 diff --git a/x86/tsc_adjust.c b/x86/tsc_adjust.c new file mode 100644 index 0000000..bcb8982 --- /dev/null +++ b/x86/tsc_adjust.c @@ -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; +} -- 1.8.0.rc0