[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] x86_emulate: Emulate RDTSCP instruction.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1260967518 0
# Node ID cbcb3d564b2fb51574b8a1d06cd6e7780839c331
# Parent  b543acc1aaad743f20e8ee44ab048ca239350685
x86_emulate: Emulate RDTSCP instruction.

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/x86_emulate/x86_emulate.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletion(-)

diff -r b543acc1aaad -r cbcb3d564b2f xen/arch/x86/x86_emulate/x86_emulate.c
--- a/xen/arch/x86/x86_emulate/x86_emulate.c    Wed Dec 16 12:32:35 2009 +0000
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c    Wed Dec 16 12:45:18 2009 +0000
@@ -292,6 +292,7 @@ struct operand {
 #define MSR_LSTAR        0xc0000082
 #define MSR_CSTAR        0xc0000083
 #define MSR_FMASK        0xc0000084
+#define MSR_TSC_AUX      0xc0000103
 
 /* Control register flags. */
 #define CR0_PE    (1<<0)
@@ -3503,6 +3504,16 @@ x86_emulate(
             break;
         }
 
+        if ( modrm == 0xf9 ) /* rdtscp */
+        {
+            uint64_t tsc_aux;
+            fail_if(ops->read_msr == NULL);
+            if ( (rc = ops->read_msr(MSR_TSC_AUX, &tsc_aux, ctxt)) != 0 )
+                goto done;
+            _regs.ecx = (uint32_t)tsc_aux;
+            goto rdtsc;
+        }
+
         switch ( modrm_reg & 7 )
         {
         case 0: /* sgdt */
@@ -3712,7 +3723,7 @@ x86_emulate(
         break;
     }
 
-    case 0x31: /* rdtsc */ {
+    case 0x31: rdtsc: /* rdtsc */ {
         unsigned long cr4;
         uint64_t val;
         if ( !mode_ring0() )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.