WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] x86, hvm: Fix softtsc for AMD-V

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86, hvm: Fix softtsc for AMD-V
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 15 Aug 2008 07:10:07 -0700
Delivery-date: Fri, 15 Aug 2008 07:09:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1218808781 -3600
# Node ID a1e4279bddee22bbe4453d8eeb6175a98a1da4d7
# Parent  d09404ad5730053e2bbb9b26754a530a30849c47
x86, hvm: Fix softtsc for AMD-V

The softtsc code for AMD does not update the ip; enabling it on AMD-V
results in the domain spinning on the RDTSC instruction. The patch is
against xen-unstable 18331.

Signed-off-by: John Byrne <john.l.byrne@xxxxxx>
---
 xen/arch/x86/hvm/svm/emulate.c        |    4 +++-
 xen/arch/x86/hvm/svm/svm.c            |   13 ++++++++++++-
 xen/include/asm-x86/hvm/svm/emulate.h |    1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff -r d09404ad5730 -r a1e4279bddee xen/arch/x86/hvm/svm/emulate.c
--- a/xen/arch/x86/hvm/svm/emulate.c    Thu Aug 14 16:26:06 2008 +0100
+++ b/xen/arch/x86/hvm/svm/emulate.c    Fri Aug 15 14:59:41 2008 +0100
@@ -71,6 +71,7 @@ MAKE_INSTR(VMCALL, 3, 0x0f, 0x01, 0xd9);
 MAKE_INSTR(VMCALL, 3, 0x0f, 0x01, 0xd9);
 MAKE_INSTR(HLT,    1, 0xf4);
 MAKE_INSTR(INT3,   1, 0xcc);
+MAKE_INSTR(RDTSC,  2, 0x0f, 0x31);
 
 static const u8 *opc_bytes[INSTR_MAX_COUNT] = 
 {
@@ -81,7 +82,8 @@ static const u8 *opc_bytes[INSTR_MAX_COU
     [INSTR_WRMSR]  = OPCODE_WRMSR,
     [INSTR_VMCALL] = OPCODE_VMCALL,
     [INSTR_HLT]    = OPCODE_HLT,
-    [INSTR_INT3]   = OPCODE_INT3
+    [INSTR_INT3]   = OPCODE_INT3,
+    [INSTR_RDTSC]  = OPCODE_RDTSC
 };
 
 static int fetch(struct vcpu *v, u8 *buf, unsigned long addr, int len)
diff -r d09404ad5730 -r a1e4279bddee xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Thu Aug 14 16:26:06 2008 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c        Fri Aug 15 14:59:41 2008 +0100
@@ -1128,6 +1128,17 @@ static void svm_vmexit_do_hlt(struct vmc
     hvm_hlt(regs->eflags);
 }
 
+static void svm_vmexit_do_rdtsc(struct cpu_user_regs *regs)
+{
+    unsigned int inst_len;
+
+    if ( (inst_len = __get_instruction_length(current, INSTR_RDTSC)) == 0 )
+        return;
+    __update_guest_eip(regs, inst_len);
+
+    hvm_rdtsc_intercept(regs);
+}
+
 static void wbinvd_ipi(void *info)
 {
     wbinvd();
@@ -1344,7 +1355,7 @@ asmlinkage void svm_vmexit_handler(struc
         break;
 
     case VMEXIT_RDTSC:
-        hvm_rdtsc_intercept(regs);
+        svm_vmexit_do_rdtsc(regs);
         break;
 
     case VMEXIT_RDTSCP:
diff -r d09404ad5730 -r a1e4279bddee xen/include/asm-x86/hvm/svm/emulate.h
--- a/xen/include/asm-x86/hvm/svm/emulate.h     Thu Aug 14 16:26:06 2008 +0100
+++ b/xen/include/asm-x86/hvm/svm/emulate.h     Fri Aug 15 14:59:41 2008 +0100
@@ -30,6 +30,7 @@ enum instruction_index {
     INSTR_VMCALL,
     INSTR_HLT,
     INSTR_INT3,
+    INSTR_RDTSC,
     INSTR_MAX_COUNT /* Must be last - Number of instructions supported */
 };
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86, hvm: Fix softtsc for AMD-V, Xen patchbot-unstable <=