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-devel

Re: [Xen-devel] [PATCH] hvm: live migration between intel and amd

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] hvm: live migration between intel and amd
From: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>
Date: Mon, 16 Jun 2008 14:32:21 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Mon, 16 Jun 2008 06:33:04 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <C4785A07.19C5D%keir.fraser@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <C4785A07.19C5D%keir.fraser@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla-Thunderbird 2.0.0.14 (X11/20080509)
Keir Fraser wrote:
On 13/6/08 16:46, "Jean Guyader" <jean.guyader@xxxxxxxxxxxxx> wrote:

+    /* Do we come from AMD processor ? */
+    if ( data->msr_flags == -1ULL )
+    {
+        data->msr_flags = 0x7ULL;
+
+        data->ldtr_limit = 0xffffffff;
+        data->ldtr_arbytes = 0xc00;
+
+        data->cs_arbytes = 0xc9b;
+
+        data->gs_limit = 0xffffffff;
+        data->gs_arbytes = 0xc00;
+
+        data->tr_arbytes = 0x8b;
+    }
+

It's a bit rude to trample register state like this. Why do limits need to
be forced? The Intel manuals do not specify that any vm-entry checks are
applied to segment limits outside of vm86 mode.


Agreed. The vm-entry check was failing on this one (Intel 3b, 22-11):

- Bit 15 (G). The following checks apply if the register is CS or if the register is usable: - If any bit in the limit field in the range 11:0 is 0, G must be 0.
   - If any bit in the limit field in the range 31:20 is 1, G must be 1.

--
Jean Guyader
diff -r ec56331c056a xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Thu Jun 12 16:34:25 2008 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Mon Jun 16 14:25:33 2008 +0100
@@ -615,6 +615,10 @@ static void vmx_load_cpu_state(struct vc
 #ifdef __x86_64__
     struct vmx_msr_state *guest_state = &v->arch.hvm_vmx.msr_state;
 
+    /* Set the msr_flags */
+    if ( data->msr_flags & 0x7ULL )
+        data->msr_flags &= 0x7ULL;
+
     /* restore msrs */
     guest_state->flags = data->msr_flags;
     guest_state->msrs[VMX_INDEX_MSR_LSTAR]        = data->msr_lstar;
@@ -624,6 +628,15 @@ static void vmx_load_cpu_state(struct vc
     v->arch.hvm_vmx.cstar     = data->msr_cstar;
     v->arch.hvm_vmx.shadow_gs = data->shadow_gs;
 #endif
+    
+    /*
+    ** If any bit in the limit field in the range 31:20 is 1,
+    ** G must be set to 1 (Intel 3b, 22-11)
+    **/
+    if ( data->cs_limit & 0xfff0000 )
+        set_bit(11, &data->cs_arbytes);
+    else
+        clear_bit(11, &data->cs_arbytes);
 
     hvm_set_guest_tsc(v, data->tsc);
 }
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>