All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00 of 20] NestedVMX support
@ 2011-06-02  8:57 Eddie Dong
  2011-06-02  8:57 ` [PATCH 01 of 20] pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to Eddie Dong
                   ` (20 more replies)
  0 siblings, 21 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel


This patch series enable the nestedvmx support.

patch 1-2 is a pre-cleanup.
patch 3 is for nested vmx data structure
patch 4 for nestedhvm ops
patch 5, 7,8,9, 10, 11 is for VMX instruction emulation
patch 6 for virtual VMCS data structure and access APIs.
patch 12 for VMCS switching
Patch 13 for vmreseume/launch emulation
patch 14 for shadow control VMCS fields
patch 15 for n1/n2 guest VMCS switch 
patch 16 for interrupt/exceptions
patch 17 for nested vm exit
patch 18 for lazy FPU and patch 19 VMXE bits in CR4
patch 20 for MSR handling and capability


Thanks, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 01 of 20] pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 02 of 20] pre-cleanup2: Move IDT_VECTORING processing code out of intr_assist Eddie Dong
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 332616c43f52f85893f41537e9e6324a3fa01a57
# Parent  0c446850d85e654dfde039a0a1a5acd4e6b3c278
pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to
assist decision of TRAP_page_fault in VMX.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 0c446850d85e -r 332616c43f52 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c	Wed May 11 12:58:04 2011 +0100
+++ b/xen/arch/x86/hvm/hvm.c	Thu Jun 02 16:33:20 2011 +0800
@@ -1152,7 +1152,7 @@ void hvm_inject_exception(unsigned int t
         return;
     }
 
-    if ( nhvm_vmcx_guest_intercepts_trap(v, trapnr) )
+    if ( nhvm_vmcx_guest_intercepts_trap(v, trapnr, errcode) )
     {
         enum nestedhvm_vmexits nsret;
 
@@ -4175,10 +4175,10 @@ uint32_t nhvm_vcpu_asid(struct vcpu *v)
     return -EOPNOTSUPP;
 }
 
-int nhvm_vmcx_guest_intercepts_trap(struct vcpu *v, unsigned int trap)
+int nhvm_vmcx_guest_intercepts_trap(struct vcpu *v, unsigned int trap, int errcode)
 {
     if (hvm_funcs.nhvm_vmcx_guest_intercepts_trap)
-        return hvm_funcs.nhvm_vmcx_guest_intercepts_trap(v, trap);
+        return hvm_funcs.nhvm_vmcx_guest_intercepts_trap(v, trap, errcode);
     return -EOPNOTSUPP;
 }
 
diff -r 0c446850d85e -r 332616c43f52 xen/arch/x86/hvm/svm/nestedsvm.c
--- a/xen/arch/x86/hvm/svm/nestedsvm.c	Wed May 11 12:58:04 2011 +0100
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c	Thu Jun 02 16:33:20 2011 +0800
@@ -895,7 +895,7 @@ nsvm_vmcb_guest_intercepts_exitcode(stru
 }
 
 int
-nsvm_vmcb_guest_intercepts_trap(struct vcpu *v, unsigned int trapnr)
+nsvm_vmcb_guest_intercepts_trap(struct vcpu *v, unsigned int trapnr, int errcode)
 {
     return nsvm_vmcb_guest_intercepts_exitcode(v,
         guest_cpu_user_regs(), VMEXIT_EXCEPTION_DE + trapnr);
diff -r 0c446850d85e -r 332616c43f52 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h	Wed May 11 12:58:04 2011 +0100
+++ b/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:20 2011 +0800
@@ -164,7 +164,8 @@ struct hvm_function_table {
     uint64_t (*nhvm_vcpu_guestcr3)(struct vcpu *v);
     uint64_t (*nhvm_vcpu_hostcr3)(struct vcpu *v);
     uint32_t (*nhvm_vcpu_asid)(struct vcpu *v);
-    int (*nhvm_vmcx_guest_intercepts_trap)(struct vcpu *v, unsigned int trapnr);
+    int (*nhvm_vmcx_guest_intercepts_trap)(struct vcpu *v, 
+                               unsigned int trapnr, int errcode);
 
     bool_t (*nhvm_vmcx_hap_enabled)(struct vcpu *v);
 
@@ -443,7 +444,8 @@ uint64_t nhvm_vcpu_hostcr3(struct vcpu *
 uint32_t nhvm_vcpu_asid(struct vcpu *v);
 
 /* returns true, when l1 guest intercepts the specified trap */
-int nhvm_vmcx_guest_intercepts_trap(struct vcpu *v, unsigned int trapnr);
+int nhvm_vmcx_guest_intercepts_trap(struct vcpu *v, 
+                                    unsigned int trapnr, int errcode);
 
 /* returns true when l1 guest wants to use hap to run l2 guest */
 bool_t nhvm_vmcx_hap_enabled(struct vcpu *v);
diff -r 0c446850d85e -r 332616c43f52 xen/include/asm-x86/hvm/svm/nestedsvm.h
--- a/xen/include/asm-x86/hvm/svm/nestedsvm.h	Wed May 11 12:58:04 2011 +0100
+++ b/xen/include/asm-x86/hvm/svm/nestedsvm.h	Thu Jun 02 16:33:20 2011 +0800
@@ -114,7 +114,8 @@ uint64_t nsvm_vcpu_hostcr3(struct vcpu *
 uint32_t nsvm_vcpu_asid(struct vcpu *v);
 int nsvm_vmcb_guest_intercepts_exitcode(struct vcpu *v,
     struct cpu_user_regs *regs, uint64_t exitcode);
-int nsvm_vmcb_guest_intercepts_trap(struct vcpu *v, unsigned int trapnr);
+int nsvm_vmcb_guest_intercepts_trap(struct vcpu *v, unsigned int trapnr,
+                                    int errcode);
 bool_t nsvm_vmcb_hap_enabled(struct vcpu *v);
 enum hvm_intblk nsvm_intr_blocked(struct vcpu *v);

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 02 of 20] pre-cleanup2: Move IDT_VECTORING processing code out of intr_assist
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
  2011-06-02  8:57 ` [PATCH 01 of 20] pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 03 of 20] Add data structure for nestedvmx Eddie Dong
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID ce6ed8ca4ebd2f2fb96627e61f7d2ef737e7193d
# Parent  332616c43f52f85893f41537e9e6324a3fa01a57
pre-cleanup2: Move IDT_VECTORING processing code out of intr_assist.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 332616c43f52 -r ce6ed8ca4ebd xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2098,6 +2098,33 @@ static int vmx_handle_eoi_write(void)
     return 0;
 }
 
+static void vmx_idtv_reinject(unsigned long idtv_info)
+{
+
+    /* Event delivery caused this intercept? Queue for redelivery. */
+    if ( unlikely(idtv_info & INTR_INFO_VALID_MASK) )
+    {
+        if ( hvm_event_needs_reinjection((idtv_info>>8)&7, idtv_info&0xff) )
+        {
+            /* See SDM 3B 25.7.1.1 and .2 for info about masking resvd bits. */
+            __vmwrite(VM_ENTRY_INTR_INFO,
+                      idtv_info & ~INTR_INFO_RESVD_BITS_MASK);
+            if ( idtv_info & INTR_INFO_DELIVER_CODE_MASK )
+                __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE,
+                          __vmread(IDT_VECTORING_ERROR_CODE));
+        }
+
+        /*
+         * Clear NMI-blocking interruptibility info if an NMI delivery faulted.
+         * Re-delivery will re-set it (see SDM 3B 25.7.1.2).
+         */
+        if ( (idtv_info & INTR_INFO_INTR_TYPE_MASK) == (X86_EVENTTYPE_NMI<<8) )
+            __vmwrite(GUEST_INTERRUPTIBILITY_INFO,
+                      __vmread(GUEST_INTERRUPTIBILITY_INFO) &
+                      ~VMX_INTR_SHADOW_NMI);
+    }
+}
+
 asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
 {
     unsigned int exit_reason, idtv_info, intr_info = 0, vector = 0;
@@ -2187,30 +2214,9 @@ asmlinkage void vmx_vmexit_handler(struc
 
     hvm_maybe_deassert_evtchn_irq();
 
-    /* Event delivery caused this intercept? Queue for redelivery. */
     idtv_info = __vmread(IDT_VECTORING_INFO);
-    if ( unlikely(idtv_info & INTR_INFO_VALID_MASK) &&
-         (exit_reason != EXIT_REASON_TASK_SWITCH) )
-    {
-        if ( hvm_event_needs_reinjection((idtv_info>>8)&7, idtv_info&0xff) )
-        {
-            /* See SDM 3B 25.7.1.1 and .2 for info about masking resvd bits. */
-            __vmwrite(VM_ENTRY_INTR_INFO,
-                      idtv_info & ~INTR_INFO_RESVD_BITS_MASK);
-            if ( idtv_info & INTR_INFO_DELIVER_CODE_MASK )
-                __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE,
-                          __vmread(IDT_VECTORING_ERROR_CODE));
-        }
-
-        /*
-         * Clear NMI-blocking interruptibility info if an NMI delivery faulted.
-         * Re-delivery will re-set it (see SDM 3B 25.7.1.2).
-         */
-        if ( (idtv_info & INTR_INFO_INTR_TYPE_MASK) == (X86_EVENTTYPE_NMI<<8) )
-            __vmwrite(GUEST_INTERRUPTIBILITY_INFO,
-                      __vmread(GUEST_INTERRUPTIBILITY_INFO) &
-                      ~VMX_INTR_SHADOW_NMI);
-    }
+    if ( exit_reason != EXIT_REASON_TASK_SWITCH )
+        vmx_idtv_reinject(idtv_info);
 
     switch ( exit_reason )
     {

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 03 of 20] Add data structure for nestedvmx
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
  2011-06-02  8:57 ` [PATCH 01 of 20] pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to Eddie Dong
  2011-06-02  8:57 ` [PATCH 02 of 20] pre-cleanup2: Move IDT_VECTORING processing code out of intr_assist Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 04 of 20] Add APIs for nestedhvm_ops Eddie Dong
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 4bbf0eaec85c764c7872d1cfc1c59c419dfabe0a
# Parent  ce6ed8ca4ebd2f2fb96627e61f7d2ef737e7193d
Add data structure for nestedvmx

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r ce6ed8ca4ebd -r 4bbf0eaec85c xen/include/asm-x86/hvm/vcpu.h
--- a/xen/include/asm-x86/hvm/vcpu.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vcpu.h	Thu Jun 02 16:33:20 2011 +0800
@@ -24,6 +24,7 @@
 #include <asm/hvm/io.h>
 #include <asm/hvm/vlapic.h>
 #include <asm/hvm/vmx/vmcs.h>
+#include <asm/hvm/vmx/vvmx.h>
 #include <asm/hvm/svm/vmcb.h>
 #include <asm/hvm/svm/nestedsvm.h>
 #include <asm/mtrr.h>
@@ -57,6 +58,7 @@ struct nestedvcpu {
     /* SVM/VMX arch specific */
     union {
         struct nestedsvm nsvm;
+        struct nestedvmx nvmx;
     } u;
 
     bool_t nv_flushp2m; /* True, when p2m table must be flushed */
diff -r ce6ed8ca4ebd -r 4bbf0eaec85c xen/include/asm-x86/hvm/vmx/vvmx.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -0,0 +1,38 @@
+
+/*
+ * vvmx.h: Support virtual VMX for nested virtualization.
+ *
+ * Copyright (c) 2010, Intel Corporation.
+ * Author: Qing He <qing.he@intel.com>
+ *         Eddie Dong <eddie.dong@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ */
+#ifndef __ASM_X86_HVM_VVMX_H__
+#define __ASM_X86_HVM_VVMX_H__
+
+struct nestedvmx {
+    paddr_t    vmxon_region_pa;
+    void       *iobitmap[2];		/* map (va) of L1 guest I/O bitmap */
+    /* deferred nested interrupt */
+    struct {
+        unsigned long intr_info;
+        u32           error_code;
+    } intr;
+};
+
+#define vcpu_2_nvmx(v)	(vcpu_nestedhvm(v).u.nvmx)
+#endif /* __ASM_X86_HVM_VVMX_H__ */
+

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 04 of 20] Add APIs for nestedhvm_ops
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (2 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 03 of 20] Add data structure for nestedvmx Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction Eddie Dong
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 4e094881883f10f94575a6f69194a2393e16b7d1
# Parent  4bbf0eaec85c764c7872d1cfc1c59c419dfabe0a
Add APIs for nestedhvm_ops.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 4bbf0eaec85c -r 4e094881883f xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/hvm.c	Thu Jun 02 16:33:20 2011 +0800
@@ -3502,7 +3502,7 @@ long do_hvm_op(unsigned long op, XEN_GUE
                 /* Remove the check below once we have
                  * shadow-on-shadow.
                  */
-                if ( !paging_mode_hap(d) && a.value )
+                if ( cpu_has_svm && !paging_mode_hap(d) && a.value )
                     rc = -EINVAL;
                 /* Set up NHVM state for any vcpus that are already up */
                 if ( !d->arch.hvm_domain.params[HVM_PARAM_NESTEDHVM] )
diff -r 4bbf0eaec85c -r 4e094881883f xen/arch/x86/hvm/vmx/Makefile
--- a/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
@@ -4,3 +4,4 @@ obj-y += realmode.o
 obj-y += vmcs.o
 obj-y += vmx.o
 obj-y += vpmu_core2.o
+obj-y += vvmx.o
diff -r 4bbf0eaec85c -r 4e094881883f xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -1407,7 +1407,13 @@ static struct hvm_function_table __read_
     .invlpg_intercept     = vmx_invlpg_intercept,
     .set_uc_mode          = vmx_set_uc_mode,
     .set_info_guest       = vmx_set_info_guest,
-    .set_rdtsc_exiting    = vmx_set_rdtsc_exiting
+    .set_rdtsc_exiting    = vmx_set_rdtsc_exiting,
+    .nhvm_vcpu_initialise = nvmx_vcpu_initialise,
+    .nhvm_vcpu_destroy    = nvmx_vcpu_destroy,
+    .nhvm_vcpu_reset      = nvmx_vcpu_reset,
+    .nhvm_vcpu_guestcr3   = nvmx_vcpu_guestcr3,
+    .nhvm_vcpu_hostcr3    = nvmx_vcpu_hostcr3,
+    .nhvm_vcpu_asid       = nvmx_vcpu_asid
 };
 
 struct hvm_function_table * __init start_vmx(void)
diff -r 4bbf0eaec85c -r 4e094881883f xen/arch/x86/hvm/vmx/vvmx.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -0,0 +1,93 @@
+/*
+ * vvmx.c: Support virtual VMX for nested virtualization.
+ *
+ * Copyright (c) 2010, Intel Corporation.
+ * Author: Qing He <qing.he@intel.com>
+ *         Eddie Dong <eddie.dong@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ */
+
+#include <xen/config.h>
+#include <asm/types.h>
+#include <asm/p2m.h>
+#include <asm/hvm/vmx/vmx.h>
+#include <asm/hvm/vmx/vvmx.h>
+
+int nvmx_vcpu_initialise(struct vcpu *v)
+{
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    nvcpu->nv_n2vmcx = alloc_xenheap_page();
+    if ( !nvcpu->nv_n2vmcx )
+    {
+        gdprintk(XENLOG_ERR, "nest: allocation for shadow vmcs failed\n");
+	goto out;
+    }
+    nvmx->vmxon_region_pa = 0;
+    nvcpu->nv_vvmcx = NULL;
+    nvcpu->nv_vvmcxaddr = VMCX_EADDR;
+    nvmx->intr.intr_info = 0;
+    nvmx->intr.error_code = 0;
+    nvmx->iobitmap[0] = NULL;
+    nvmx->iobitmap[1] = NULL;
+    return 0;
+out:
+    return -ENOMEM;
+}
+ 
+void nvmx_vcpu_destroy(struct vcpu *v)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    if ( nvcpu->nv_n2vmcx ) {
+        __vmpclear(virt_to_maddr(nvcpu->nv_n2vmcx));
+        free_xenheap_page(nvcpu->nv_n2vmcx);
+        nvcpu->nv_n2vmcx = NULL;
+    }
+    if ( nvcpu->nv_vvmcx ) {
+        unmap_domain_page_global(nvcpu->nv_vvmcx);
+        nvcpu->nv_vvmcx == NULL;
+    }
+    nvcpu->nv_vvmcxaddr = VMCX_EADDR;
+}
+ 
+int nvmx_vcpu_reset(struct vcpu *v)
+{
+    return 0;
+}
+
+uint64_t nvmx_vcpu_guestcr3(struct vcpu *v)
+{
+    /* TODO */
+    ASSERT(0);
+    return 0;
+}
+
+uint64_t nvmx_vcpu_hostcr3(struct vcpu *v)
+{
+    /* TODO */
+    ASSERT(0);
+    return 0;
+}
+
+uint32_t nvmx_vcpu_asid(struct vcpu *v)
+{
+    /* TODO */
+    ASSERT(0);
+    return 0;
+}
+
diff -r 4bbf0eaec85c -r 4e094881883f xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -34,5 +34,13 @@ struct nestedvmx {
 };
 
 #define vcpu_2_nvmx(v)	(vcpu_nestedhvm(v).u.nvmx)
+
+int nvmx_vcpu_initialise(struct vcpu *v);
+void nvmx_vcpu_destroy(struct vcpu *v);
+int nvmx_vcpu_reset(struct vcpu *v);
+uint64_t nvmx_vcpu_guestcr3(struct vcpu *v);
+uint64_t nvmx_vcpu_hostcr3(struct vcpu *v);
+uint32_t nvmx_vcpu_asid(struct vcpu *v);
+
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (3 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 04 of 20] Add APIs for nestedhvm_ops Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 14:36   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 06 of 20] Define structure and access APIs for virtual VMCS Eddie Dong
                   ` (15 subsequent siblings)
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID c8812151acfd6d9468f3407bc6a1a278cd764567
# Parent  4e094881883f10f94575a6f69194a2393e16b7d1
Emulation of guest VMXON/OFF instruction.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 4e094881883f -r c8812151acfd xen/arch/x86/hvm/vmx/Makefile
--- a/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
@@ -5,3 +5,4 @@ obj-y += vmcs.o
 obj-y += vmx.o
 obj-y += vpmu_core2.o
 obj-y += vvmx.o
+obj-y += vvmx.o
diff -r 4e094881883f -r c8812151acfd xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2434,6 +2434,16 @@ asmlinkage void vmx_vmexit_handler(struc
         break;
     }
 
+    case EXIT_REASON_VMXOFF:
+        if ( nvmx_handle_vmxoff(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
+    case EXIT_REASON_VMXON:
+        if ( nvmx_handle_vmxon(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
     case EXIT_REASON_VMCLEAR:
@@ -2443,8 +2453,6 @@ asmlinkage void vmx_vmexit_handler(struc
     case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
     case EXIT_REASON_VMWRITE:
-    case EXIT_REASON_VMXOFF:
-    case EXIT_REASON_VMXON:
     case EXIT_REASON_GETSEC:
     case EXIT_REASON_INVEPT:
     case EXIT_REASON_INVVPID:
diff -r 4e094881883f -r c8812151acfd xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -91,3 +91,228 @@ uint32_t nvmx_vcpu_asid(struct vcpu *v)
     return 0;
 }
 
+enum x86_segment sreg_to_index[] = {
+    [VMX_SREG_ES] = x86_seg_es,
+    [VMX_SREG_CS] = x86_seg_cs,
+    [VMX_SREG_SS] = x86_seg_ss,
+    [VMX_SREG_DS] = x86_seg_ds,
+    [VMX_SREG_FS] = x86_seg_fs,
+    [VMX_SREG_GS] = x86_seg_gs,
+};
+
+struct vmx_inst_decoded {
+#define VMX_INST_MEMREG_TYPE_MEMORY 0
+#define VMX_INST_MEMREG_TYPE_REG    1
+    int type;
+    union {
+        struct {
+            unsigned long mem;
+            unsigned int  len;
+        };
+        enum vmx_regs_enc reg1;
+    };
+
+    enum vmx_regs_enc reg2;
+};
+
+enum vmx_ops_result {
+    VMSUCCEED,
+    VMFAIL_VALID,
+    VMFAIL_INVALID,
+};
+
+#define CASE_GET_REG(REG, reg)      \
+    case VMX_REG_ ## REG: value = regs->reg; break
+
+static unsigned long reg_read(struct cpu_user_regs *regs,
+                              enum vmx_regs_enc index)
+{
+    unsigned long value = 0;
+
+    switch ( index ) {
+    CASE_GET_REG(RAX, eax);
+    CASE_GET_REG(RCX, ecx);
+    CASE_GET_REG(RDX, edx);
+    CASE_GET_REG(RBX, ebx);
+    CASE_GET_REG(RBP, ebp);
+    CASE_GET_REG(RSI, esi);
+    CASE_GET_REG(RDI, edi);
+    CASE_GET_REG(RSP, esp);
+#ifdef CONFIG_X86_64
+    CASE_GET_REG(R8, r8);
+    CASE_GET_REG(R9, r9);
+    CASE_GET_REG(R10, r10);
+    CASE_GET_REG(R11, r11);
+    CASE_GET_REG(R12, r12);
+    CASE_GET_REG(R13, r13);
+    CASE_GET_REG(R14, r14);
+    CASE_GET_REG(R15, r15);
+#endif
+    default:
+        break;
+    }
+
+    return value;
+}
+
+static int vmx_inst_check_privilege(struct cpu_user_regs *regs, int vmxop_check)
+{
+    struct vcpu *v = current;
+    struct segment_register cs;
+
+    hvm_get_segment_register(v, x86_seg_cs, &cs);
+
+    if ( vmxop_check )
+    {
+        if ( !(v->arch.hvm_vcpu.guest_cr[0] & X86_CR0_PE) ||
+             !(v->arch.hvm_vcpu.guest_cr[4] & X86_CR4_VMXE) )
+            goto invalid_op;
+    }
+    else if ( !vcpu_2_nvmx(v).vmxon_region_pa )
+        goto invalid_op;
+
+    if ( (regs->eflags & X86_EFLAGS_VM) ||
+         (hvm_long_mode_enabled(v) && cs.attr.fields.l == 0) )
+        goto invalid_op;
+    /* TODO: check vmx operation mode */
+
+    if ( (cs.sel & 3) > 0 )
+        goto gp_fault;
+
+    return X86EMUL_OKAY;
+
+invalid_op:
+    gdprintk(XENLOG_ERR, "vmx_inst_check_privilege: invalid_op\n");
+    hvm_inject_exception(TRAP_invalid_op, 0, 0);
+    return X86EMUL_EXCEPTION;
+
+gp_fault:
+    gdprintk(XENLOG_ERR, "vmx_inst_check_privilege: gp_fault\n");
+    hvm_inject_exception(TRAP_gp_fault, 0, 0);
+    return X86EMUL_EXCEPTION;
+}
+
+static int decode_vmx_inst(struct cpu_user_regs *regs,
+                           struct vmx_inst_decoded *decode,
+                           unsigned long *poperandS, int vmxon_check)
+{
+    struct vcpu *v = current;
+    union vmx_inst_info info;
+    struct segment_register seg;
+    unsigned long base, index, seg_base, disp, offset;
+    int scale, size;
+
+    if ( vmx_inst_check_privilege(regs, vmxon_check) != X86EMUL_OKAY )
+        return X86EMUL_EXCEPTION;
+
+    info.word = __vmread(VMX_INSTRUCTION_INFO);
+
+    if ( info.fields.memreg ) {
+        decode->type = VMX_INST_MEMREG_TYPE_REG;
+        decode->reg1 = info.fields.reg1;
+        if ( poperandS != NULL )
+            *poperandS = reg_read(regs, decode->reg1);
+    }
+    else
+    {
+        decode->type = VMX_INST_MEMREG_TYPE_MEMORY;
+        hvm_get_segment_register(v, sreg_to_index[info.fields.segment], &seg);
+        /* TODO: segment type check */
+        seg_base = seg.base;
+
+        base = info.fields.base_reg_invalid ? 0 :
+            reg_read(regs, info.fields.base_reg);
+
+        index = info.fields.index_reg_invalid ? 0 :
+            reg_read(regs, info.fields.index_reg);
+
+        scale = 1 << info.fields.scaling;
+
+        disp = __vmread(EXIT_QUALIFICATION);
+
+        size = 1 << (info.fields.addr_size + 1);
+
+        offset = base + index * scale + disp;
+        if ( (offset > seg.limit || offset + size > seg.limit) &&
+            (!hvm_long_mode_enabled(v) || info.fields.segment == VMX_SREG_GS) )
+            goto gp_fault;
+
+        if ( poperandS != NULL &&
+             hvm_copy_from_guest_virt(poperandS, seg_base + offset, size, 0)
+                  != HVMCOPY_okay )
+            return X86EMUL_EXCEPTION;
+        decode->mem = seg_base + offset;
+        decode->len = size;
+    }
+
+    decode->reg2 = info.fields.reg2;
+
+    return X86EMUL_OKAY;
+
+gp_fault:
+    hvm_inject_exception(TRAP_gp_fault, 0, 0);
+    return X86EMUL_EXCEPTION;
+}
+
+static void vmreturn(struct cpu_user_regs *regs, enum vmx_ops_result ops_res)
+{
+    unsigned long eflags = regs->eflags;
+    unsigned long mask = X86_EFLAGS_CF | X86_EFLAGS_PF | X86_EFLAGS_AF |
+                         X86_EFLAGS_ZF | X86_EFLAGS_SF | X86_EFLAGS_OF;
+
+    eflags &= ~mask;
+
+    switch ( ops_res ) {
+    case VMSUCCEED:
+        break;
+    case VMFAIL_VALID:
+        /* TODO: error number, useful for guest VMM debugging */
+        eflags |= X86_EFLAGS_ZF;
+        break;
+    case VMFAIL_INVALID:
+    default:
+        eflags |= X86_EFLAGS_CF;
+        break;
+    }
+
+    regs->eflags = eflags;
+}
+
+/*
+ * VMX instructions handling
+ */
+
+int nvmx_handle_vmxon(struct cpu_user_regs *regs)
+{
+    struct vcpu *v=current;
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct vmx_inst_decoded decode;
+    unsigned long gpa = 0;
+    int rc;
+
+    rc = decode_vmx_inst(regs, &decode, &gpa, 1);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    nvmx->vmxon_region_pa = gpa;
+    vmreturn(regs, VMSUCCEED);
+
+    return X86EMUL_OKAY;
+}
+
+int nvmx_handle_vmxoff(struct cpu_user_regs *regs)
+{
+    struct vcpu *v=current;
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    int rc;
+
+    rc = vmx_inst_check_privilege(regs, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    nvmx->vmxon_region_pa = 0;
+
+    vmreturn(regs, VMSUCCEED);
+    return X86EMUL_OKAY;
+}
+
diff -r 4e094881883f -r c8812151acfd xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -35,6 +35,58 @@ struct nestedvmx {
 
 #define vcpu_2_nvmx(v)	(vcpu_nestedhvm(v).u.nvmx)
 
+/*
+ * Encode of VMX instructions base on Table 24-11 & 24-12 of SDM 3B
+ */
+
+enum vmx_regs_enc {
+    VMX_REG_RAX,
+    VMX_REG_RCX,
+    VMX_REG_RDX,
+    VMX_REG_RBX,
+    VMX_REG_RSP,
+    VMX_REG_RBP,
+    VMX_REG_RSI,
+    VMX_REG_RDI,
+#ifdef CONFIG_X86_64
+    VMX_REG_R8,
+    VMX_REG_R9,
+    VMX_REG_R10,
+    VMX_REG_R11,
+    VMX_REG_R12,
+    VMX_REG_R13,
+    VMX_REG_R14,
+    VMX_REG_R15,
+#endif
+};
+
+enum vmx_sregs_enc {
+    VMX_SREG_ES,
+    VMX_SREG_CS,
+    VMX_SREG_SS,
+    VMX_SREG_DS,
+    VMX_SREG_FS,
+    VMX_SREG_GS,
+};
+
+union vmx_inst_info {
+    struct {
+        unsigned int scaling           :2; /* bit 0-1 */
+        unsigned int __rsvd0           :1; /* bit 2 */
+        unsigned int reg1              :4; /* bit 3-6 */
+        unsigned int addr_size         :3; /* bit 7-9 */
+        unsigned int memreg            :1; /* bit 10 */
+        unsigned int __rsvd1           :4; /* bit 11-14 */
+        unsigned int segment           :3; /* bit 15-17 */
+        unsigned int index_reg         :4; /* bit 18-21 */
+        unsigned int index_reg_invalid :1; /* bit 22 */
+        unsigned int base_reg          :4; /* bit 23-26 */
+        unsigned int base_reg_invalid  :1; /* bit 27 */
+        unsigned int reg2              :4; /* bit 28-31 */
+    } fields;
+    u32 word;
+};
+
 int nvmx_vcpu_initialise(struct vcpu *v);
 void nvmx_vcpu_destroy(struct vcpu *v);
 int nvmx_vcpu_reset(struct vcpu *v);
@@ -42,5 +94,7 @@ uint64_t nvmx_vcpu_guestcr3(struct vcpu 
 uint64_t nvmx_vcpu_hostcr3(struct vcpu *v);
 uint32_t nvmx_vcpu_asid(struct vcpu *v);
 
+int nvmx_handle_vmxon(struct cpu_user_regs *regs);
+int nvmx_handle_vmxoff(struct cpu_user_regs *regs);
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 06 of 20] Define structure and access APIs for virtual VMCS
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (4 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 07 of 20] Emulation of guest vmptrld Eddie Dong
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 8264b01b476b1b695727f78d92ab0ce553aa7516
# Parent  c8812151acfd6d9468f3407bc6a1a278cd764567
Define structure and access APIs for virtual VMCS.


Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r c8812151acfd -r 8264b01b476b xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -124,6 +124,84 @@ enum vmx_ops_result {
 #define CASE_GET_REG(REG, reg)      \
     case VMX_REG_ ## REG: value = regs->reg; break
 
+static int vvmcs_offset(u32 width, u32 type, u32 index)
+{
+    int offset;
+
+    offset = (index & 0x1f) | type << 5 | width << 7;
+
+    if ( offset == 0 )    /* vpid */
+        offset = 0x3f;
+
+    return offset;
+}
+
+u64 __get_vvmcs(void *vvmcs, u32 vmcs_encoding)
+{
+    union vmcs_encoding enc;
+    u64 *content = (u64 *) vvmcs;
+    int offset;
+    u64 res;
+
+    enc.word = vmcs_encoding;
+    offset = vvmcs_offset(enc.width, enc.type, enc.index);
+    res = content[offset];
+
+    switch ( enc.width ) {
+    case VVMCS_WIDTH_16:
+        res &= 0xffff;
+        break;
+   case VVMCS_WIDTH_64:
+        if ( enc.access_type )
+            res >>= 32;
+        break;
+    case VVMCS_WIDTH_32:
+        res &= 0xffffffff;
+        break;
+    case VVMCS_WIDTH_NATURAL:
+    default:
+        break;
+    }
+
+    return res;
+}
+
+void __set_vvmcs(void *vvmcs, u32 vmcs_encoding, u64 val)
+{
+    union vmcs_encoding enc;
+    u64 *content = (u64 *) vvmcs;
+    int offset;
+    u64 res;
+
+    enc.word = vmcs_encoding;
+    offset = vvmcs_offset(enc.width, enc.type, enc.index);
+    res = content[offset];
+
+    switch ( enc.width ) {
+    case VVMCS_WIDTH_16:
+        res = val & 0xffff;
+        break;
+    case VVMCS_WIDTH_64:
+        if ( enc.access_type )
+        {
+            res &= 0xffffffff;
+            res |= val << 32;
+        }
+        else
+            res = val;
+        break;
+    case VVMCS_WIDTH_32:
+        res = val & 0xffffffff;
+        break;
+    case VVMCS_WIDTH_NATURAL:
+    default:
+        res = val;
+        break;
+    }
+
+    content[offset] = res;
+}
+
 static unsigned long reg_read(struct cpu_user_regs *regs,
                               enum vmx_regs_enc index)
 {
diff -r c8812151acfd -r 8264b01b476b xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -96,5 +96,61 @@ uint32_t nvmx_vcpu_asid(struct vcpu *v);
 
 int nvmx_handle_vmxon(struct cpu_user_regs *regs);
 int nvmx_handle_vmxoff(struct cpu_user_regs *regs);
+/*
+ * Virtual VMCS layout
+ *
+ * Since physical VMCS layout is unknown, a custom layout is used
+ * for virtual VMCS seen by guest. It occupies a 4k page, and the
+ * field is offset by an 9-bit offset into u64[], The offset is as
+ * follow, which means every <width, type> pair has a max of 32
+ * fields available.
+ *
+ *             9       7      5               0
+ *             --------------------------------
+ *     offset: | width | type |     index     |
+ *             --------------------------------
+ *
+ * Also, since the lower range <width=0, type={0,1}> has only one
+ * field: VPID, it is moved to a higher offset (63), and leaves the
+ * lower range to non-indexed field like VMCS revision.
+ *
+ */
+
+#define VVMCS_REVISION 0x40000001u
+
+struct vvmcs_header {
+    u32 revision;
+    u32 abort;
+};
+
+union vmcs_encoding {
+    struct {
+        u32 access_type : 1;
+        u32 index : 9;
+        u32 type : 2;
+        u32 rsv1 : 1;
+        u32 width : 2;
+        u32 rsv2 : 17;
+    };
+    u32 word;
+};
+
+enum vvmcs_encoding_width {
+    VVMCS_WIDTH_16 = 0,
+    VVMCS_WIDTH_64,
+    VVMCS_WIDTH_32,
+    VVMCS_WIDTH_NATURAL,
+};
+
+enum vvmcs_encoding_type {
+    VVMCS_TYPE_CONTROL = 0,
+    VVMCS_TYPE_RO,
+    VVMCS_TYPE_GSTATE,
+    VVMCS_TYPE_HSTATE,
+};
+
+u64 __get_vvmcs(void *vvmcs, u32 vmcs_encoding);
+void __set_vvmcs(void *vvmcs, u32 vmcs_encoding, u64 val);
+
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 07 of 20] Emulation of guest vmptrld
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (5 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 06 of 20] Define structure and access APIs for virtual VMCS Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 14:45   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 08 of 20] Emulation of guest VMPTRST Eddie Dong
                   ` (13 subsequent siblings)
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 4dad232d7fc3bd62979a1b442d989fe0ca4baafe
# Parent  8264b01b476b1b695727f78d92ab0ce553aa7516
Emulation of guest vmptrld

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 8264b01b476b -r 4dad232d7fc3 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2444,11 +2444,15 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMPTRLD:
+        if ( nvmx_handle_vmptrld(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
     case EXIT_REASON_VMCLEAR:
     case EXIT_REASON_VMLAUNCH:
-    case EXIT_REASON_VMPTRLD:
     case EXIT_REASON_VMPTRST:
     case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
diff -r 8264b01b476b -r 4dad232d7fc3 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -356,6 +356,41 @@ static void vmreturn(struct cpu_user_reg
     regs->eflags = eflags;
 }
 
+static void __map_io_bitmap(struct vcpu *v, u64 vmcs_reg)
+{
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    unsigned long gpa;
+    unsigned long mfn;
+    p2m_type_t p2mt;
+
+    if ( vmcs_reg == IO_BITMAP_A )
+    {
+        if (nvmx->iobitmap[0]) {
+            unmap_domain_page_global(nvmx->iobitmap[0]);
+        }
+        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, IO_BITMAP_A);
+        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
+                              gpa >> PAGE_SHIFT, &p2mt));
+        nvmx->iobitmap[0] = map_domain_page_global(mfn);
+    }
+    else if ( vmcs_reg == IO_BITMAP_B )
+    {
+        if (nvmx->iobitmap[1]) {
+            unmap_domain_page_global(nvmx->iobitmap[1]);
+        }
+        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, IO_BITMAP_B);
+        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
+                               gpa >> PAGE_SHIFT, &p2mt));
+        nvmx->iobitmap[1] = map_domain_page_global(mfn);
+    }
+}
+
+static inline void map_io_bitmap_all(struct vcpu *v)
+{
+   __map_io_bitmap (v, IO_BITMAP_A);
+   __map_io_bitmap (v, IO_BITMAP_B);
+}
+
 /*
  * VMX instructions handling
  */
@@ -364,6 +399,7 @@ int nvmx_handle_vmxon(struct cpu_user_re
 {
     struct vcpu *v=current;
     struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
     struct vmx_inst_decoded decode;
     unsigned long gpa = 0;
     int rc;
@@ -372,7 +408,22 @@ int nvmx_handle_vmxon(struct cpu_user_re
     if ( rc != X86EMUL_OKAY )
         return rc;
 
+    if ( nvmx->vmxon_region_pa )
+        gdprintk(XENLOG_WARNING, 
+                 "vmxon again: orig %lx new %lx\n",
+                 nvmx->vmxon_region_pa, gpa);
+
     nvmx->vmxon_region_pa = gpa;
+
+    /*
+     * `fork' the host vmcs to shadow_vmcs
+     * vmcs_lock is not needed since we are on current
+     */
+    nvcpu->nv_n1vmcx = v->arch.hvm_vmx.vmcs;
+    __vmpclear(virt_to_maddr(v->arch.hvm_vmx.vmcs));
+    memcpy(nvcpu->nv_n2vmcx, v->arch.hvm_vmx.vmcs, PAGE_SIZE);
+    __vmptrld(virt_to_maddr(v->arch.hvm_vmx.vmcs));
+    v->arch.hvm_vmx.launched = 0;
     vmreturn(regs, VMSUCCEED);
 
     return X86EMUL_OKAY;
@@ -394,3 +445,38 @@ int nvmx_handle_vmxoff(struct cpu_user_r
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmptrld(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct vmx_inst_decoded decode;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    unsigned long gpa = 0;
+    unsigned long mfn;
+    p2m_type_t p2mt;
+    int rc;
+
+    rc = decode_vmx_inst(regs, &decode, &gpa, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    if ( gpa == vcpu_2_nvmx(v).vmxon_region_pa || gpa & 0xfff )
+    {
+        vmreturn(regs, VMFAIL_INVALID);
+        goto out;
+    }
+
+    if ( nvcpu->nv_vvmcxaddr == VMCX_EADDR )
+    {
+        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
+                               gpa >> PAGE_SHIFT, &p2mt));
+        nvcpu->nv_vvmcx = map_domain_page_global(mfn);
+        nvcpu->nv_vvmcxaddr = gpa;
+        map_io_bitmap_all (v);
+    }
+
+    vmreturn(regs, VMSUCCEED);
+
+out:
+    return X86EMUL_OKAY;
+}
+
diff -r 8264b01b476b -r 4dad232d7fc3 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -152,5 +152,8 @@ enum vvmcs_encoding_type {
 u64 __get_vvmcs(void *vvmcs, u32 vmcs_encoding);
 void __set_vvmcs(void *vvmcs, u32 vmcs_encoding, u64 val);
 
+void nvmx_destroy_vmcs(struct vcpu *v);
+int nvmx_handle_vmptrld(struct cpu_user_regs *regs);
+
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 08 of 20] Emulation of guest VMPTRST
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (6 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 07 of 20] Emulation of guest vmptrld Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 09 of 20] Emulation of guest VMCLEAR Eddie Dong
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 54332433d873777e57e6ac47ee841a2a96c2f543
# Parent  4dad232d7fc3bd62979a1b442d989fe0ca4baafe
Emulation of guest VMPTRST

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 4dad232d7fc3 -r 54332433d873 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2449,11 +2449,15 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMPTRST:
+        if ( nvmx_handle_vmptrst(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
     case EXIT_REASON_VMCLEAR:
     case EXIT_REASON_VMLAUNCH:
-    case EXIT_REASON_VMPTRST:
     case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
     case EXIT_REASON_VMWRITE:
diff -r 4dad232d7fc3 -r 54332433d873 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -480,3 +480,25 @@ out:
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmptrst(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct vmx_inst_decoded decode;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    unsigned long gpa = 0;
+    int rc;
+
+    rc = decode_vmx_inst(regs, &decode, &gpa, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    gpa = nvcpu->nv_vvmcxaddr;
+
+    rc = hvm_copy_to_guest_virt(decode.mem, &gpa, decode.len, 0);
+    if ( rc != HVMCOPY_okay )
+        return X86EMUL_EXCEPTION;
+
+    vmreturn(regs, VMSUCCEED);
+    return X86EMUL_OKAY;
+}
+
diff -r 4dad232d7fc3 -r 54332433d873 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -154,6 +154,7 @@ void __set_vvmcs(void *vvmcs, u32 vmcs_e
 
 void nvmx_destroy_vmcs(struct vcpu *v);
 int nvmx_handle_vmptrld(struct cpu_user_regs *regs);
+int nvmx_handle_vmptrst(struct cpu_user_regs *regs);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 09 of 20] Emulation of guest VMCLEAR
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (7 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 08 of 20] Emulation of guest VMPTRST Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 10 of 20] Emulation of guest VMWRITE Eddie Dong
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 35cc736e8a75a0a349790871232f8761ceae41be
# Parent  54332433d873777e57e6ac47ee841a2a96c2f543
Emulation of guest VMCLEAR

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 54332433d873 -r 35cc736e8a75 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2444,6 +2444,11 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMCLEAR:
+        if ( nvmx_handle_vmclear(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+ 
     case EXIT_REASON_VMPTRLD:
         if ( nvmx_handle_vmptrld(regs) == X86EMUL_OKAY )
             update_guest_eip();
@@ -2456,7 +2461,6 @@ asmlinkage void vmx_vmexit_handler(struc
 
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
-    case EXIT_REASON_VMCLEAR:
     case EXIT_REASON_VMLAUNCH:
     case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
diff -r 54332433d873 -r 35cc736e8a75 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -356,6 +356,14 @@ static void vmreturn(struct cpu_user_reg
     regs->eflags = eflags;
 }
 
+static void __clear_current_vvmcs(struct vcpu *v)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    
+    if ( nvcpu->nv_n2vmcx )
+        __vmpclear(virt_to_maddr(nvcpu->nv_n2vmcx));
+}
+
 static void __map_io_bitmap(struct vcpu *v, u64 vmcs_reg)
 {
     struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
@@ -391,6 +399,26 @@ static inline void map_io_bitmap_all(str
    __map_io_bitmap (v, IO_BITMAP_B);
 }
 
+static void nvmx_purge_vvmcs(struct vcpu *v)
+{
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    __clear_current_vvmcs(v);
+    if ( nvcpu->nv_vvmcxaddr != VMCX_EADDR )
+        unmap_domain_page_global(nvcpu->nv_vvmcx);
+    nvcpu->nv_vvmcx == NULL;
+    nvcpu->nv_vvmcxaddr = VMCX_EADDR;
+    if ( nvmx->iobitmap[0] ) {
+        unmap_domain_page_global(nvmx->iobitmap[0]);
+        nvmx->iobitmap[0] = NULL;
+    }
+    if ( nvmx->iobitmap[1] ) {
+        unmap_domain_page_global(nvmx->iobitmap[1]);
+        nvmx->iobitmap[1] = NULL;
+    }
+}
+
 /*
  * VMX instructions handling
  */
@@ -439,6 +467,7 @@ int nvmx_handle_vmxoff(struct cpu_user_r
     if ( rc != X86EMUL_OKAY )
         return rc;
 
+    nvmx_purge_vvmcs(v);
     nvmx->vmxon_region_pa = 0;
 
     vmreturn(regs, VMSUCCEED);
@@ -465,6 +494,9 @@ int nvmx_handle_vmptrld(struct cpu_user_
         goto out;
     }
 
+    if ( nvcpu->nv_vvmcxaddr != gpa )
+        nvmx_purge_vvmcs(v);
+
     if ( nvcpu->nv_vvmcxaddr == VMCX_EADDR )
     {
         mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
@@ -502,3 +534,37 @@ int nvmx_handle_vmptrst(struct cpu_user_
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmclear(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct vmx_inst_decoded decode;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    unsigned long gpa = 0;
+    int rc;
+
+    rc = decode_vmx_inst(regs, &decode, &gpa, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    if ( gpa & 0xfff )
+    {
+        vmreturn(regs, VMFAIL_INVALID);
+        goto out;
+    }
+
+    if ( gpa != nvcpu->nv_vvmcxaddr && nvcpu->nv_vvmcxaddr != VMCX_EADDR )
+    {
+        gdprintk(XENLOG_WARNING, 
+                 "vmclear gpa %lx not the same with current vmcs %lx\n",
+                 gpa, nvcpu->nv_vvmcxaddr);
+        vmreturn(regs, VMSUCCEED);
+        goto out;
+    }
+    nvmx_purge_vvmcs(v);
+
+    vmreturn(regs, VMSUCCEED);
+
+out:
+    return X86EMUL_OKAY;
+}
+
diff -r 54332433d873 -r 35cc736e8a75 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -155,6 +155,7 @@ void __set_vvmcs(void *vvmcs, u32 vmcs_e
 void nvmx_destroy_vmcs(struct vcpu *v);
 int nvmx_handle_vmptrld(struct cpu_user_regs *regs);
 int nvmx_handle_vmptrst(struct cpu_user_regs *regs);
+int nvmx_handle_vmclear(struct cpu_user_regs *regs);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 10 of 20] Emulation of guest VMWRITE
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (8 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 09 of 20] Emulation of guest VMCLEAR Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 11 of 20] Emulation of guest VMREAD Eddie Dong
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 16e0e95f457e9b3f8ff0528c8f2b0f88b1c41109
# Parent  35cc736e8a75a0a349790871232f8761ceae41be
Emulation of guest VMWRITE

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 35cc736e8a75 -r 16e0e95f457e xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2459,12 +2459,16 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMWRITE:
+        if ( nvmx_handle_vmwrite(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
     case EXIT_REASON_VMLAUNCH:
     case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
-    case EXIT_REASON_VMWRITE:
     case EXIT_REASON_GETSEC:
     case EXIT_REASON_INVEPT:
     case EXIT_REASON_INVVPID:
diff -r 35cc736e8a75 -r 16e0e95f457e xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -568,3 +568,27 @@ out:
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmwrite(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct vmx_inst_decoded decode;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    u64 operandS, vmcs_encoding;
+
+    if ( decode_vmx_inst(regs, &decode, &operandS, 0)
+             != X86EMUL_OKAY )
+        return X86EMUL_EXCEPTION;
+
+    vmcs_encoding = reg_read(regs, decode.reg2);
+    __set_vvmcs(nvcpu->nv_vvmcx, vmcs_encoding, operandS);
+
+    if ( vmcs_encoding == IO_BITMAP_A || vmcs_encoding == IO_BITMAP_A_HIGH )
+        __map_io_bitmap (v, IO_BITMAP_A);
+    else if ( vmcs_encoding == IO_BITMAP_B || 
+              vmcs_encoding == IO_BITMAP_B_HIGH )
+        __map_io_bitmap (v, IO_BITMAP_B);
+
+    vmreturn(regs, VMSUCCEED);
+    return X86EMUL_OKAY;
+}
+
diff -r 35cc736e8a75 -r 16e0e95f457e xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -156,6 +156,7 @@ void nvmx_destroy_vmcs(struct vcpu *v);
 int nvmx_handle_vmptrld(struct cpu_user_regs *regs);
 int nvmx_handle_vmptrst(struct cpu_user_regs *regs);
 int nvmx_handle_vmclear(struct cpu_user_regs *regs);
+int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 11 of 20] Emulation of guest VMREAD
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (9 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 10 of 20] Emulation of guest VMWRITE Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS Eddie Dong
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003600 -28800
# Node ID 4631a951120093ade781c4f4542741266b615576
# Parent  16e0e95f457e9b3f8ff0528c8f2b0f88b1c41109
Emulation of guest VMREAD

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 16e0e95f457e -r 4631a9511200 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -2459,6 +2459,11 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMREAD:
+        if ( nvmx_handle_vmread(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+ 
     case EXIT_REASON_VMWRITE:
         if ( nvmx_handle_vmwrite(regs) == X86EMUL_OKAY )
             update_guest_eip();
@@ -2467,7 +2472,6 @@ asmlinkage void vmx_vmexit_handler(struc
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
     case EXIT_REASON_VMLAUNCH:
-    case EXIT_REASON_VMREAD:
     case EXIT_REASON_VMRESUME:
     case EXIT_REASON_GETSEC:
     case EXIT_REASON_INVEPT:
diff -r 16e0e95f457e -r 4631a9511200 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
@@ -121,6 +121,8 @@ enum vmx_ops_result {
     VMFAIL_INVALID,
 };
 
+#define CASE_SET_REG(REG, reg)      \
+    case VMX_REG_ ## REG: regs->reg = value; break
 #define CASE_GET_REG(REG, reg)      \
     case VMX_REG_ ## REG: value = regs->reg; break
 
@@ -233,6 +235,32 @@ static unsigned long reg_read(struct cpu
     return value;
 }
 
+static void reg_write(struct cpu_user_regs *regs,
+                      enum vmx_regs_enc index,
+                      unsigned long value)
+{
+    switch ( index ) {
+    CASE_SET_REG(RAX, eax);
+    CASE_SET_REG(RCX, ecx);
+    CASE_SET_REG(RDX, edx);
+    CASE_SET_REG(RBX, ebx);
+    CASE_SET_REG(RBP, ebp);
+    CASE_SET_REG(RSI, esi);
+    CASE_SET_REG(RDI, edi);
+    CASE_SET_REG(RSP, esp);
+    CASE_SET_REG(R8, r8);
+    CASE_SET_REG(R9, r9);
+    CASE_SET_REG(R10, r10);
+    CASE_SET_REG(R11, r11);
+    CASE_SET_REG(R12, r12);
+    CASE_SET_REG(R13, r13);
+    CASE_SET_REG(R14, r14);
+    CASE_SET_REG(R15, r15);
+    default:
+        break;
+    }
+}
+
 static int vmx_inst_check_privilege(struct cpu_user_regs *regs, int vmxop_check)
 {
     struct vcpu *v = current;
@@ -568,6 +596,35 @@ out:
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmread(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct vmx_inst_decoded decode;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    u64 value = 0;
+    int rc;
+
+    rc = decode_vmx_inst(regs, &decode, NULL, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    value = __get_vvmcs(nvcpu->nv_vvmcx, reg_read(regs, decode.reg2));
+
+    switch ( decode.type ) {
+    case VMX_INST_MEMREG_TYPE_MEMORY:
+        rc = hvm_copy_to_guest_virt(decode.mem, &value, decode.len, 0);
+        if ( rc != HVMCOPY_okay )
+            return X86EMUL_EXCEPTION;
+        break;
+    case VMX_INST_MEMREG_TYPE_REG:
+        reg_write(regs, decode.reg1, value);
+        break;
+    }
+
+    vmreturn(regs, VMSUCCEED);
+    return X86EMUL_OKAY;
+}
+
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs)
 {
     struct vcpu *v = current;
diff -r 16e0e95f457e -r 4631a9511200 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:20 2011 +0800
@@ -156,6 +156,7 @@ void nvmx_destroy_vmcs(struct vcpu *v);
 int nvmx_handle_vmptrld(struct cpu_user_regs *regs);
 int nvmx_handle_vmptrst(struct cpu_user_regs *regs);
 int nvmx_handle_vmclear(struct cpu_user_regs *regs);
+int nvmx_handle_vmread(struct cpu_user_regs *regs);
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (10 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 11 of 20] Emulation of guest VMREAD Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 14:50   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 13 of 20] Emulation of VMRESUME/VMLAUNCH Eddie Dong
                   ` (8 subsequent siblings)
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID 62cc6c7516e010ef673c75bba83f901785b063d5
# Parent  4631a951120093ade781c4f4542741266b615576
Add APIs to switch n1/n2 VMCS.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 4631a9511200 -r 62cc6c7516e0 xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmcs.c	Thu Jun 02 16:33:21 2011 +0800
@@ -669,6 +669,38 @@ void vmx_disable_intercept_for_msr(struc
     }
 }
 
+/*
+ * Switch VMCS between layer 1 & 2 guest
+ */
+void vmx_vmcs_switch(struct vcpu *v,
+                             struct vmcs_struct *from,
+                             struct vmcs_struct *to)
+{
+    /* no foreign access */
+    if ( unlikely(v != current) )
+        return;
+
+    if ( unlikely(current->arch.hvm_vmx.vmcs != from) )
+        return;
+
+    spin_lock(&v->arch.hvm_vmx.vmcs_lock);
+
+    __vmpclear(virt_to_maddr(from));
+    __vmptrld(virt_to_maddr(to));
+
+    v->arch.hvm_vmx.vmcs = to;
+    v->arch.hvm_vmx.launched = 0;
+    this_cpu(current_vmcs) = to;
+
+    if ( v->arch.hvm_vmx.hostenv_migrated )
+    {
+        v->arch.hvm_vmx.hostenv_migrated = 0;
+        vmx_set_host_env(v);
+    }
+
+    spin_unlock(&v->arch.hvm_vmx.vmcs_lock);
+}
+
 static int construct_vmcs(struct vcpu *v)
 {
     struct domain *d = v->domain;
@@ -1078,6 +1110,13 @@ void vmx_do_resume(struct vcpu *v)
         hvm_migrate_timers(v);
         hvm_migrate_pirqs(v);
         vmx_set_host_env(v);
+        /*
+         * Both n1 VMCS and n2 VMCS need to update the host environment after 
+         * VCPU migration. The environment of current VMCS is updated in place,
+         * but the action of another VMCS is deferred till it is switched in.
+         */
+        v->arch.hvm_vmx.hostenv_migrated = 1;
+
         hvm_asid_flush_vcpu(v);
     }
 
diff -r 4631a9511200 -r 62cc6c7516e0 xen/include/asm-x86/hvm/vmx/vmcs.h
--- a/xen/include/asm-x86/hvm/vmx/vmcs.h	Thu Jun 02 16:33:20 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vmcs.h	Thu Jun 02 16:33:21 2011 +0800
@@ -123,6 +123,7 @@ struct arch_vmx_struct {
     struct segment_register vm86_saved_seg[x86_seg_tr + 1];
     /* Remember EFLAGS while in virtual 8086 mode */
     uint32_t             vm86_saved_eflags;
+    int                  hostenv_migrated;
 };
 
 int vmx_create_vmcs(struct vcpu *v);
@@ -390,6 +391,9 @@ int vmx_read_guest_msr(u32 msr, u64 *val
 int vmx_write_guest_msr(u32 msr, u64 val);
 int vmx_add_guest_msr(u32 msr);
 int vmx_add_host_load_msr(u32 msr);
+void vmx_vmcs_switch(struct vcpu *v,
+                      struct vmcs_struct *from,
+                      struct vmcs_struct *to);
 
 #endif /* ASM_X86_HVM_VMX_VMCS_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 13 of 20] Emulation of VMRESUME/VMLAUNCH
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (11 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 14 of 20] Extend VMCS control fields for n2 guest Eddie Dong
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID 279a27a3b1a90380c8fa579e87835cb58a8f4aac
# Parent  62cc6c7516e010ef673c75bba83f901785b063d5
Emulation of VMRESUME/VMLAUNCH

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 62cc6c7516e0 -r 279a27a3b1a9 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -2175,6 +2175,11 @@ asmlinkage void vmx_vmexit_handler(struc
     /* Now enable interrupts so it's safe to take locks. */
     local_irq_enable();
 
+    /* XXX: This looks ugly, but we need a mechanism to ensure
+     * any pending vmresume has really happened
+     */
+    vcpu_nestedhvm(v).nv_vmswitch_in_progress = 0;
+
     if ( unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) )
         return vmx_failed_vmentry(exit_reason, regs);
 
@@ -2469,10 +2474,18 @@ asmlinkage void vmx_vmexit_handler(struc
             update_guest_eip();
         break;
 
+    case EXIT_REASON_VMLAUNCH:
+        if ( nvmx_handle_vmlaunch(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
+    case EXIT_REASON_VMRESUME:
+        if ( nvmx_handle_vmresume(regs) == X86EMUL_OKAY )
+            update_guest_eip();
+        break;
+
     case EXIT_REASON_MWAIT_INSTRUCTION:
     case EXIT_REASON_MONITOR_INSTRUCTION:
-    case EXIT_REASON_VMLAUNCH:
-    case EXIT_REASON_VMRESUME:
     case EXIT_REASON_GETSEC:
     case EXIT_REASON_INVEPT:
     case EXIT_REASON_INVVPID:
diff -r 62cc6c7516e0 -r 279a27a3b1a9 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -261,6 +261,13 @@ static void reg_write(struct cpu_user_re
     }
 }
 
+static inline u32 __n2_exec_control(struct vcpu *v)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    return __get_vvmcs(nvcpu->nv_vvmcx, CPU_BASED_VM_EXEC_CONTROL);
+}
+
 static int vmx_inst_check_privilege(struct cpu_user_regs *regs, int vmxop_check)
 {
     struct vcpu *v = current;
@@ -502,6 +509,34 @@ int nvmx_handle_vmxoff(struct cpu_user_r
     return X86EMUL_OKAY;
 }
 
+int nvmx_handle_vmresume(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    int rc;
+
+    rc = vmx_inst_check_privilege(regs, 0);
+    if ( rc != X86EMUL_OKAY )
+        return rc;
+
+    /* check VMCS is valid and IO BITMAP is set */
+    if ( (nvcpu->nv_vvmcxaddr != VMCX_EADDR) &&
+            ((nvmx->iobitmap[0] && nvmx->iobitmap[1]) ||
+            !(__n2_exec_control(v) & CPU_BASED_ACTIVATE_IO_BITMAP) ) )
+        nvcpu->nv_vmentry_pending = 1;
+    else
+        vmreturn(regs, VMFAIL_INVALID);
+
+    return X86EMUL_OKAY;
+}
+
+int nvmx_handle_vmlaunch(struct cpu_user_regs *regs)
+{
+    /* TODO: check for initial launch/resume */
+    return nvmx_handle_vmresume(regs);
+}
+
 int nvmx_handle_vmptrld(struct cpu_user_regs *regs)
 {
     struct vcpu *v = current;
diff -r 62cc6c7516e0 -r 279a27a3b1a9 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -158,6 +158,8 @@ int nvmx_handle_vmptrst(struct cpu_user_
 int nvmx_handle_vmclear(struct cpu_user_regs *regs);
 int nvmx_handle_vmread(struct cpu_user_regs *regs);
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
+int nvmx_handle_vmresume(struct cpu_user_regs *regs);
+int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 14 of 20] Extend VMCS control fields for n2 guest
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (12 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 13 of 20] Emulation of VMRESUME/VMLAUNCH Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests Eddie Dong
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID aacbe98da103be572c9f96d6c85788f74f574117
# Parent  279a27a3b1a90380c8fa579e87835cb58a8f4aac
Extend VMCS control fields for n2 guest

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 279a27a3b1a9 -r aacbe98da103 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -54,6 +54,7 @@
 #include <asm/xenoprof.h>
 #include <asm/debugger.h>
 #include <asm/apic.h>
+#include <asm/hvm/nestedhvm.h>
 
 enum handler_return { HNDL_done, HNDL_unhandled, HNDL_exception_raised };
 
@@ -361,18 +362,28 @@ long_mode_do_msr_write(unsigned int msr,
 
 void vmx_update_cpu_exec_control(struct vcpu *v)
 {
-    __vmwrite(CPU_BASED_VM_EXEC_CONTROL, v->arch.hvm_vmx.exec_control);
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+        nvmx_update_exec_control(v, v->arch.hvm_vmx.exec_control);
+    else
+        __vmwrite(CPU_BASED_VM_EXEC_CONTROL, v->arch.hvm_vmx.exec_control);
 }
 
 static void vmx_update_secondary_exec_control(struct vcpu *v)
 {
-    __vmwrite(SECONDARY_VM_EXEC_CONTROL,
-              v->arch.hvm_vmx.secondary_exec_control);
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+        nvmx_update_secondary_exec_control(v,
+            v->arch.hvm_vmx.secondary_exec_control);
+    else
+        __vmwrite(SECONDARY_VM_EXEC_CONTROL,
+                  v->arch.hvm_vmx.secondary_exec_control);
 }
 
 void vmx_update_exception_bitmap(struct vcpu *v)
 {
-    __vmwrite(EXCEPTION_BITMAP, v->arch.hvm_vmx.exception_bitmap);
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+        nvmx_update_exception_bitmap(v, v->arch.hvm_vmx.exception_bitmap);
+    else
+        __vmwrite(EXCEPTION_BITMAP, v->arch.hvm_vmx.exception_bitmap);
 }
 
 static int vmx_guest_x86_mode(struct vcpu *v)
diff -r 279a27a3b1a9 -r aacbe98da103 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -25,6 +25,7 @@
 #include <asm/p2m.h>
 #include <asm/hvm/vmx/vmx.h>
 #include <asm/hvm/vmx/vvmx.h>
+#include <asm/hvm/nestedhvm.h>
 
 int nvmx_vcpu_initialise(struct vcpu *v)
 {
@@ -391,6 +392,93 @@ static void vmreturn(struct cpu_user_reg
     regs->eflags = eflags;
 }
 
+/*
+ * Nested VMX uses "strict" condition to exit from 
+ * L2 guest if either L1 VMM or L0 VMM expect to exit.
+ */
+static inline u32 __shadow_control(struct vcpu *v,
+                                 unsigned int field,
+                                 u32 host_value)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    return (u32) __get_vvmcs(nvcpu->nv_vvmcx, field) | host_value;
+}
+
+static void set_shadow_control(struct vcpu *v,
+                               unsigned int field,
+                               u32 host_value)
+{
+    __vmwrite(field, __shadow_control(v, field, host_value));
+}
+
+unsigned long *_shadow_io_bitmap(struct vcpu *v)
+{
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    int port80, portED;
+    u8 *bitmap;
+
+    bitmap = nvmx->iobitmap[0];
+    port80 = bitmap[0x80 >> 3] & (1 << (0x80 & 0x7)) ? 1 : 0;
+    portED = bitmap[0xed >> 3] & (1 << (0xed & 0x7)) ? 1 : 0;
+
+    return nestedhvm_vcpu_iomap_get(port80, portED);
+}
+
+void nvmx_update_exec_control(struct vcpu *v, unsigned long host_cntrl)
+{
+#define PIO_CNTRL_BITS    ( CPU_BASED_ACTIVATE_IO_BITMAP         \
+             | CPU_BASED_UNCOND_IO_EXITING)
+    u32 pio_cntrl = PIO_CNTRL_BITS;
+    unsigned long *bitmap; 
+    u32 shadow_cntrl;
+ 
+    shadow_cntrl = __n2_exec_control(v);
+    pio_cntrl &= shadow_cntrl;
+    /* Enforce the removed features */
+#define REMOVED_EXEC_CONTROL_BITS (CPU_BASED_TPR_SHADOW          \
+             | CPU_BASED_ACTIVATE_MSR_BITMAP                     \
+             | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS             \
+             | CPU_BASED_ACTIVATE_IO_BITMAP                      \
+             | CPU_BASED_UNCOND_IO_EXITING)
+    shadow_cntrl &= ~REMOVED_EXEC_CONTROL_BITS;
+    shadow_cntrl |= host_cntrl;
+    if ( pio_cntrl == CPU_BASED_UNCOND_IO_EXITING ) {
+        /* L1 VMM intercepts all I/O instructions */
+        shadow_cntrl |= CPU_BASED_UNCOND_IO_EXITING;
+        shadow_cntrl &= ~CPU_BASED_ACTIVATE_IO_BITMAP;
+    }
+    else {
+        /* Use IO_BITMAP in shadow */
+        if ( pio_cntrl == 0 ) {
+            /* 
+             * L1 VMM doesn't intercept IO instruction.
+             * Use host configuration and reset IO_BITMAP
+             */
+            bitmap = hvm_io_bitmap;
+        }
+        else {
+            /* use IO bitmap */
+            bitmap = _shadow_io_bitmap(v);
+        }
+        __vmwrite(IO_BITMAP_A, virt_to_maddr(bitmap));
+        __vmwrite(IO_BITMAP_B, virt_to_maddr(bitmap) + PAGE_SIZE);
+    }
+
+    __vmwrite(CPU_BASED_VM_EXEC_CONTROL, shadow_cntrl);
+}
+
+void nvmx_update_secondary_exec_control(struct vcpu *v,
+                                            unsigned long value)
+{
+    set_shadow_control(v, SECONDARY_VM_EXEC_CONTROL, value);
+}
+
+void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value)
+{
+    set_shadow_control(v, EXCEPTION_BITMAP, value);
+}
+
 static void __clear_current_vvmcs(struct vcpu *v)
 {
     struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
diff -r 279a27a3b1a9 -r aacbe98da103 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -161,5 +161,10 @@ int nvmx_handle_vmwrite(struct cpu_user_
 int nvmx_handle_vmresume(struct cpu_user_regs *regs);
 int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
 
+void nvmx_update_exec_control(struct vcpu *v, unsigned long value);
+void nvmx_update_secondary_exec_control(struct vcpu *v,
+                                        unsigned long value);
+void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value);
+
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (13 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 14 of 20] Extend VMCS control fields for n2 guest Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 14:56   ` Tim Deegan
  2011-06-02 14:58   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 16 of 20] interrupt/exception handling for n2 guest Eddie Dong
                   ` (5 subsequent siblings)
  20 siblings, 2 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID bd15acfc9b822ccf27b5c7603e600e5e11733907
# Parent  aacbe98da103be572c9f96d6c85788f74f574117
Switch shadow/virtual VMCS between n1/n2 guests.

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r aacbe98da103 -r bd15acfc9b82 xen/arch/x86/hvm/vmx/entry.S
--- a/xen/arch/x86/hvm/vmx/entry.S	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/entry.S	Thu Jun 02 16:33:21 2011 +0800
@@ -119,6 +119,7 @@ vmx_asm_vmexit_handler:
 .globl vmx_asm_do_vmentry
 vmx_asm_do_vmentry:
         call vmx_intr_assist
+        call nvmx_switch_guest
 
         get_current(bx)
         cli
diff -r aacbe98da103 -r bd15acfc9b82 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -474,6 +474,48 @@ void nvmx_update_secondary_exec_control(
     set_shadow_control(v, SECONDARY_VM_EXEC_CONTROL, value);
 }
 
+static void nvmx_update_pin_control(struct vcpu *v,
+					unsigned long host_cntrl)
+{
+    u32 shadow_cntrl;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+#define REMOVED_PIN_CONTROL_BITS (PIN_BASED_PREEMPT_TIMER)
+    shadow_cntrl = __get_vvmcs(nvcpu->nv_vvmcx, PIN_BASED_VM_EXEC_CONTROL);
+    shadow_cntrl &= ~REMOVED_PIN_CONTROL_BITS;
+    shadow_cntrl |= host_cntrl;
+    __vmwrite(PIN_BASED_VM_EXEC_CONTROL, shadow_cntrl);
+}
+
+static void nvmx_update_exit_control(struct vcpu *v,
+					unsigned long host_cntrl)
+{
+    u32 shadow_cntrl;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+#define REMOVED_EXIT_CONTROL_BITS    ((1<<2) |           \
+                (VM_EXIT_SAVE_GUEST_PAT) |               \
+                (VM_EXIT_SAVE_GUEST_EFER) |              \
+                (VM_EXIT_SAVE_PREEMPT_TIMER))
+    shadow_cntrl = __get_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_CONTROLS);
+    shadow_cntrl &= ~REMOVED_EXIT_CONTROL_BITS;
+    shadow_cntrl |= host_cntrl;
+    __vmwrite(VM_EXIT_CONTROLS, shadow_cntrl);
+}
+
+static void nvmx_update_entry_control(struct vcpu *v)
+{
+    u32 shadow_cntrl;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    /* VM_ENTRY_CONTROLS: enforce removed features */
+#define REMOVED_ENTRY_CONTROL_BITS (VM_ENTRY_LOAD_GUEST_PAT \
+            | VM_ENTRY_LOAD_GUEST_EFER)
+    shadow_cntrl = __get_vvmcs(nvcpu->nv_vvmcx, VM_ENTRY_CONTROLS);
+    shadow_cntrl &= ~REMOVED_ENTRY_CONTROL_BITS;
+    __vmwrite(VM_ENTRY_CONTROLS, shadow_cntrl);
+}
+
 void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value)
 {
     set_shadow_control(v, EXCEPTION_BITMAP, value);
@@ -543,6 +585,361 @@ static void nvmx_purge_vvmcs(struct vcpu
 }
 
 /*
+ * Context synchronized between shadow and virtual VMCS.
+ */
+static unsigned long vmcs_gstate_field[] = {
+    /* 16 BITS */
+    GUEST_ES_SELECTOR,
+    GUEST_CS_SELECTOR,
+    GUEST_SS_SELECTOR,
+    GUEST_DS_SELECTOR,
+    GUEST_FS_SELECTOR,
+    GUEST_GS_SELECTOR,
+    GUEST_LDTR_SELECTOR,
+    GUEST_TR_SELECTOR,
+    /* 64 BITS */
+    VMCS_LINK_POINTER,
+    GUEST_IA32_DEBUGCTL,
+#ifndef CONFIG_X86_64
+    VMCS_LINK_POINTER_HIGH,
+    GUEST_IA32_DEBUGCTL_HIGH,
+#endif
+    /* 32 BITS */
+    GUEST_ES_LIMIT,
+    GUEST_CS_LIMIT,
+    GUEST_SS_LIMIT,
+    GUEST_DS_LIMIT,
+    GUEST_FS_LIMIT,
+    GUEST_GS_LIMIT,
+    GUEST_LDTR_LIMIT,
+    GUEST_TR_LIMIT,
+    GUEST_GDTR_LIMIT,
+    GUEST_IDTR_LIMIT,
+    GUEST_ES_AR_BYTES,
+    GUEST_CS_AR_BYTES,
+    GUEST_SS_AR_BYTES,
+    GUEST_DS_AR_BYTES,
+    GUEST_FS_AR_BYTES,
+    GUEST_GS_AR_BYTES,
+    GUEST_LDTR_AR_BYTES,
+    GUEST_TR_AR_BYTES,
+    GUEST_INTERRUPTIBILITY_INFO,
+    GUEST_ACTIVITY_STATE,
+    GUEST_SYSENTER_CS,
+    /* natural */
+    GUEST_ES_BASE,
+    GUEST_CS_BASE,
+    GUEST_SS_BASE,
+    GUEST_DS_BASE,
+    GUEST_FS_BASE,
+    GUEST_GS_BASE,
+    GUEST_LDTR_BASE,
+    GUEST_TR_BASE,
+    GUEST_GDTR_BASE,
+    GUEST_IDTR_BASE,
+    GUEST_DR7,
+    /*
+     * Following guest states are in local cache (cpu_user_regs)
+     GUEST_RSP,
+     GUEST_RIP,
+     */
+    GUEST_RFLAGS,
+    GUEST_PENDING_DBG_EXCEPTIONS,
+    GUEST_SYSENTER_ESP,
+    GUEST_SYSENTER_EIP,
+};
+
+/*
+ * Context: shadow -> virtual VMCS
+ */
+static unsigned long vmcs_ro_field[] = {
+    GUEST_PHYSICAL_ADDRESS,
+    VM_INSTRUCTION_ERROR,
+    VM_EXIT_REASON,
+    VM_EXIT_INTR_INFO,
+    VM_EXIT_INTR_ERROR_CODE,
+    IDT_VECTORING_INFO,
+    IDT_VECTORING_ERROR_CODE,
+    VM_EXIT_INSTRUCTION_LEN,
+    VMX_INSTRUCTION_INFO,
+    EXIT_QUALIFICATION,
+    GUEST_LINEAR_ADDRESS
+};
+
+static struct vmcs_host_to_guest {
+    unsigned long host_field;
+    unsigned long guest_field;
+} vmcs_h2g_field[] = {
+    {HOST_ES_SELECTOR, GUEST_ES_SELECTOR},
+    {HOST_CS_SELECTOR, GUEST_CS_SELECTOR},
+    {HOST_SS_SELECTOR, GUEST_SS_SELECTOR},
+    {HOST_DS_SELECTOR, GUEST_DS_SELECTOR},
+    {HOST_FS_SELECTOR, GUEST_FS_SELECTOR},
+    {HOST_GS_SELECTOR, GUEST_GS_SELECTOR},
+    {HOST_TR_SELECTOR, GUEST_TR_SELECTOR},
+    {HOST_SYSENTER_CS, GUEST_SYSENTER_CS},
+    {HOST_FS_BASE, GUEST_FS_BASE},
+    {HOST_GS_BASE, GUEST_GS_BASE},
+    {HOST_TR_BASE, GUEST_TR_BASE},
+    {HOST_GDTR_BASE, GUEST_GDTR_BASE},
+    {HOST_IDTR_BASE, GUEST_IDTR_BASE},
+    {HOST_SYSENTER_ESP, GUEST_SYSENTER_ESP},
+    {HOST_SYSENTER_EIP, GUEST_SYSENTER_EIP},
+};
+
+static void vvmcs_to_shadow(void *vvmcs, unsigned int field)
+{
+    u64 value;
+
+    value = __get_vvmcs(vvmcs, field);
+    __vmwrite(field, value);
+}
+
+static void shadow_to_vvmcs(void *vvmcs, unsigned int field)
+{
+    u64 value;
+    int rc;
+
+    value = __vmread_safe(field, &rc);
+    if ( !rc )
+        __set_vvmcs(vvmcs, field, value);
+}
+
+static void load_shadow_control(struct vcpu *v)
+{
+    /* TODO: Make sure the shadow control doesn't set the bits 
+     * L0 VMM doesn't handle.
+     */
+
+    /*
+     * Set shadow controls:  PIN_BASED, CPU_BASED, EXIT, ENTRY
+     * and EXCEPTION
+     * Enforce the removed features
+     */
+    nvmx_update_pin_control(v, vmx_pin_based_exec_control);
+    vmx_update_cpu_exec_control(v);
+    nvmx_update_exit_control(v, vmx_vmexit_control);
+    nvmx_update_entry_control(v);
+    vmx_update_exception_bitmap(v);
+}
+
+static void load_shadow_guest_state(struct vcpu *v)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    void *vvmcs = nvcpu->nv_vvmcx;
+    int i;
+
+    /* vvmcs.gstate to shadow vmcs.gstate */
+    for ( i = 0; i < ARRAY_SIZE(vmcs_gstate_field); i++ )
+        vvmcs_to_shadow(vvmcs, vmcs_gstate_field[i]);
+
+    hvm_set_cr0(__get_vvmcs(vvmcs, GUEST_CR0));
+    hvm_set_cr4(__get_vvmcs(vvmcs, GUEST_CR4));
+    hvm_set_cr3(__get_vvmcs(vvmcs, GUEST_CR3));
+
+    vvmcs_to_shadow(vvmcs, VM_ENTRY_INTR_INFO);
+    vvmcs_to_shadow(vvmcs, VM_ENTRY_EXCEPTION_ERROR_CODE);
+    vvmcs_to_shadow(vvmcs, VM_ENTRY_INSTRUCTION_LEN);
+
+    /* XXX: should refer to GUEST_HOST_MASK of both L0 and L1 */
+    vvmcs_to_shadow(vvmcs, CR0_READ_SHADOW);
+    vvmcs_to_shadow(vvmcs, CR4_READ_SHADOW);
+    vvmcs_to_shadow(vvmcs, CR0_GUEST_HOST_MASK);
+    vvmcs_to_shadow(vvmcs, CR4_GUEST_HOST_MASK);
+
+    /* TODO: PDPTRs for nested ept */
+    /* TODO: CR3 target control */
+}
+
+static void virtual_vmentry(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    void *vvmcs = nvcpu->nv_vvmcx;
+#ifdef __x86_64__
+    unsigned long lm_l1, lm_l2;
+#endif
+
+    vmx_vmcs_switch(v, v->arch.hvm_vmx.vmcs, nvcpu->nv_n2vmcx);
+
+    nestedhvm_vcpu_enter_guestmode(v);
+    nvcpu->nv_vmentry_pending = 0;
+    nvcpu->nv_vmswitch_in_progress = 1;
+
+#ifdef __x86_64__
+    /*
+     * EFER handling:
+     * hvm_set_efer won't work if CR0.PG = 1, so we change the value
+     * directly to make hvm_long_mode_enabled(v) work in L2.
+     * An additional update_paging_modes is also needed if
+     * there is 32/64 switch. v->arch.hvm_vcpu.guest_efer doesn't
+     * need to be saved, since its value on vmexit is determined by
+     * L1 exit_controls
+     */
+    lm_l1 = !!hvm_long_mode_enabled(v);
+    lm_l2 = !!(__get_vvmcs(vvmcs, VM_ENTRY_CONTROLS) &
+                           VM_ENTRY_IA32E_MODE);
+
+    if ( lm_l2 )
+        v->arch.hvm_vcpu.guest_efer |= EFER_LMA | EFER_LME;
+    else
+        v->arch.hvm_vcpu.guest_efer &= ~(EFER_LMA | EFER_LME);
+#endif
+
+    load_shadow_control(v);
+    load_shadow_guest_state(v);
+
+#ifdef __x86_64__
+    if ( lm_l1 != lm_l2 )
+    {
+        paging_update_paging_modes(v);
+    }
+#endif
+
+    regs->rip = __get_vvmcs(vvmcs, GUEST_RIP);
+    regs->rsp = __get_vvmcs(vvmcs, GUEST_RSP);
+    regs->rflags = __get_vvmcs(vvmcs, GUEST_RFLAGS);
+
+    /* TODO: EPT_POINTER */
+}
+
+static void sync_vvmcs_guest_state(struct vcpu *v, struct cpu_user_regs *regs)
+{
+    int i;
+    unsigned long mask;
+    unsigned long cr;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    void *vvmcs = nvcpu->nv_vvmcx;
+
+    /* copy shadow vmcs.gstate back to vvmcs.gstate */
+    for ( i = 0; i < ARRAY_SIZE(vmcs_gstate_field); i++ )
+        shadow_to_vvmcs(vvmcs, vmcs_gstate_field[i]);
+    /* RIP, RSP are in user regs */
+    __set_vvmcs(vvmcs, GUEST_RIP, regs->rip);
+    __set_vvmcs(vvmcs, GUEST_RSP, regs->rsp);
+
+    /* SDM 20.6.6: L2 guest execution may change GUEST CR0/CR4 */
+    mask = __get_vvmcs(vvmcs, CR0_GUEST_HOST_MASK);
+    if ( ~mask )
+    {
+        cr = __get_vvmcs(vvmcs, GUEST_CR0);
+        cr = (cr & mask) | (__vmread(GUEST_CR4) & ~mask);
+        __set_vvmcs(vvmcs, GUEST_CR0, cr);
+    }
+
+    mask = __get_vvmcs(vvmcs, CR4_GUEST_HOST_MASK);
+    if ( ~mask )
+    {
+        cr = __get_vvmcs(vvmcs, GUEST_CR4);
+        cr = (cr & mask) | (__vmread(GUEST_CR4) & ~mask);
+        __set_vvmcs(vvmcs, GUEST_CR4, cr);
+    }
+
+    /* CR3 sync if exec doesn't want cr3 load exiting: i.e. nested EPT */
+    if ( !(__n2_exec_control(v) & CPU_BASED_CR3_LOAD_EXITING) )
+        shadow_to_vvmcs(vvmcs, GUEST_CR3);
+}
+
+static void sync_vvmcs_ro(struct vcpu *v)
+{
+    int i;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    for ( i = 0; i < ARRAY_SIZE(vmcs_ro_field); i++ )
+        shadow_to_vvmcs(nvcpu->nv_vvmcx, vmcs_ro_field[i]);
+}
+
+static void load_vvmcs_host_state(struct vcpu *v)
+{
+    int i;
+    u64 r;
+    void *vvmcs = vcpu_nestedhvm(v).nv_vvmcx;
+
+    for ( i = 0; i < ARRAY_SIZE(vmcs_h2g_field); i++ )
+    {
+        r = __get_vvmcs(vvmcs, vmcs_h2g_field[i].host_field);
+        __vmwrite(vmcs_h2g_field[i].guest_field, r);
+    }
+
+    hvm_set_cr0(__get_vvmcs(vvmcs, HOST_CR0));
+    hvm_set_cr4(__get_vvmcs(vvmcs, HOST_CR4));
+    hvm_set_cr3(__get_vvmcs(vvmcs, HOST_CR3));
+
+    __set_vvmcs(vvmcs, VM_ENTRY_INTR_INFO, 0);
+}
+
+static void virtual_vmexit(struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+#ifdef __x86_64__
+    unsigned long lm_l1, lm_l2;
+#endif
+
+    sync_vvmcs_ro(v);
+    sync_vvmcs_guest_state(v, regs);
+
+    vmx_vmcs_switch(v, v->arch.hvm_vmx.vmcs, nvcpu->nv_n1vmcx);
+
+    nestedhvm_vcpu_exit_guestmode(v);
+    nvcpu->nv_vmexit_pending = 0;
+
+#ifdef __x86_64__
+    lm_l2 = !!hvm_long_mode_enabled(v);
+    lm_l1 = !!(__get_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_CONTROLS) &
+                           VM_EXIT_IA32E_MODE);
+
+    if ( lm_l1 )
+        v->arch.hvm_vcpu.guest_efer |= EFER_LMA | EFER_LME;
+    else
+        v->arch.hvm_vcpu.guest_efer &= ~(EFER_LMA | EFER_LME);
+#endif
+
+    vmx_update_cpu_exec_control(v);
+    vmx_update_exception_bitmap(v);
+
+    load_vvmcs_host_state(v);
+
+#ifdef __x86_64__
+    if ( lm_l1 != lm_l2 )
+        paging_update_paging_modes(v);
+#endif
+
+    regs->rip = __get_vvmcs(nvcpu->nv_vvmcx, HOST_RIP);
+    regs->rsp = __get_vvmcs(nvcpu->nv_vvmcx, HOST_RSP);
+    regs->rflags = __vmread(GUEST_RFLAGS);
+
+    vmreturn(regs, VMSUCCEED);
+}
+
+asmlinkage void nvmx_switch_guest(void)
+{
+    struct vcpu *v = current;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    struct cpu_user_regs *regs = guest_cpu_user_regs();
+
+    /*
+     * a softirq may interrupt us between a virtual vmentry is
+     * just handled and the true vmentry. If during this window,
+     * a L1 virtual interrupt causes another virtual vmexit, we
+     * cannot let that happen or VM_ENTRY_INTR_INFO will be lost.
+     */
+    if ( unlikely(nvcpu->nv_vmswitch_in_progress) )
+        return;
+
+    if ( nestedhvm_vcpu_in_guestmode(v) && nvcpu->nv_vmexit_pending )
+    {
+        local_irq_enable();
+        virtual_vmexit(regs);
+    }
+    else if ( !nestedhvm_vcpu_in_guestmode(v) && nvcpu->nv_vmentry_pending )
+    {
+        local_irq_enable();
+        virtual_vmentry(regs);
+    }
+}
+
+/*
  * VMX instructions handling
  */
 
diff -r aacbe98da103 -r bd15acfc9b82 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -165,6 +165,7 @@ void nvmx_update_exec_control(struct vcp
 void nvmx_update_secondary_exec_control(struct vcpu *v,
                                         unsigned long value);
 void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value);
+asmlinkage void nvmx_switch_guest(void);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 16 of 20] interrupt/exception handling for n2 guest
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (14 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 17 of 20] VM exit handler of n2-guest Eddie Dong
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID f14f451a780e60e920c057e44fa1bc3ee40495a7
# Parent  bd15acfc9b822ccf27b5c7603e600e5e11733907
interrupt/exception handling for n2 guest

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r bd15acfc9b82 -r f14f451a780e xen/arch/x86/hvm/vmx/intr.c
--- a/xen/arch/x86/hvm/vmx/intr.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/intr.c	Thu Jun 02 16:33:21 2011 +0800
@@ -35,6 +35,7 @@
 #include <asm/hvm/vmx/vmcs.h>
 #include <asm/hvm/vpic.h>
 #include <asm/hvm/vlapic.h>
+#include <asm/hvm/nestedhvm.h>
 #include <public/hvm/ioreq.h>
 #include <asm/hvm/trace.h>
 
@@ -109,6 +110,102 @@ static void enable_intr_window(struct vc
     }
 }
 
+/*
+ * Injecting interrupts for nested virtualization
+ *
+ *  When injecting virtual interrupts (originated from L0), there are
+ *  two major possibilities, within L1 context and within L2 context
+ *   1. L1 context (in_nesting == 0)
+ *     Everything is the same as without nested, check RFLAGS.IF to
+ *     see if the injection can be done, using VMCS to inject the
+ *     interrupt
+ *
+ *   2. L2 context (in_nesting == 1)
+ *     Causes a virtual VMExit, RFLAGS.IF is ignored, whether to ack
+ *     irq according to intr_ack_on_exit, shouldn't block normally,
+ *     except for:
+ *    a. context transition
+ *     interrupt needs to be blocked at virtual VMEntry time
+ *    b. L2 idtv reinjection
+ *     if L2 idtv is handled within L0 (e.g. L0 shadow page fault),
+ *     it needs to be reinjected without exiting to L1, interrupt
+ *     injection should be blocked as well at this point.
+ *
+ *  Unfortunately, interrupt blocking in L2 won't work with simple
+ *  intr_window_open (which depends on L2's IF). To solve this,
+ *  the following algorithm can be used:
+ *   v->arch.hvm_vmx.exec_control.VIRTUAL_INTR_PENDING now denotes
+ *   only L0 control, physical control may be different from it.
+ *       - if in L1, it behaves normally, intr window is written
+ *         to physical control as it is
+ *       - if in L2, replace it to MTF (or NMI window) if possible
+ *       - if MTF/NMI window is not used, intr window can still be
+ *         used but may have negative impact on interrupt performance.
+ */
+
+enum hvm_intblk nvmx_intr_blocked(struct vcpu *v)
+{
+    int r = hvm_intblk_none;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+    {
+        if ( nvcpu->nv_vmexit_pending ||
+             nvcpu->nv_vmswitch_in_progress ||
+             (__vmread(VM_ENTRY_INTR_INFO) & INTR_INFO_VALID_MASK) )
+            r = hvm_intblk_rflags_ie;
+    }
+    else if ( nvcpu->nv_vmentry_pending )
+        r = hvm_intblk_rflags_ie;
+
+    return r;
+}
+
+static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack intack)
+{
+    u32 exit_ctrl;
+
+    /*
+     * TODO:
+     *   - if L1 intr-window exiting == 0
+     *   - vNMI
+     */
+
+    if ( nvmx_intr_blocked(v) != hvm_intblk_none )
+    {
+        enable_intr_window(v, intack);
+        return 1;
+    }
+
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+    {
+        if ( intack.source == hvm_intsrc_pic ||
+                 intack.source == hvm_intsrc_lapic )
+        {
+            vmx_inject_extint(intack.vector);
+
+            exit_ctrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
+                            VM_EXIT_CONTROLS);
+            if ( exit_ctrl & VM_EXIT_ACK_INTR_ON_EXIT )
+            {
+                /* for now, duplicate the ack path in vmx_intr_assist */
+                hvm_vcpu_ack_pending_irq(v, intack);
+                pt_intr_post(v, intack);
+
+                intack = hvm_vcpu_has_pending_irq(v);
+                if ( unlikely(intack.source != hvm_intsrc_none) )
+                    enable_intr_window(v, intack);
+            }
+            else
+                enable_intr_window(v, intack);
+
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
 asmlinkage void vmx_intr_assist(void)
 {
     struct hvm_intack intack;
@@ -132,6 +229,9 @@ asmlinkage void vmx_intr_assist(void)
         if ( likely(intack.source == hvm_intsrc_none) )
             goto out;
 
+        if ( unlikely(nvmx_intr_intercept(v, intack)) )
+            goto out;
+
         intblk = hvm_interrupt_blocked(v, intack);
         if ( intblk == hvm_intblk_tpr )
         {
diff -r bd15acfc9b82 -r f14f451a780e xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -1243,6 +1243,31 @@ void ept_sync_domain(struct domain *d)
                      __ept_sync_domain, d, 1);
 }
 
+void nvmx_enqueue_n2_exceptions(struct vcpu *v, 
+            unsigned long intr_fields, int error_code)
+{
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+
+    if ( !(nvmx->intr.intr_info & INTR_INFO_VALID_MASK) ) {
+        /* enqueue the exception till the VMCS switch back to L1 */
+        nvmx->intr.intr_info = intr_fields;
+        nvmx->intr.error_code = error_code;
+        vcpu_nestedhvm(v).nv_vmexit_pending = 1;
+        return;
+    }
+    else
+        gdprintk(XENLOG_ERR, "Double Fault on Nested Guest: exception %lx %x"
+                 "on %lx %x\n", intr_fields, error_code,
+                 nvmx->intr.intr_info, nvmx->intr.error_code);
+}
+
+static int nvmx_vmexit_exceptions(struct vcpu *v, unsigned int trapnr,
+                      int errcode, unsigned long cr2)
+{
+    nvmx_enqueue_n2_exceptions(v, trapnr, errcode);
+    return NESTEDHVM_VMEXIT_DONE;
+}
+
 static void __vmx_inject_exception(int trap, int type, int error_code)
 {
     unsigned long intr_fields;
@@ -1272,11 +1297,16 @@ static void __vmx_inject_exception(int t
 
 void vmx_inject_hw_exception(int trap, int error_code)
 {
-    unsigned long intr_info = __vmread(VM_ENTRY_INTR_INFO);
+    unsigned long intr_info;
     struct vcpu *curr = current;
 
     int type = X86_EVENTTYPE_HW_EXCEPTION;
 
+    if ( nestedhvm_vcpu_in_guestmode(curr) )
+        intr_info = vcpu_2_nvmx(curr).intr.intr_info;
+    else
+        intr_info = __vmread(VM_ENTRY_INTR_INFO);
+
     switch ( trap )
     {
     case TRAP_debug:
@@ -1308,7 +1338,16 @@ void vmx_inject_hw_exception(int trap, i
             error_code = 0;
     }
 
-    __vmx_inject_exception(trap, type, error_code);
+    if ( nestedhvm_vcpu_in_guestmode(curr) &&
+         nvmx_intercepts_exception(curr, trap, error_code) )
+    {
+        nvmx_enqueue_n2_exceptions (curr, 
+            INTR_INFO_VALID_MASK | (type<<8) | trap,
+            error_code); 
+        return;
+    }
+    else
+        __vmx_inject_exception(trap, type, error_code);
 
     if ( trap == TRAP_page_fault )
         HVMTRACE_LONG_2D(PF_INJECT, error_code,
@@ -1319,12 +1358,38 @@ void vmx_inject_hw_exception(int trap, i
 
 void vmx_inject_extint(int trap)
 {
+    struct vcpu *v = current;
+    u32    pin_based_cntrl;
+
+    if ( nestedhvm_vcpu_in_guestmode(v) ) {
+        pin_based_cntrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, 
+                                     PIN_BASED_VM_EXEC_CONTROL);
+        if ( pin_based_cntrl && PIN_BASED_EXT_INTR_MASK ) {
+            nvmx_enqueue_n2_exceptions (v, 
+               INTR_INFO_VALID_MASK | (X86_EVENTTYPE_EXT_INTR<<8) | trap,
+               HVM_DELIVER_NO_ERROR_CODE);
+            return;
+        }
+    }
     __vmx_inject_exception(trap, X86_EVENTTYPE_EXT_INTR,
                            HVM_DELIVER_NO_ERROR_CODE);
 }
 
 void vmx_inject_nmi(void)
 {
+    struct vcpu *v = current;
+    u32    pin_based_cntrl;
+
+    if ( nestedhvm_vcpu_in_guestmode(v) ) {
+        pin_based_cntrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, 
+                                     PIN_BASED_VM_EXEC_CONTROL);
+        if ( pin_based_cntrl && PIN_BASED_NMI_EXITING ) {
+            nvmx_enqueue_n2_exceptions (v, 
+               INTR_INFO_VALID_MASK | (X86_EVENTTYPE_NMI<<8) | TRAP_nmi,
+               HVM_DELIVER_NO_ERROR_CODE);
+            return;
+        }
+    }
     __vmx_inject_exception(2, X86_EVENTTYPE_NMI,
                            HVM_DELIVER_NO_ERROR_CODE);
 }
@@ -1424,7 +1489,10 @@ static struct hvm_function_table __read_
     .nhvm_vcpu_reset      = nvmx_vcpu_reset,
     .nhvm_vcpu_guestcr3   = nvmx_vcpu_guestcr3,
     .nhvm_vcpu_hostcr3    = nvmx_vcpu_hostcr3,
-    .nhvm_vcpu_asid       = nvmx_vcpu_asid
+    .nhvm_vcpu_asid       = nvmx_vcpu_asid,
+    .nhvm_vmcx_guest_intercepts_trap = nvmx_intercepts_exception,
+    .nhvm_vcpu_vmexit_trap = nvmx_vmexit_exceptions,
+    .nhvm_intr_blocked    = nvmx_intr_blocked
 };
 
 struct hvm_function_table * __init start_vmx(void)
@@ -2237,7 +2305,8 @@ asmlinkage void vmx_vmexit_handler(struc
     hvm_maybe_deassert_evtchn_irq();
 
     idtv_info = __vmread(IDT_VECTORING_INFO);
-    if ( exit_reason != EXIT_REASON_TASK_SWITCH )
+    if ( !nestedhvm_vcpu_in_guestmode(v) && 
+         exit_reason != EXIT_REASON_TASK_SWITCH )
         vmx_idtv_reinject(idtv_info);
 
     switch ( exit_reason )
@@ -2585,6 +2654,9 @@ asmlinkage void vmx_vmexit_handler(struc
         domain_crash(v->domain);
         break;
     }
+
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+        nvmx_idtv_handling();
 }
 
 asmlinkage void vmx_vmenter_helper(void)
diff -r bd15acfc9b82 -r f14f451a780e xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -392,6 +392,27 @@ static void vmreturn(struct cpu_user_reg
     regs->eflags = eflags;
 }
 
+int nvmx_intercepts_exception(struct vcpu *v, unsigned int trap,
+                               int error_code)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    u32 exception_bitmap, pfec_match=0, pfec_mask=0;
+    int r;
+
+    ASSERT ( trap < 32 );
+
+    exception_bitmap = __get_vvmcs(nvcpu->nv_vvmcx, EXCEPTION_BITMAP);
+    r = exception_bitmap & (1 << trap) ? 1: 0;
+
+    if ( trap == TRAP_page_fault ) {
+        pfec_match = __get_vvmcs(nvcpu->nv_vvmcx, PAGE_FAULT_ERROR_CODE_MATCH);
+        pfec_mask  = __get_vvmcs(nvcpu->nv_vvmcx, PAGE_FAULT_ERROR_CODE_MASK);
+        if ( (error_code & pfec_mask) != pfec_match )
+            r = !r;
+    }
+    return r;
+}
+
 /*
  * Nested VMX uses "strict" condition to exit from 
  * L2 guest if either L1 VMM or L0 VMM expect to exit.
@@ -465,6 +486,7 @@ void nvmx_update_exec_control(struct vcp
         __vmwrite(IO_BITMAP_B, virt_to_maddr(bitmap) + PAGE_SIZE);
     }
 
+    /* TODO: change L0 intr window to MTF or NMI window */
     __vmwrite(CPU_BASED_VM_EXEC_CONTROL, shadow_cntrl);
 }
 
@@ -868,6 +890,42 @@ static void load_vvmcs_host_state(struct
     __set_vvmcs(vvmcs, VM_ENTRY_INTR_INFO, 0);
 }
 
+static void sync_exception_state(struct vcpu *v)
+{
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+
+    if ( !(nvmx->intr.intr_info & INTR_INFO_VALID_MASK) )
+        return;
+
+    switch ( nvmx->intr.intr_info & INTR_INFO_INTR_TYPE_MASK )
+    {
+    case X86_EVENTTYPE_EXT_INTR:
+        /* rename exit_reason to EXTERNAL_INTERRUPT */
+        __set_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_REASON,
+                    EXIT_REASON_EXTERNAL_INTERRUPT);
+        __set_vvmcs(nvcpu->nv_vvmcx, EXIT_QUALIFICATION, 0);
+        __set_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_INTR_INFO,
+                    nvmx->intr.intr_info);
+        break;
+
+    case X86_EVENTTYPE_HW_EXCEPTION:
+    case X86_EVENTTYPE_SW_INTERRUPT:
+    case X86_EVENTTYPE_SW_EXCEPTION:
+        /* throw to L1 */
+        __set_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_INTR_INFO,
+                    nvmx->intr.intr_info);
+        __set_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_INTR_ERROR_CODE,
+                    nvmx->intr.error_code);
+        break;
+    case X86_EVENTTYPE_NMI:
+    default:
+        gdprintk(XENLOG_ERR, "Exception state %lx not handled\n",
+               nvmx->intr.intr_info); 
+        break;
+    }
+}
+
 static void virtual_vmexit(struct cpu_user_regs *regs)
 {
     struct vcpu *v = current;
@@ -878,6 +936,7 @@ static void virtual_vmexit(struct cpu_us
 
     sync_vvmcs_ro(v);
     sync_vvmcs_guest_state(v, regs);
+    sync_exception_state(v);
 
     vmx_vmcs_switch(v, v->arch.hvm_vmx.vmcs, nvcpu->nv_n1vmcx);
 
@@ -1169,3 +1228,40 @@ int nvmx_handle_vmwrite(struct cpu_user_
     return X86EMUL_OKAY;
 }
 
+void nvmx_idtv_handling(void)
+{
+    struct vcpu *v = current;
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    unsigned int idtv_info = __vmread(IDT_VECTORING_INFO);
+
+    if ( likely(!(idtv_info & INTR_INFO_VALID_MASK)) )
+        return;
+
+    /*
+     * If L0 can solve the fault that causes idt vectoring, it should
+     * be reinjected, otherwise, pass to L1.
+     */
+    if ( (__vmread(VM_EXIT_REASON) != EXIT_REASON_EPT_VIOLATION &&
+          !(nvmx->intr.intr_info & INTR_INFO_VALID_MASK)) ||
+         (__vmread(VM_EXIT_REASON) == EXIT_REASON_EPT_VIOLATION &&
+          !nvcpu->nv_vmexit_pending) )
+    {
+        __vmwrite(VM_ENTRY_INTR_INFO, idtv_info & ~INTR_INFO_RESVD_BITS_MASK);
+        if ( idtv_info & INTR_INFO_DELIVER_CODE_MASK )
+           __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE,
+                        __vmread(IDT_VECTORING_ERROR_CODE));
+        /*
+         * SDM 23.2.4, if L1 tries to inject a software interrupt
+         * and the delivery fails, VM_EXIT_INSTRUCTION_LEN receives
+         * the value of previous VM_ENTRY_INSTRUCTION_LEN.
+         *
+         * This means EXIT_INSTRUCTION_LEN is always valid here, for
+         * software interrupts both injected by L1, and generated in L2.
+         */
+        __vmwrite(VM_ENTRY_INSTRUCTION_LEN, __vmread(VM_EXIT_INSTRUCTION_LEN));
+   }
+
+    /* TODO: NMI */
+}
+
diff -r bd15acfc9b82 -r f14f451a780e xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -93,6 +93,9 @@ int nvmx_vcpu_reset(struct vcpu *v);
 uint64_t nvmx_vcpu_guestcr3(struct vcpu *v);
 uint64_t nvmx_vcpu_hostcr3(struct vcpu *v);
 uint32_t nvmx_vcpu_asid(struct vcpu *v);
+enum hvm_intblk nvmx_intr_blocked(struct vcpu *v);
+int nvmx_intercepts_exception(struct vcpu *v, 
+                              unsigned int trap, int error_code);
 
 int nvmx_handle_vmxon(struct cpu_user_regs *regs);
 int nvmx_handle_vmxoff(struct cpu_user_regs *regs);
@@ -166,6 +169,7 @@ void nvmx_update_secondary_exec_control(
                                         unsigned long value);
 void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value);
 asmlinkage void nvmx_switch_guest(void);
+void nvmx_idtv_handling(void);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 17 of 20] VM exit handler of n2-guest
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (15 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 16 of 20] interrupt/exception handling for n2 guest Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 14:59   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 18 of 20] Lazy FPU for n2 guest Eddie Dong
                   ` (3 subsequent siblings)
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID 24d4d7d3e4c44c8dc61f464bca9aae57480dfe75
# Parent  f14f451a780e60e920c057e44fa1bc3ee40495a7
VM exit handler of n2-guest

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r f14f451a780e -r 24d4d7d3e4c4 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -943,6 +943,10 @@ static void vmx_set_segment_register(str
 static void vmx_set_tsc_offset(struct vcpu *v, u64 offset)
 {
     vmx_vmcs_enter(v);
+
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+        offset += nvmx_get_tsc_offset(v);
+
     __vmwrite(TSC_OFFSET, offset);
 #if defined (__i386__)
     __vmwrite(TSC_OFFSET_HIGH, offset >> 32);
@@ -2258,6 +2262,11 @@ asmlinkage void vmx_vmexit_handler(struc
      * any pending vmresume has really happened
      */
     vcpu_nestedhvm(v).nv_vmswitch_in_progress = 0;
+    if ( nestedhvm_vcpu_in_guestmode(v) )
+    {
+        if ( nvmx_n2_vmexit_handler(regs, exit_reason) )
+            goto out;
+    }
 
     if ( unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) )
         return vmx_failed_vmentry(exit_reason, regs);
@@ -2655,6 +2664,7 @@ asmlinkage void vmx_vmexit_handler(struc
         break;
     }
 
+out:
     if ( nestedhvm_vcpu_in_guestmode(v) )
         nvmx_idtv_handling();
 }
diff -r f14f451a780e -r 24d4d7d3e4c4 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -288,13 +288,19 @@ static int vmx_inst_check_privilege(stru
     if ( (regs->eflags & X86_EFLAGS_VM) ||
          (hvm_long_mode_enabled(v) && cs.attr.fields.l == 0) )
         goto invalid_op;
-    /* TODO: check vmx operation mode */
+    else if ( nestedhvm_vcpu_in_guestmode(v) )
+        goto vmexit;
 
     if ( (cs.sel & 3) > 0 )
         goto gp_fault;
 
     return X86EMUL_OKAY;
 
+vmexit:
+    gdprintk(XENLOG_ERR, "vmx_inst_check_privilege: vmexit\n");
+    vcpu_nestedhvm(v).nv_vmexit_pending = 1;
+    return X86EMUL_EXCEPTION;
+    
 invalid_op:
     gdprintk(XENLOG_ERR, "vmx_inst_check_privilege: invalid_op\n");
     hvm_inject_exception(TRAP_invalid_op, 0, 0);
@@ -606,6 +612,18 @@ static void nvmx_purge_vvmcs(struct vcpu
     }
 }
 
+u64 nvmx_get_tsc_offset(struct vcpu *v)
+{
+    u64 offset = 0;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+
+    if ( __get_vvmcs(nvcpu->nv_vvmcx, CPU_BASED_VM_EXEC_CONTROL) &
+         CPU_BASED_USE_TSC_OFFSETING )
+        offset = __get_vvmcs(nvcpu->nv_vvmcx, TSC_OFFSET);
+
+    return offset;
+}
+
 /*
  * Context synchronized between shadow and virtual VMCS.
  */
@@ -759,6 +777,8 @@ static void load_shadow_guest_state(stru
     hvm_set_cr4(__get_vvmcs(vvmcs, GUEST_CR4));
     hvm_set_cr3(__get_vvmcs(vvmcs, GUEST_CR3));
 
+    hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
+
     vvmcs_to_shadow(vvmcs, VM_ENTRY_INTR_INFO);
     vvmcs_to_shadow(vvmcs, VM_ENTRY_EXCEPTION_ERROR_CODE);
     vvmcs_to_shadow(vvmcs, VM_ENTRY_INSTRUCTION_LEN);
@@ -887,6 +907,8 @@ static void load_vvmcs_host_state(struct
     hvm_set_cr4(__get_vvmcs(vvmcs, HOST_CR4));
     hvm_set_cr3(__get_vvmcs(vvmcs, HOST_CR3));
 
+    hvm_funcs.set_tsc_offset(v, v->arch.hvm_vcpu.cache_tsc_offset);
+
     __set_vvmcs(vvmcs, VM_ENTRY_INTR_INFO, 0);
 }
 
@@ -1265,3 +1287,252 @@ void nvmx_idtv_handling(void)
     /* TODO: NMI */
 }
 
+/*
+ * L2 VMExit handling
+ *    return 1: Done or skip the normal layer 0 hypervisor process.
+ *              Typically it requires layer 1 hypervisor processing
+ *              or it may be already processed here.
+ *           0: Require the normal layer 0 process.
+ */
+int nvmx_n2_vmexit_handler(struct cpu_user_regs *regs,
+                               unsigned int exit_reason)
+{
+    struct vcpu *v = current;
+    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
+    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
+    u32 ctrl;
+    u16 port;
+    u8 *bitmap;
+
+    nvcpu->nv_vmexit_pending = 0;
+    nvmx->intr.intr_info = 0;
+    nvmx->intr.error_code = 0;
+
+    switch (exit_reason) {
+    case EXIT_REASON_EXCEPTION_NMI:
+    {
+        u32 intr_info = __vmread(VM_EXIT_INTR_INFO);
+        u32 valid_mask = (X86_EVENTTYPE_HW_EXCEPTION << 8) |
+                         INTR_INFO_VALID_MASK;
+        u64 exec_bitmap;
+        int vector = intr_info & INTR_INFO_VECTOR_MASK;
+
+        /*
+         * decided by L0 and L1 exception bitmap, if the vetor is set by
+         * both, L0 has priority on #PF, L1 has priority on others
+         */
+        if ( vector == TRAP_page_fault )
+        {
+            if ( paging_mode_hap(v->domain) )
+                nvcpu->nv_vmexit_pending = 1;
+        }
+        else if ( (intr_info & valid_mask) == valid_mask )
+        {
+            exec_bitmap =__get_vvmcs(nvcpu->nv_vvmcx, EXCEPTION_BITMAP);
+
+            if ( exec_bitmap & (1 << vector) )
+                nvcpu->nv_vmexit_pending = 1;
+        }
+        break;
+    }
+
+    case EXIT_REASON_WBINVD:
+    case EXIT_REASON_EPT_VIOLATION:
+    case EXIT_REASON_EPT_MISCONFIG:
+    case EXIT_REASON_EXTERNAL_INTERRUPT:
+        /* pass to L0 handler */
+        break;
+
+    case VMX_EXIT_REASONS_FAILED_VMENTRY:
+    case EXIT_REASON_TRIPLE_FAULT:
+    case EXIT_REASON_TASK_SWITCH:
+    case EXIT_REASON_CPUID:
+    case EXIT_REASON_MSR_READ:
+    case EXIT_REASON_MSR_WRITE:
+    case EXIT_REASON_VMCALL:
+    case EXIT_REASON_VMCLEAR:
+    case EXIT_REASON_VMLAUNCH:
+    case EXIT_REASON_VMPTRLD:
+    case EXIT_REASON_VMPTRST:
+    case EXIT_REASON_VMREAD:
+    case EXIT_REASON_VMRESUME:
+    case EXIT_REASON_VMWRITE:
+    case EXIT_REASON_VMXOFF:
+    case EXIT_REASON_VMXON:
+    case EXIT_REASON_INVEPT:
+        /* inject to L1 */
+        nvcpu->nv_vmexit_pending = 1;
+        break;
+    case EXIT_REASON_IO_INSTRUCTION:
+        ctrl = __n2_exec_control(v);
+        if ( ctrl & CPU_BASED_ACTIVATE_IO_BITMAP )
+        {
+            port = __vmread(EXIT_QUALIFICATION) >> 16;
+            bitmap = nvmx->iobitmap[port >> 15];
+            if ( bitmap[(port <<1) >> 4] & (1 << (port & 0x7)) )
+                nvcpu->nv_vmexit_pending = 1;
+        }
+        else if ( ctrl & CPU_BASED_UNCOND_IO_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+        break;
+
+    case EXIT_REASON_PENDING_VIRT_INTR:
+    {
+        ctrl = v->arch.hvm_vmx.exec_control;
+
+        /*
+         * if both open intr/nmi window, L0 has priority.
+         *
+         * Note that this is not strictly correct, in L2 context,
+         * L0's intr/nmi window flag should be replaced to MTF,
+         * causing an imediate VMExit, but MTF may not be available
+         * on all hardware.
+         */
+        if ( !(ctrl & CPU_BASED_VIRTUAL_INTR_PENDING) )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+    case EXIT_REASON_PENDING_VIRT_NMI:
+    {
+        ctrl = v->arch.hvm_vmx.exec_control;
+
+        if ( !(ctrl & CPU_BASED_VIRTUAL_NMI_PENDING) )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    /* L1 has priority handling several other types of exits */
+    case EXIT_REASON_HLT:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_HLT_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_RDTSC:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_RDTSC_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+        else
+        {
+            uint64_t tsc;
+
+            /*
+             * special handler is needed if L1 doesn't intercept rdtsc,
+             * avoiding changing guest_tsc and messing up timekeeping in L1
+             */
+            tsc = hvm_get_guest_tsc(v);
+            tsc += __get_vvmcs(nvcpu->nv_vvmcx, TSC_OFFSET);
+            regs->eax = (uint32_t)tsc;
+            regs->edx = (uint32_t)(tsc >> 32);
+
+            return 1;
+        }
+
+        break;
+    }
+
+    case EXIT_REASON_RDPMC:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_RDPMC_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_MWAIT_INSTRUCTION:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_MWAIT_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_PAUSE_INSTRUCTION:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_PAUSE_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_MONITOR_INSTRUCTION:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_MONITOR_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_DR_ACCESS:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_MOV_DR_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_INVLPG:
+    {
+        ctrl = __n2_exec_control(v);
+
+        if ( ctrl & CPU_BASED_INVLPG_EXITING )
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+
+    case EXIT_REASON_CR_ACCESS:
+    {
+        u64 exit_qualification = __vmread(EXIT_QUALIFICATION);
+        int cr = exit_qualification & 15;
+        int write = (exit_qualification >> 4) & 3;
+        u32 mask = 0;
+
+        /* also according to guest exec_control */
+        ctrl = __n2_exec_control(v);
+
+        if ( cr == 3 )
+        {
+            mask = write? CPU_BASED_CR3_STORE_EXITING:
+                          CPU_BASED_CR3_LOAD_EXITING;
+            if ( ctrl & mask )
+                nvcpu->nv_vmexit_pending = 1;
+        }
+        else if ( cr == 8 )
+        {
+            mask = write? CPU_BASED_CR8_STORE_EXITING:
+                          CPU_BASED_CR8_LOAD_EXITING;
+            if ( ctrl & mask )
+                nvcpu->nv_vmexit_pending = 1;
+        }
+        else  /* CR0, CR4, CLTS, LMSW */
+            nvcpu->nv_vmexit_pending = 1;
+
+        break;
+    }
+    default:
+        gdprintk(XENLOG_WARNING, "Unknown nested vmexit reason %x.\n",
+                 exit_reason);
+    }
+
+    return ( nvcpu->nv_vmexit_pending == 1 );
+}
+
diff -r f14f451a780e -r 24d4d7d3e4c4 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -170,6 +170,9 @@ void nvmx_update_secondary_exec_control(
 void nvmx_update_exception_bitmap(struct vcpu *v, unsigned long value);
 asmlinkage void nvmx_switch_guest(void);
 void nvmx_idtv_handling(void);
+u64 nvmx_get_tsc_offset(struct vcpu *v);
+int nvmx_n2_vmexit_handler(struct cpu_user_regs *regs,
+                          unsigned int exit_reason);
 
 #endif /* __ASM_X86_HVM_VVMX_H__ */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 18 of 20] Lazy FPU for n2 guest
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (16 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 17 of 20] VM exit handler of n2-guest Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02  8:57 ` [PATCH 19 of 20] Add VMXE bits in virtual CR4 Eddie Dong
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID 0cedbe9214c1632a0f1816d8b6d7442dc5f40065
# Parent  24d4d7d3e4c44c8dc61f464bca9aae57480dfe75
Lazy FPU for n2 guest

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 24d4d7d3e4c4 -r 0cedbe9214c1 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -842,6 +842,9 @@ static void virtual_vmentry(struct cpu_u
     regs->rsp = __get_vvmcs(vvmcs, GUEST_RSP);
     regs->rflags = __get_vvmcs(vvmcs, GUEST_RFLAGS);
 
+    /* updating host cr0 to sync TS bit */
+    __vmwrite(HOST_CR0, v->arch.hvm_vmx.host_cr0);
+
     /* TODO: EPT_POINTER */
 }
 
@@ -990,6 +993,9 @@ static void virtual_vmexit(struct cpu_us
     regs->rsp = __get_vvmcs(nvcpu->nv_vvmcx, HOST_RSP);
     regs->rflags = __vmread(GUEST_RFLAGS);
 
+    /* updating host cr0 to sync TS bit */
+    __vmwrite(HOST_CR0, v->arch.hvm_vmx.host_cr0);
+
     vmreturn(regs, VMSUCCEED);
 }
 
@@ -1319,13 +1325,18 @@ int nvmx_n2_vmexit_handler(struct cpu_us
 
         /*
          * decided by L0 and L1 exception bitmap, if the vetor is set by
-         * both, L0 has priority on #PF, L1 has priority on others
+         * both, L0 has priority on #PF and #NM, L1 has priority on others
          */
         if ( vector == TRAP_page_fault )
         {
             if ( paging_mode_hap(v->domain) )
                 nvcpu->nv_vmexit_pending = 1;
         }
+        else if ( vector == TRAP_no_device )
+        {
+            if ( v->fpu_dirtied )
+                nvcpu->nv_vmexit_pending = 1;
+        }
         else if ( (intr_info & valid_mask) == valid_mask )
         {
             exec_bitmap =__get_vvmcs(nvcpu->nv_vvmcx, EXCEPTION_BITMAP);

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 19 of 20] Add VMXE bits in virtual CR4
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (17 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 18 of 20] Lazy FPU for n2 guest Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 15:01   ` Tim Deegan
  2011-06-02  8:57 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
  2011-06-02 14:33 ` [PATCH 00 of 20] NestedVMX support Tim Deegan
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID c046b25135205ff58c0b729c0b94cd920cdbb7e2
# Parent  0cedbe9214c1632a0f1816d8b6d7442dc5f40065
Add VMXE bits in virtual CR4

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 0cedbe9214c1 -r c046b2513520 xen/include/asm-x86/cpufeature.h
--- a/xen/include/asm-x86/cpufeature.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/cpufeature.h	Thu Jun 02 16:33:21 2011 +0800
@@ -216,6 +216,8 @@
 
 #define cpu_has_svm		boot_cpu_has(X86_FEATURE_SVM)
 
+#define cpu_has_vmx		boot_cpu_has(X86_FEATURE_VMXE)
+
 #endif /* __ASM_I386_CPUFEATURE_H */
 
 /* 
diff -r 0cedbe9214c1 -r c046b2513520 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
@@ -313,6 +313,8 @@ static inline int hvm_do_pmu_interrupt(s
         X86_CR4_DE  | X86_CR4_PSE | X86_CR4_PAE |       \
         X86_CR4_MCE | X86_CR4_PGE | X86_CR4_PCE |       \
         X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT |           \
+	((nestedhvm_enabled((_v)->domain) &&            \
+          cpu_has_vmx) ? X86_CR4_VMXE : 0)  |       	\
         (xsave_enabled(_v) ? X86_CR4_OSXSAVE : 0))))
 
 /* These exceptions must always be intercepted. */

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (18 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 19 of 20] Add VMXE bits in virtual CR4 Eddie Dong
@ 2011-06-02  8:57 ` Eddie Dong
  2011-06-02 15:07   ` Tim Deegan
  2011-06-02 14:33 ` [PATCH 00 of 20] NestedVMX support Tim Deegan
  20 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-02  8:57 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307003601 -28800
# Node ID ee55fa0471a6b72569b567286ae264bc1dcdbb4b
# Parent  c046b25135205ff58c0b729c0b94cd920cdbb7e2
n2 MSR handling and capability exposure

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r c046b2513520 -r ee55fa0471a6 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -1778,8 +1778,11 @@ static int vmx_msr_read_intercept(unsign
         *msr_content |= (u64)__vmread(GUEST_IA32_DEBUGCTL_HIGH) << 32;
 #endif
         break;
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_read_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     case MSR_IA32_MISC_ENABLE:
         rdmsrl(MSR_IA32_MISC_ENABLE, *msr_content);
         /* Debug Trace Store is not supported. */
@@ -1940,8 +1943,11 @@ static int vmx_msr_write_intercept(unsig
 
         break;
     }
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_write_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     default:
         if ( vpmu_do_wrmsr(msr, msr_content) )
             return X86EMUL_OKAY;
diff -r c046b2513520 -r ee55fa0471a6 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:21 2011 +0800
@@ -1256,6 +1256,94 @@ int nvmx_handle_vmwrite(struct cpu_user_
     return X86EMUL_OKAY;
 }
 
+/*
+ * Capability reporting
+ */
+int nvmx_msr_read_intercept(unsigned int msr, u64 *msr_content)
+{
+    u32 eax, edx;
+    u64 data = 0;
+    int r = 1;
+    u32 mask = 0;
+
+    if ( !nestedhvm_enabled(current->domain) )
+        return 0;
+
+    switch (msr) {
+    case MSR_IA32_VMX_BASIC:
+        rdmsr(msr, eax, edx);
+        data = edx;
+        data = (data & ~0x1fff) | 0x1000;     /* request 4KB for guest VMCS */
+        data &= ~(1 << 23);                   /* disable TRUE_xxx_CTLS */
+        data = (data << 32) | VVMCS_REVISION; /* VVMCS revision */
+        break;
+    case MSR_IA32_VMX_PINBASED_CTLS:
+#define REMOVED_PIN_CONTROL_CAP (PIN_BASED_PREEMPT_TIMER)
+        rdmsr(msr, eax, edx);
+        data = edx;
+        data = (data << 32) | eax;
+        break;
+    case MSR_IA32_VMX_PROCBASED_CTLS:
+        rdmsr(msr, eax, edx);
+#define REMOVED_EXEC_CONTROL_CAP (CPU_BASED_TPR_SHADOW \
+            | CPU_BASED_ACTIVATE_MSR_BITMAP            \
+            | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
+        data = edx & ~REMOVED_EXEC_CONTROL_CAP;
+        data = (data << 32) | eax;
+        break;
+    case MSR_IA32_VMX_EXIT_CTLS:
+        rdmsr(msr, eax, edx);
+#define REMOVED_EXIT_CONTROL_CAP (VM_EXIT_SAVE_GUEST_PAT \
+            | VM_EXIT_LOAD_HOST_PAT                      \
+            | VM_EXIT_SAVE_GUEST_EFER                    \
+            | VM_EXIT_LOAD_HOST_EFER                     \
+            | VM_EXIT_SAVE_PREEMPT_TIMER)
+        data = edx & ~REMOVED_EXIT_CONTROL_CAP;
+        data = (data << 32) | eax;
+        break;
+    case MSR_IA32_VMX_ENTRY_CTLS:
+        rdmsr(msr, eax, edx);
+#define REMOVED_ENTRY_CONTROL_CAP (VM_ENTRY_LOAD_GUEST_PAT \
+            | VM_ENTRY_LOAD_GUEST_EFER)
+        data = edx & ~REMOVED_ENTRY_CONTROL_CAP;
+        data = (data << 32) | eax;
+        break;
+    case MSR_IA32_VMX_PROCBASED_CTLS2:
+        mask = 0;
+
+        rdmsr(msr, eax, edx);
+        data = edx & mask;
+        data = (data << 32) | eax;
+        break;
+
+    /* pass through MSRs */
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_MISC:
+    case MSR_IA32_VMX_CR0_FIXED0:
+    case MSR_IA32_VMX_CR0_FIXED1:
+    case MSR_IA32_VMX_CR4_FIXED0:
+    case MSR_IA32_VMX_CR4_FIXED1:
+    case MSR_IA32_VMX_VMCS_ENUM:
+        rdmsr(msr, eax, edx);
+        data = edx;
+        data = (data << 32) | eax;
+        break;
+
+    default:
+        r = 0;
+        break;
+    }
+
+    *msr_content = data;
+    return r;
+}
+
+int nvmx_msr_write_intercept(unsigned int msr, u64 msr_content)
+{
+    /* silently ignore for now */
+    return 1;
+}
+
 void nvmx_idtv_handling(void)
 {
     struct vcpu *v = current;
diff -r c046b2513520 -r ee55fa0471a6 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 02 16:33:21 2011 +0800
@@ -163,6 +163,10 @@ int nvmx_handle_vmread(struct cpu_user_r
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
 int nvmx_handle_vmresume(struct cpu_user_regs *regs);
 int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
+int nvmx_msr_read_intercept(unsigned int msr,
+                                u64 *msr_content);
+int nvmx_msr_write_intercept(unsigned int msr,
+                                 u64 msr_content);
 
 void nvmx_update_exec_control(struct vcpu *v, unsigned long value);
 void nvmx_update_secondary_exec_control(struct vcpu *v,

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 00 of 20] NestedVMX support
  2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
                   ` (19 preceding siblings ...)
  2011-06-02  8:57 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
@ 2011-06-02 14:33 ` Tim Deegan
  2011-06-03  5:47   ` Dong, Eddie
  20 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:33 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

Hi, 

Thanks for these patches.  They look pretty good; I have a few comments
on the individual patches that I'll post separately.

Overall the only worry I have is the number of TODOs left at the end of
the series.  Some of them are obvioulsy ony important when you come to
do the nested EPT work.  I'd appreciate a comment on whether you think
any of these is important:

+static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack
intack)
+{
+    u32 exit_ctrl;
+
+    /*
+     * TODO:
+     *   - if L1 intr-window exiting == 0
+     *   - vNMI
+     */


+static int decode_vmx_inst(struct cpu_user_regs *regs,
+                           struct vmx_inst_decoded *decode,
+                           unsigned long *poperandS, int vmxon_check)
+{
[...]
+        /* TODO: segment type check */

This one, at least, I think does need to be fixed!


+static void load_shadow_control(struct vcpu *v)
+{
+    /* TODO: Make sure the shadow control doesn't set the bits 
+     * L0 VMM doesn't handle.
+     */


+int nvmx_handle_vmlaunch(struct cpu_user_regs *regs)
+{
+    /* TODO: check for initial launch/resume */
+    return nvmx_handle_vmresume(regs);
+}


+void nvmx_idtv_handling(void)
+{
[...]
+    /* TODO: NMI */
+}


+static void load_shadow_guest_state(struct vcpu *v)
+{
[...]
+    /* XXX: should refer to GUEST_HOST_MASK of both L0 and L1 */


Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction
  2011-06-02  8:57 ` [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction Eddie Dong
@ 2011-06-02 14:36   ` Tim Deegan
  2011-06-03  5:54     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:36 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033838), Eddie Dong wrote:
> diff -r 4e094881883f -r c8812151acfd xen/arch/x86/hvm/vmx/Makefile
> --- a/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
> +++ b/xen/arch/x86/hvm/vmx/Makefile	Thu Jun 02 16:33:20 2011 +0800
> @@ -5,3 +5,4 @@ obj-y += vmcs.o
>  obj-y += vmx.o
>  obj-y += vpmu_core2.o
>  obj-y += vvmx.o
> +obj-y += vvmx.o

Harmless, but wrong. :)

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 07 of 20] Emulation of guest vmptrld
  2011-06-02  8:57 ` [PATCH 07 of 20] Emulation of guest vmptrld Eddie Dong
@ 2011-06-02 14:45   ` Tim Deegan
  2011-06-03  6:07     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:45 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033840), Eddie Dong wrote:
> diff -r 8264b01b476b -r 4dad232d7fc3 xen/arch/x86/hvm/vmx/vvmx.c
> --- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
> +++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 02 16:33:20 2011 +0800
> @@ -356,6 +356,41 @@ static void vmreturn(struct cpu_user_reg
>      regs->eflags = eflags;
>  }
>  
> +static void __map_io_bitmap(struct vcpu *v, u64 vmcs_reg)
> +{
> +    struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
> +    unsigned long gpa;
> +    unsigned long mfn;
> +    p2m_type_t p2mt;
> +
> +    if ( vmcs_reg == IO_BITMAP_A )
> +    {
> +        if (nvmx->iobitmap[0]) {
> +            unmap_domain_page_global(nvmx->iobitmap[0]);
> +        }
> +        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, IO_BITMAP_A);
> +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> +                              gpa >> PAGE_SHIFT, &p2mt));
> +        nvmx->iobitmap[0] = map_domain_page_global(mfn);

Why are these maps _global?  It might be OK to use 2 more global
mappings per VCPU but the reason should probably go in a comment beside
the call.

Also, I don't see where these mappings get torn down on domain
destruction. 

(While I'm looking at this code, this function is quite ugly.  Why have
a single function if you're going to duplicate its contents anyway?)

> +    }
> +    else if ( vmcs_reg == IO_BITMAP_B )
> +    {
> +        if (nvmx->iobitmap[1]) {
> +            unmap_domain_page_global(nvmx->iobitmap[1]);
> +        }
> +        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, IO_BITMAP_B);
> +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> +                               gpa >> PAGE_SHIFT, &p2mt));
> +        nvmx->iobitmap[1] = map_domain_page_global(mfn);
> +    }
> +}
> +
> +static inline void map_io_bitmap_all(struct vcpu *v)
> +{
> +   __map_io_bitmap (v, IO_BITMAP_A);
> +   __map_io_bitmap (v, IO_BITMAP_B);
> +}
> +
>  /*
>   * VMX instructions handling
>   */
> @@ -364,6 +399,7 @@ int nvmx_handle_vmxon(struct cpu_user_re
>  {
>      struct vcpu *v=current;
>      struct nestedvmx *nvmx = &vcpu_2_nvmx(v);
> +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
>      struct vmx_inst_decoded decode;
>      unsigned long gpa = 0;
>      int rc;
> @@ -372,7 +408,22 @@ int nvmx_handle_vmxon(struct cpu_user_re
>      if ( rc != X86EMUL_OKAY )
>          return rc;
>  
> +    if ( nvmx->vmxon_region_pa )
> +        gdprintk(XENLOG_WARNING, 
> +                 "vmxon again: orig %lx new %lx\n",
> +                 nvmx->vmxon_region_pa, gpa);
> +
>      nvmx->vmxon_region_pa = gpa;
> +
> +    /*
> +     * `fork' the host vmcs to shadow_vmcs
> +     * vmcs_lock is not needed since we are on current
> +     */
> +    nvcpu->nv_n1vmcx = v->arch.hvm_vmx.vmcs;
> +    __vmpclear(virt_to_maddr(v->arch.hvm_vmx.vmcs));
> +    memcpy(nvcpu->nv_n2vmcx, v->arch.hvm_vmx.vmcs, PAGE_SIZE);
> +    __vmptrld(virt_to_maddr(v->arch.hvm_vmx.vmcs));
> +    v->arch.hvm_vmx.launched = 0;
>      vmreturn(regs, VMSUCCEED);
>  
>      return X86EMUL_OKAY;
> @@ -394,3 +445,38 @@ int nvmx_handle_vmxoff(struct cpu_user_r
>      return X86EMUL_OKAY;
>  }
>  
> +int nvmx_handle_vmptrld(struct cpu_user_regs *regs)
> +{
> +    struct vcpu *v = current;
> +    struct vmx_inst_decoded decode;
> +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
> +    unsigned long gpa = 0;
> +    unsigned long mfn;
> +    p2m_type_t p2mt;
> +    int rc;
> +
> +    rc = decode_vmx_inst(regs, &decode, &gpa, 0);
> +    if ( rc != X86EMUL_OKAY )
> +        return rc;
> +
> +    if ( gpa == vcpu_2_nvmx(v).vmxon_region_pa || gpa & 0xfff )
> +    {
> +        vmreturn(regs, VMFAIL_INVALID);
> +        goto out;
> +    }
> +
> +    if ( nvcpu->nv_vvmcxaddr == VMCX_EADDR )
> +    {
> +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> +                               gpa >> PAGE_SHIFT, &p2mt));
> +        nvcpu->nv_vvmcx = map_domain_page_global(mfn);

Again, why _global?

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS
  2011-06-02  8:57 ` [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS Eddie Dong
@ 2011-06-02 14:50   ` Tim Deegan
  2011-06-03  7:30     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:50 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033845), Eddie Dong wrote:
> diff -r 4631a9511200 -r 62cc6c7516e0 xen/arch/x86/hvm/vmx/vmcs.c
> --- a/xen/arch/x86/hvm/vmx/vmcs.c	Thu Jun 02 16:33:20 2011 +0800
> +++ b/xen/arch/x86/hvm/vmx/vmcs.c	Thu Jun 02 16:33:21 2011 +0800
> @@ -669,6 +669,38 @@ void vmx_disable_intercept_for_msr(struc
>      }
>  }
>  
> +/*
> + * Switch VMCS between layer 1 & 2 guest
> + */
> +void vmx_vmcs_switch(struct vcpu *v,
> +                             struct vmcs_struct *from,
> +                             struct vmcs_struct *to)
> +{
> +    /* no foreign access */
> +    if ( unlikely(v != current) )
> +        return;
> +
> +    if ( unlikely(current->arch.hvm_vmx.vmcs != from) )
> +        return;

Do you really want this function to fail silently if called with v !=
current?  Use ASSERT(), or, even better, remove the first argument
entirely.

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests
  2011-06-02  8:57 ` [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests Eddie Dong
@ 2011-06-02 14:56   ` Tim Deegan
  2011-06-03  7:57     ` Dong, Eddie
  2011-06-02 14:58   ` Tim Deegan
  1 sibling, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:56 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033848), Eddie Dong wrote:
> +static void nvmx_update_exit_control(struct vcpu *v,
> +					unsigned long host_cntrl)
> +{
> +    u32 shadow_cntrl;
> +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
> +
> +#define REMOVED_EXIT_CONTROL_BITS    ((1<<2) |           \

Define a macro for whatever 1<<2 means here, please. 

> +                (VM_EXIT_SAVE_GUEST_PAT) |               \
> +                (VM_EXIT_SAVE_GUEST_EFER) |              \
> +                (VM_EXIT_SAVE_PREEMPT_TIMER))
> +    shadow_cntrl = __get_vvmcs(nvcpu->nv_vvmcx, VM_EXIT_CONTROLS);
> +    shadow_cntrl &= ~REMOVED_EXIT_CONTROL_BITS;
> +    shadow_cntrl |= host_cntrl;
> +    __vmwrite(VM_EXIT_CONTROLS, shadow_cntrl);
> +}
[...]
> +static void sync_vvmcs_guest_state(struct vcpu *v, struct cpu_user_regs *regs)
> +{
> +    int i;
> +    unsigned long mask;
> +    unsigned long cr;
> +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
> +    void *vvmcs = nvcpu->nv_vvmcx;
> +
> +    /* copy shadow vmcs.gstate back to vvmcs.gstate */
> +    for ( i = 0; i < ARRAY_SIZE(vmcs_gstate_field); i++ )
> +        shadow_to_vvmcs(vvmcs, vmcs_gstate_field[i]);
> +    /* RIP, RSP are in user regs */
> +    __set_vvmcs(vvmcs, GUEST_RIP, regs->rip);
> +    __set_vvmcs(vvmcs, GUEST_RSP, regs->rsp);
> +
> +    /* SDM 20.6.6: L2 guest execution may change GUEST CR0/CR4 */
> +    mask = __get_vvmcs(vvmcs, CR0_GUEST_HOST_MASK);
> +    if ( ~mask )
> +    {
> +        cr = __get_vvmcs(vvmcs, GUEST_CR0);
> +        cr = (cr & mask) | (__vmread(GUEST_CR4) & ~mask);

Cut-n-paste error?                      ^^^^^^^^^

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests
  2011-06-02  8:57 ` [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests Eddie Dong
  2011-06-02 14:56   ` Tim Deegan
@ 2011-06-02 14:58   ` Tim Deegan
  1 sibling, 0 replies; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:58 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

Hi,

> +asmlinkage void nvmx_switch_guest(void)
> +{
> +    struct vcpu *v = current;
> +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
> +    struct cpu_user_regs *regs = guest_cpu_user_regs();
> +
> +    /*
> +     * a softirq may interrupt us between a virtual vmentry is
> +     * just handled and the true vmentry. If during this window,
> +     * a L1 virtual interrupt causes another virtual vmexit, we
> +     * cannot let that happen or VM_ENTRY_INTR_INFO will be lost.
> +     */
> +    if ( unlikely(nvcpu->nv_vmswitch_in_progress) )
> +        return;
> +
> +    if ( nestedhvm_vcpu_in_guestmode(v) && nvcpu->nv_vmexit_pending )
> +    {
> +        local_irq_enable();

Why?  Is this function every called with interrupts disabled?  And if
so, will its caller deal with having them enabled when it exits?

> +        virtual_vmexit(regs);
> +    }
> +    else if ( !nestedhvm_vcpu_in_guestmode(v) && nvcpu->nv_vmentry_pending )
> +    {
> +        local_irq_enable();

ditto.

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 17 of 20] VM exit handler of n2-guest
  2011-06-02  8:57 ` [PATCH 17 of 20] VM exit handler of n2-guest Eddie Dong
@ 2011-06-02 14:59   ` Tim Deegan
  2011-06-03  8:06     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 14:59 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033850), Eddie Dong wrote:
> +    case EXIT_REASON_WBINVD:
> +    case EXIT_REASON_EPT_VIOLATION:
> +    case EXIT_REASON_EPT_MISCONFIG:
> +    case EXIT_REASON_EXTERNAL_INTERRUPT:
> +        /* pass to L0 handler */
> +        break;

If the L1 guest asked to intercept WBINVD, will it ever get the VMEXIT?
I didn't see any code in the L0 WBINVD handler to pass it on.

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 19 of 20] Add VMXE bits in virtual CR4
  2011-06-02  8:57 ` [PATCH 19 of 20] Add VMXE bits in virtual CR4 Eddie Dong
@ 2011-06-02 15:01   ` Tim Deegan
  2011-06-03  8:12     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 15:01 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033852), Eddie Dong wrote:
> diff -r 0cedbe9214c1 -r c046b2513520 xen/include/asm-x86/hvm/hvm.h
> --- a/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
> +++ b/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
> @@ -313,6 +313,8 @@ static inline int hvm_do_pmu_interrupt(s
>          X86_CR4_DE  | X86_CR4_PSE | X86_CR4_PAE |       \
>          X86_CR4_MCE | X86_CR4_PGE | X86_CR4_PCE |       \
>          X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT |           \
> +	((nestedhvm_enabled((_v)->domain) &&            \
> +          cpu_has_vmx) ? X86_CR4_VMXE : 0)  |       	\

Should we also add VMXE to this mask even if !nestedhvm_enabled()?

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02  8:57 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
@ 2011-06-02 15:07   ` Tim Deegan
  2011-06-02 15:11     ` Tim Deegan
  2011-06-03  8:25     ` Dong, Eddie
  0 siblings, 2 replies; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 15:07 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:57 +0800 on 02 Jun (1307033853), Eddie Dong wrote:
> +    case MSR_IA32_VMX_PINBASED_CTLS:
> +#define REMOVED_PIN_CONTROL_CAP (PIN_BASED_PREEMPT_TIMER)
> +        rdmsr(msr, eax, edx);
> +        data = edx;
> +        data = (data << 32) | eax;
> +        break;

You don't actually mask the value here. 

BTW, I don't really like defining all these REMOVED_* macros, each
of which is used only once a few lines from the definition (here and
elsewhere in the series).  It just adds clutter for no benefit.

Tim.

> +    case MSR_IA32_VMX_PROCBASED_CTLS:
> +        rdmsr(msr, eax, edx);
> +#define REMOVED_EXEC_CONTROL_CAP (CPU_BASED_TPR_SHADOW \
> +            | CPU_BASED_ACTIVATE_MSR_BITMAP            \
> +            | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
> +        data = edx & ~REMOVED_EXEC_CONTROL_CAP;
> +        data = (data << 32) | eax;
> +        break;
> +    case MSR_IA32_VMX_EXIT_CTLS:
> +        rdmsr(msr, eax, edx);
> +#define REMOVED_EXIT_CONTROL_CAP (VM_EXIT_SAVE_GUEST_PAT \
> +            | VM_EXIT_LOAD_HOST_PAT                      \
> +            | VM_EXIT_SAVE_GUEST_EFER                    \
> +            | VM_EXIT_LOAD_HOST_EFER                     \
> +            | VM_EXIT_SAVE_PREEMPT_TIMER)
> +        data = edx & ~REMOVED_EXIT_CONTROL_CAP;
> +        data = (data << 32) | eax;
> +        break;
> +    case MSR_IA32_VMX_ENTRY_CTLS:
> +        rdmsr(msr, eax, edx);
> +#define REMOVED_ENTRY_CONTROL_CAP (VM_ENTRY_LOAD_GUEST_PAT \
> +            | VM_ENTRY_LOAD_GUEST_EFER)
> +        data = edx & ~REMOVED_ENTRY_CONTROL_CAP;
> +        data = (data << 32) | eax;
> +        break;
> +    case MSR_IA32_VMX_PROCBASED_CTLS2:
> +        mask = 0;
> +
> +        rdmsr(msr, eax, edx);
> +        data = edx & mask;
> +        data = (data << 32) | eax;
> +        break;
> +

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02 15:07   ` Tim Deegan
@ 2011-06-02 15:11     ` Tim Deegan
  2011-06-02 19:20       ` Keir Fraser
  2011-06-03  8:39       ` Dong, Eddie
  2011-06-03  8:25     ` Dong, Eddie
  1 sibling, 2 replies; 74+ messages in thread
From: Tim Deegan @ 2011-06-02 15:11 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:07 +0100 on 02 Jun (1307030872), Tim Deegan wrote:
> At 16:57 +0800 on 02 Jun (1307033853), Eddie Dong wrote:
> > +    case MSR_IA32_VMX_PINBASED_CTLS:
> > +#define REMOVED_PIN_CONTROL_CAP (PIN_BASED_PREEMPT_TIMER)
> > +        rdmsr(msr, eax, edx);
> > +        data = edx;
> > +        data = (data << 32) | eax;
> > +        break;
> 
> You don't actually mask the value here. 
> 
> BTW, I don't really like defining all these REMOVED_* macros, each
> of which is used only once a few lines from the definition (here and
> elsewhere in the series).  It just adds clutter for no benefit.
> 

Oh, I forgot to say: will this feature-blacklisting work over live
migration to a machine with a different CPU?  There isn't an equivalnet
of the CPUID masking feature to make all the machines in a cluster seem
to have the same VMX features. 

Elsewhere we use whitelisting for passsing hardware capability flags to
HVM guests; I think we should use whitelists here too. 

Cheers,

Tim.

 
> > +    case MSR_IA32_VMX_PROCBASED_CTLS:
> > +        rdmsr(msr, eax, edx);
> > +#define REMOVED_EXEC_CONTROL_CAP (CPU_BASED_TPR_SHADOW \
> > +            | CPU_BASED_ACTIVATE_MSR_BITMAP            \
> > +            | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
> > +        data = edx & ~REMOVED_EXEC_CONTROL_CAP;
> > +        data = (data << 32) | eax;
> > +        break;
> > +    case MSR_IA32_VMX_EXIT_CTLS:
> > +        rdmsr(msr, eax, edx);
> > +#define REMOVED_EXIT_CONTROL_CAP (VM_EXIT_SAVE_GUEST_PAT \
> > +            | VM_EXIT_LOAD_HOST_PAT                      \
> > +            | VM_EXIT_SAVE_GUEST_EFER                    \
> > +            | VM_EXIT_LOAD_HOST_EFER                     \
> > +            | VM_EXIT_SAVE_PREEMPT_TIMER)
> > +        data = edx & ~REMOVED_EXIT_CONTROL_CAP;
> > +        data = (data << 32) | eax;
> > +        break;
> > +    case MSR_IA32_VMX_ENTRY_CTLS:
> > +        rdmsr(msr, eax, edx);
> > +#define REMOVED_ENTRY_CONTROL_CAP (VM_ENTRY_LOAD_GUEST_PAT \
> > +            | VM_ENTRY_LOAD_GUEST_EFER)
> > +        data = edx & ~REMOVED_ENTRY_CONTROL_CAP;
> > +        data = (data << 32) | eax;
> > +        break;
> > +    case MSR_IA32_VMX_PROCBASED_CTLS2:
> > +        mask = 0;
> > +
> > +        rdmsr(msr, eax, edx);
> > +        data = edx & mask;
> > +        data = (data << 32) | eax;
> > +        break;
> > +
> 

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02 15:11     ` Tim Deegan
@ 2011-06-02 19:20       ` Keir Fraser
  2011-06-03  8:39       ` Dong, Eddie
  1 sibling, 0 replies; 74+ messages in thread
From: Keir Fraser @ 2011-06-02 19:20 UTC (permalink / raw)
  To: Tim Deegan, Eddie Dong; +Cc: xen-devel

On 02/06/2011 16:11, "Tim Deegan" <Tim.Deegan@citrix.com> wrote:

>> BTW, I don't really like defining all these REMOVED_* macros, each
>> of which is used only once a few lines from the definition (here and
>> elsewhere in the series).  It just adds clutter for no benefit.
>> 
> 
> Oh, I forgot to say: will this feature-blacklisting work over live
> migration to a machine with a different CPU?  There isn't an equivalnet
> of the CPUID masking feature to make all the machines in a cluster seem
> to have the same VMX features.
> 
> Elsewhere we use whitelisting for passsing hardware capability flags to
> HVM guests; I think we should use whitelists here too.

Blacklists create a total mess of doom. We should absolutely disallow the
creation of any new ones. I think HVM guests are currently clean in this
regard and should stay that way.

 -- Keir

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 00 of 20] NestedVMX support
  2011-06-02 14:33 ` [PATCH 00 of 20] NestedVMX support Tim Deegan
@ 2011-06-03  5:47   ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  5:47 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie



> -----Original Message-----
> From: Tim Deegan [mailto:Tim.Deegan@citrix.com]
> Sent: Thursday, June 02, 2011 10:34 PM
> To: Dong, Eddie
> Cc: xen-devel@lists.xensource.com
> Subject: Re: [Xen-devel] [PATCH 00 of 20] NestedVMX support> 
> Hi,
> 
> Thanks for these patches.  They look pretty good; I have a few comments
> on the individual patches that I'll post separately.
> 
> Overall the only worry I have is the number of TODOs left at the end of
> the series.  Some of them are obvioulsy ony important when you come to
> do the nested EPT work.  I'd appreciate a comment on whether you think
> any of these is important:
> 
> +static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack
> intack)
> +{
> +    u32 exit_ctrl;
> +
> +    /*
> +     * TODO:
> +     *   - if L1 intr-window exiting == 0
> +     *   - vNMI
> +     */
> 

Deleted.

> 
> +static int decode_vmx_inst(struct cpu_user_regs *regs,
> +                           struct vmx_inst_decoded *decode,
> +                           unsigned long *poperandS, int
> vmxon_check)
> +{
> [...]
> +        /* TODO: segment type check */
> 

Fixed.

> This one, at least, I think does need to be fixed!
> 
> 
> +static void load_shadow_control(struct vcpu *v)
> +{
> +    /* TODO: Make sure the shadow control doesn't set the bits
> +     * L0 VMM doesn't handle.
> +     */
> 
deleted
> 
> +int nvmx_handle_vmlaunch(struct cpu_user_regs *regs)
> +{
> +    /* TODO: check for initial launch/resume */
> +    return nvmx_handle_vmresume(regs);
> +}
> 

Handled w/ correct launch state.
> 
> +void nvmx_idtv_handling(void)
> +{
> [...]
> +    /* TODO: NMI */
> +}
> 
deleted
> 
> +static void load_shadow_guest_state(struct vcpu *v)
> +{
> [...]
> +    /* XXX: should refer to GUEST_HOST_MASK of both L0 and L1 */
> 
Deleted and will revisit later.

> 
> Cheers,
> 
> Tim.
> 
> --
> Tim Deegan <Tim.Deegan@citrix.com>
> Principal Software Engineer, Xen Platform Team
> Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction
  2011-06-02 14:36   ` Tim Deegan
@ 2011-06-03  5:54     ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  5:54 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> >  obj-y += vpmu_core2.o
> >  obj-y += vvmx.o
> > +obj-y += vvmx.o
> 
> Harmless, but wrong. :)
> 

Thanks, a patch merge introduced error :)
Fixed.
Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 07 of 20] Emulation of guest vmptrld
  2011-06-02 14:45   ` Tim Deegan
@ 2011-06-03  6:07     ` Dong, Eddie
  2011-06-03  8:42       ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  6:07 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> > +    if ( vmcs_reg == IO_BITMAP_A )
> > +    {
> > +        if (nvmx->iobitmap[0]) {
> > +            unmap_domain_page_global(nvmx->iobitmap[0]);
> > +        }
> > +        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
> IO_BITMAP_A);
> > +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> > +                              gpa >> PAGE_SHIFT, &p2mt));
> > +        nvmx->iobitmap[0] = map_domain_page_global(mfn);
> 
> Why are these maps _global?  It might be OK to use 2 more global
> mappings per VCPU but the reason should probably go in a comment beside
> the call.

Do you mean to use hvm_map_guest_frame_ro? Fine to me.
> 
> Also, I don't see where these mappings get torn down on domain
> destruction.
> 
Yes. Fixed in nvmx_vcpu_destroy.

> (While I'm looking at this code, this function is quite ugly.  Why have
> a single function if you're going to duplicate its contents anyway?)

??? We don't know fi guest changed the bitmap, so we have to check each time.

> 
> +
> > +    if ( nvcpu->nv_vvmcxaddr == VMCX_EADDR )
> > +    {
> > +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> > +                               gpa >> PAGE_SHIFT, &p2mt));
> > +        nvcpu->nv_vvmcx = map_domain_page_global(mfn);
> 
> Again, why _global?

Will fix with hvm_map_guest_frame.

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS
  2011-06-02 14:50   ` Tim Deegan
@ 2011-06-03  7:30     ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  7:30 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> > +    /* no foreign access */
> > +    if ( unlikely(v != current) )
> > +        return;
> > +
> > +    if ( unlikely(current->arch.hvm_vmx.vmcs != from) )
> > +        return;
> 
> Do you really want this function to fail silently if called with v !=
> current?  Use ASSERT(), or, even better, remove the first argument
> entirely.
> 
Deleted.

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests
  2011-06-02 14:56   ` Tim Deegan
@ 2011-06-03  7:57     ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  7:57 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie


> > +    u32 shadow_cntrl;
> > +    struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
> > +
> > +#define REMOVED_EXIT_CONTROL_BITS    ((1<<2) |           \
> 
> Define a macro for whatever 1<<2 means here, please.
> 

Done.

> > +                (VM_EXIT_SAVE_GUEST_PAT) |               \
> > +                (VM_EXIT_SAVE_GUEST_EFER) |              \
> > +                (VM_EXIT_SAVE_PREEMPT_TIMER))
> > +    shadow_cntrl = __get_vvmcs(nvcpu->nv_vvmcx,
> VM_EXIT_CONTROLS);
> > +    shadow_cntrl &= ~REMOVED_EXIT_CONTROL_BITS;
> > +    shadow_cntrl |= host_cntrl;
> > +    __vmwrite(VM_EXIT_CONTROLS, shadow_cntrl);
> > +}



> > +    /* SDM 20.6.6: L2 guest execution may change GUEST CR0/CR4 */
> > +    mask = __get_vvmcs(vvmcs, CR0_GUEST_HOST_MASK);
> > +    if ( ~mask )
> > +    {
> > +        cr = __get_vvmcs(vvmcs, GUEST_CR0);
> > +        cr = (cr & mask) | (__vmread(GUEST_CR4) & ~mask);
> 
> Cut-n-paste error?                      ^^^^^^^^^
> 
Oh, Yes, Thanks.
Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 17 of 20] VM exit handler of n2-guest
  2011-06-02 14:59   ` Tim Deegan
@ 2011-06-03  8:06     ` Dong, Eddie
  2011-06-03  8:43       ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  8:06 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> At 16:57 +0800 on 02 Jun (1307033850), Eddie Dong wrote:
> > +    case EXIT_REASON_WBINVD:
> > +    case EXIT_REASON_EPT_VIOLATION:
> > +    case EXIT_REASON_EPT_MISCONFIG:
> > +    case EXIT_REASON_EXTERNAL_INTERRUPT:
> > +        /* pass to L0 handler */
> > +        break;
> 
> If the L1 guest asked to intercept WBINVD, will it ever get the VMEXIT?
> I didn't see any code in the L0 WBINVD handler to pass it on.
> 
Current patch doesn't expose Secondary Processor-Based VM-Execution Controls. So WBINVD exiting capability is removed in L1 guest.

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 19 of 20] Add VMXE bits in virtual CR4
  2011-06-02 15:01   ` Tim Deegan
@ 2011-06-03  8:12     ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  8:12 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> > diff -r 0cedbe9214c1 -r c046b2513520 xen/include/asm-x86/hvm/hvm.h
> > --- a/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
> > +++ b/xen/include/asm-x86/hvm/hvm.h	Thu Jun 02 16:33:21 2011 +0800
> > @@ -313,6 +313,8 @@ static inline int hvm_do_pmu_interrupt(s
> >          X86_CR4_DE  | X86_CR4_PSE | X86_CR4_PAE |       \
> >          X86_CR4_MCE | X86_CR4_PGE | X86_CR4_PCE |       \
> >          X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT |           \
> > +	((nestedhvm_enabled((_v)->domain) &&            \
> > +          cpu_has_vmx) ? X86_CR4_VMXE : 0)  |       	\
> 
> Should we also add VMXE to this mask even if !nestedhvm_enabled()?
> 
Fine.
Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02 15:07   ` Tim Deegan
  2011-06-02 15:11     ` Tim Deegan
@ 2011-06-03  8:25     ` Dong, Eddie
  1 sibling, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  8:25 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> 
> At 16:57 +0800 on 02 Jun (1307033853), Eddie Dong wrote:
> > +    case MSR_IA32_VMX_PINBASED_CTLS:
> > +#define REMOVED_PIN_CONTROL_CAP (PIN_BASED_PREEMPT_TIMER)
> > +        rdmsr(msr, eax, edx);
> > +        data = edx;
> > +        data = (data << 32) | eax;
> > +        break;
> 
> You don't actually mask the value here.

Fixed. 

> 
> BTW, I don't really like defining all these REMOVED_* macros, each
> of which is used only once a few lines from the definition (here and
> elsewhere in the series).  It just adds clutter for no benefit.

OK, removed to be in code itself.

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-02 15:11     ` Tim Deegan
  2011-06-02 19:20       ` Keir Fraser
@ 2011-06-03  8:39       ` Dong, Eddie
  1 sibling, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-03  8:39 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> 
> Oh, I forgot to say: will this feature-blacklisting work over live
> migration to a machine with a different CPU?  There isn't an equivalnet
> of the CPUID masking feature to make all the machines in a cluster seem
> to have the same VMX features.

That seems to be an issue neutral to nested virtualization. We should be able to migrate among same processors. But it is difficult to migrate a L2 guest to other machine as L1 guest. It may be OK evnetually, but not addressed right now.

My understanding is that same CPUID doesn't mean exactly same capability. 

> 
> Elsewhere we use whitelisting for passsing hardware capability flags to
> HVM guests; I think we should use whitelists here too.
> 

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 07 of 20] Emulation of guest vmptrld
  2011-06-03  6:07     ` Dong, Eddie
@ 2011-06-03  8:42       ` Tim Deegan
  2011-06-07  1:48         ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-03  8:42 UTC (permalink / raw)
  To: Dong, Eddie; +Cc: xen-devel

At 14:07 +0800 on 03 Jun (1307110060), Dong, Eddie wrote:
> > > +    if ( vmcs_reg == IO_BITMAP_A )
> > > +    {
> > > +        if (nvmx->iobitmap[0]) {
> > > +            unmap_domain_page_global(nvmx->iobitmap[0]);
> > > +        }
> > > +        gpa = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
> > IO_BITMAP_A);
> > > +        mfn = mfn_x(gfn_to_mfn(p2m_get_hostp2m(v->domain),
> > > +                              gpa >> PAGE_SHIFT, &p2mt));
> > > +        nvmx->iobitmap[0] = map_domain_page_global(mfn);
> > 
> > Why are these maps _global?  It might be OK to use 2 more global
> > mappings per VCPU but the reason should probably go in a comment beside
> > the call.
> 
> Do you mean to use hvm_map_guest_frame_ro? Fine to me.

Yes, I think that would be better unless you know there's a point where
the bitmaps are accessed on a vcpu other than current.  (On 64-bit it
makes no difference but on 32-bit map_domain_page_global() uses up a
global shared resource).

> > 
> > Also, I don't see where these mappings get torn down on domain
> > destruction.
> > 
> Yes. Fixed in nvmx_vcpu_destroy.
> 
> > (While I'm looking at this code, this function is quite ugly.  Why have
> > a single function if you're going to duplicate its contents anyway?)
> 
> ??? We don't know fi guest changed the bitmap, so we have to check each time.

I think I wasn't clear.  The logic is fine, I was just cavilling about
coding style.  You have some code that's basically

f1() { BUNCH_O_CODE(1) }

f2() { BUNCH_O_CODE(2) }

and places that need to call f1(), f2() or both.  Merging those into a
single function is a good idea, but the function should look like

f(x) { 
  int i = (x ? 1 : 2)
  BUNCH_O_CODE(i)
}

and what you have is

f(x) {
  if (x) 
     BUNCH_O_CODE(1)
  else
     BUNCH_O_CODE(2)
}

which keeps the duplication. 

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 17 of 20] VM exit handler of n2-guest
  2011-06-03  8:06     ` Dong, Eddie
@ 2011-06-03  8:43       ` Tim Deegan
  0 siblings, 0 replies; 74+ messages in thread
From: Tim Deegan @ 2011-06-03  8:43 UTC (permalink / raw)
  To: Dong, Eddie; +Cc: xen-devel

At 16:06 +0800 on 03 Jun (1307117213), Dong, Eddie wrote:
> > At 16:57 +0800 on 02 Jun (1307033850), Eddie Dong wrote:
> > > +    case EXIT_REASON_WBINVD:
> > > +    case EXIT_REASON_EPT_VIOLATION:
> > > +    case EXIT_REASON_EPT_MISCONFIG:
> > > +    case EXIT_REASON_EXTERNAL_INTERRUPT:
> > > +        /* pass to L0 handler */
> > > +        break;
> > 
> > If the L1 guest asked to intercept WBINVD, will it ever get the VMEXIT?
> > I didn't see any code in the L0 WBINVD handler to pass it on.
> > 

> Current patch doesn't expose Secondary Processor-Based VM-Execution
> Controls. So WBINVD exiting capability is removed in L1 guest.

Ah, OK, thanks. 

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 07 of 20] Emulation of guest vmptrld
  2011-06-03  8:42       ` Tim Deegan
@ 2011-06-07  1:48         ` Dong, Eddie
  0 siblings, 0 replies; 74+ messages in thread
From: Dong, Eddie @ 2011-06-07  1:48 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

> > > (While I'm looking at this code, this function is quite ugly.  Why have
> > > a single function if you're going to duplicate its contents anyway?)
> >
> > ??? We don't know fi guest changed the bitmap, so we have to check each
> time.
> 
> I think I wasn't clear.  The logic is fine, I was just cavilling about
> coding style.  You have some code that's basically
> 
I see, yes it is better and fixed.

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 16:00                                                     ` Jeroen Groenewegen van der Weyden
@ 2011-07-26 16:08                                                       ` Tim Deegan
  0 siblings, 0 replies; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 16:08 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Hi, 

At 18:00 +0200 on 26 Jul (1311703215), Jeroen Groenewegen van der Weyden wrote:
> Thank you for cooperation. If you need any further testing done with
> this nestedhvm just let me know. I can image you want some
> performance testing and improvments are necessary.

Yes, the performance is proabbly pretty poor right now.  I believe Eddie
has plans for a nested-EPT patch series, which should make a big
difference.

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 15:48                                                   ` Tim Deegan
@ 2011-07-26 16:00                                                     ` Jeroen Groenewegen van der Weyden
  2011-07-26 16:08                                                       ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26 16:00 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Tim, just to be complete, I tested them against cs23728. the lastest 
change set cs23749 fails to boot at my system, it hangs at the hpet.

Thank you for cooperation. If you need any further testing done with 
this nestedhvm just let me know. I can image you want some performance 
testing and improvments are necessary.

mvg,
Jeroen

Op 26-7-2011 17:48, Tim Deegan schreef:
> At 17:25 +0200 on 26 Jul (1311701111), Jeroen Groenewegen van der Weyden wrote:
>> Tim! everyhting seems to work now. domu is working ok, all 4 nested
>> kvm guests are running.
> Excellent.  Thank you for the testing.  I'll check those changes in.
>
>> only dmesg seems te complain about something
>> (XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 000000018c829000
> That's OK; those are benign and I'll remove them.
>
> Cheers,
>
> Tim.
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 15:25                                                 ` Jeroen Groenewegen van der Weyden
@ 2011-07-26 15:48                                                   ` Tim Deegan
  2011-07-26 16:00                                                     ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 15:48 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

At 17:25 +0200 on 26 Jul (1311701111), Jeroen Groenewegen van der Weyden wrote:
> Tim! everyhting seems to work now. domu is working ok, all 4 nested
> kvm guests are running.

Excellent.  Thank you for the testing.  I'll check those changes in. 

> only dmesg seems te complain about something
> (XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 000000018c829000

That's OK; those are benign and I'll remove them. 

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 14:21                                               ` Tim Deegan
@ 2011-07-26 15:25                                                 ` Jeroen Groenewegen van der Weyden
  2011-07-26 15:48                                                   ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26 15:25 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Tim! everyhting seems to work now. domu is working ok, all 4 nested kvm 
guests are running.

only dmesg seems te complain about something
(XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 000000018c829000
(XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 000000018c829000
(XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 00000001f9372000
(XEN) vvmx.c:1205:d2 vmclear gpa 1ec8f7000 != 00000001f9372000
(XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 00000001ec8f7000
(XEN) vvmx.c:1205:d2 vmclear gpa 18c829000 != 00000001ec8f7000
(XEN) vvmx.c:1205:d2 vmclear gpa 1920de000 != 00000001ec8f7000


mfg,
Jeroen

Op 26-7-2011 16:21, Tim Deegan schreef:
> At 15:33 +0200 on 26 Jul (1311694437), Jeroen Groenewegen van der Weyden wrote:
>> Tim, This improved a lot. the domu does not become in-responsive
>> anymore. However, all four l2 guest are started. but 2 out of 4 are
>> hanging/in-responsive after 30 to 60 seconds.
>>
>> L1 domu (sles11sp1)
>>   ->  seems to be ok
>>
>> L2-1 propetary OS, seems to be ok
>> L2-2 propetary OS, seems to be ok
>> l2-3 sles10sp3, hanging/in-responsive
>> l2-4 sles10sp3, hanging/in-responsive
>>
>> no degug/error messages in dmesg.
> Anything in the l1 dmesg?
>
> I'm trying to repro with actual linux guests but I've found that
> PXELINUX is hanging for me. :(  I'll have a look at that later if I can.
>
> In the meantime I realised I didn't quite get the logic right in the
> first patch; there's one case missing.  Can you please try this one?
>
> Tim.
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 13:33                                             ` Jeroen Groenewegen van der Weyden
@ 2011-07-26 14:21                                               ` Tim Deegan
  2011-07-26 15:25                                                 ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 14:21 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

[-- Attachment #1: Type: text/plain, Size: 956 bytes --]

At 15:33 +0200 on 26 Jul (1311694437), Jeroen Groenewegen van der Weyden wrote:
> Tim, This improved a lot. the domu does not become in-responsive
> anymore. However, all four l2 guest are started. but 2 out of 4 are
> hanging/in-responsive after 30 to 60 seconds.
> 
> L1 domu (sles11sp1)
>  -> seems to be ok
> 
> L2-1 propetary OS, seems to be ok
> L2-2 propetary OS, seems to be ok
> l2-3 sles10sp3, hanging/in-responsive
> l2-4 sles10sp3, hanging/in-responsive
> 
> no degug/error messages in dmesg.

Anything in the l1 dmesg?

I'm trying to repro with actual linux guests but I've found that
PXELINUX is hanging for me. :(  I'll have a look at that later if I can.

In the meantime I realised I didn't quite get the logic right in the
first patch; there's one case missing.  Can you please try this one?

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

[-- Attachment #2: vmclear --]
[-- Type: text/plain, Size: 2843 bytes --]

diff -r 9dbbf1631193 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Mon Jul 25 14:21:13 2011 +0100
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Tue Jul 26 15:19:30 2011 +0100
@@ -1070,11 +1070,17 @@ int nvmx_handle_vmresume(struct cpu_user
     int launched;
     struct vcpu *v = current;
 
+    if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+    {
+        vmreturn (regs, VMFAIL_INVALID);
+        return X86EMUL_OKAY;        
+    }
+
     launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
                            NVMX_LAUNCH_STATE);
     if ( !launched ) {
        vmreturn (regs, VMFAIL_VALID);
-       return X86EMUL_EXCEPTION;
+       return X86EMUL_OKAY;
     }
     return nvmx_vmresume(v,regs);
 }
@@ -1085,11 +1091,17 @@ int nvmx_handle_vmlaunch(struct cpu_user
     int rc;
     struct vcpu *v = current;
 
+    if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+    {
+        vmreturn (regs, VMFAIL_INVALID);
+        return X86EMUL_OKAY;        
+    }
+
     launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
                            NVMX_LAUNCH_STATE);
     if ( launched ) {
        vmreturn (regs, VMFAIL_VALID);
-       rc = X86EMUL_EXCEPTION;
+       return X86EMUL_OKAY;
     }
     else {
         rc = nvmx_vmresume(v,regs);
@@ -1162,6 +1174,7 @@ int nvmx_handle_vmclear(struct cpu_user_
     struct vmx_inst_decoded decode;
     struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
     unsigned long gpa = 0;
+    void *vvmcs;
     int rc;
 
     rc = decode_vmx_inst(regs, &decode, &gpa, 0);
@@ -1171,24 +1184,28 @@ int nvmx_handle_vmclear(struct cpu_user_
     if ( gpa & 0xfff )
     {
         vmreturn(regs, VMFAIL_INVALID);
-        goto out;
+        return X86EMUL_OKAY;
+    }
+    
+    if ( gpa == nvcpu->nv_vvmcxaddr ) 
+    {
+        __set_vvmcs(nvcpu->nv_vvmcx, NVMX_LAUNCH_STATE, 0);
+        nvmx_purge_vvmcs(v);
+    }
+    else 
+    {
+        /* Even if this VMCS isn't the current one, we must clear it. */
+        vvmcs = hvm_map_guest_frame_rw(gpa >> PAGE_SHIFT);
+        if ( vvmcs ) 
+            __set_vvmcs(vvmcs, NVMX_LAUNCH_STATE, 0);
+        hvm_unmap_guest_frame(vvmcs);
+
+        if ( nvcpu->nv_vvmcxaddr != VMCX_EADDR )
+            gdprintk(XENLOG_WARNING, "vmclear gpa %lx != %"PRIpaddr"\n",
+                     gpa, nvcpu->nv_vvmcxaddr);
     }
 
-    if ( gpa != nvcpu->nv_vvmcxaddr && nvcpu->nv_vvmcxaddr != VMCX_EADDR )
-    {
-        gdprintk(XENLOG_WARNING, 
-                 "vmclear gpa %lx not the same as current vmcs %"PRIpaddr"\n",
-                 gpa, nvcpu->nv_vvmcxaddr);
-        vmreturn(regs, VMSUCCEED);
-        goto out;
-    }
-    if ( nvcpu->nv_vvmcxaddr != VMCX_EADDR )
-        __set_vvmcs(nvcpu->nv_vvmcx, NVMX_LAUNCH_STATE, 0);
-    nvmx_purge_vvmcs(v);
-
     vmreturn(regs, VMSUCCEED);
-
-out:
     return X86EMUL_OKAY;
 }
 

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 11:42                                           ` Tim Deegan
@ 2011-07-26 13:33                                             ` Jeroen Groenewegen van der Weyden
  2011-07-26 14:21                                               ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26 13:33 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie


[-- Attachment #1.1: Type: text/plain, Size: 1592 bytes --]

Tim, This improved a lot. the domu does not become in-responsive 
anymore. However, all four l2 guest are started. but 2 out of 4 are 
hanging/in-responsive after 30 to 60 seconds.

L1 domu (sles11sp1)
  -> seems to be ok

L2-1 propetary OS, seems to be ok
L2-2 propetary OS, seems to be ok
l2-3 sles10sp3, hanging/in-responsive
l2-4 sles10sp3, hanging/in-responsive

no degug/error messages in dmesg.

mfg,
jeroen

Op 26-7-2011 13:42, Tim Deegan schreef:
> At 12:46 +0200 on 26 Jul (1311684389), Jeroen Groenewegen van der Weyden wrote:
>> Here my input
> Thanks.  Looks very similar to the bug I thought I fixed with my patch.
>
> VCPUs 1 and 3 are always at 0xa01a1c9d:<0f>  01 c2 eb 03 0f 01 c3
> which is probably this fragment of code from KVM's vmx_vcpu_run():
>
>          /* Enter guest mode */
>          "jne .Llaunched \n\t"
> 	__ex(ASM_VMX_VMLAUNCH) "\n\t"
>          "jmp .Lkvm_vmx_return \n\t"
>          ".Llaunched: " __ex(ASM_VMX_VMRESUME) "\n\t"
> 	".Lkvm_vmx_return: "
>
> So, just like the case I saw, they're trying to VMLAUNCH a VMCS and
> failing.  That should only fail if the VMCS is already launched.
>
> I think the reason they're _stuck_ is that error paths for VMLAUNCH and
> VMRESUME emulation are wrong; I can fix them up a little but I suspect
> that won't solve the problem; just change it from a hang to some other
> failure mode.
>
> Can you try the attached patch instead of the previous one?
>
> Tim.
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel


[-- Attachment #1.2: Type: text/html, Size: 2365 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 10:46                                         ` Jeroen Groenewegen van der Weyden
@ 2011-07-26 11:42                                           ` Tim Deegan
  2011-07-26 13:33                                             ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 11:42 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

[-- Attachment #1: Type: text/plain, Size: 1079 bytes --]

At 12:46 +0200 on 26 Jul (1311684389), Jeroen Groenewegen van der Weyden wrote:
> Here my input

Thanks.  Looks very similar to the bug I thought I fixed with my patch.

VCPUs 1 and 3 are always at 0xa01a1c9d: <0f> 01 c2 eb 03 0f 01 c3
which is probably this fragment of code from KVM's vmx_vcpu_run():

        /* Enter guest mode */
        "jne .Llaunched \n\t"
	__ex(ASM_VMX_VMLAUNCH) "\n\t"
        "jmp .Lkvm_vmx_return \n\t"
        ".Llaunched: " __ex(ASM_VMX_VMRESUME) "\n\t"
	".Lkvm_vmx_return: "

So, just like the case I saw, they're trying to VMLAUNCH a VMCS and
failing.  That should only fail if the VMCS is already launched. 

I think the reason they're _stuck_ is that error paths for VMLAUNCH and
VMRESUME emulation are wrong; I can fix them up a little but I suspect
that won't solve the problem; just change it from a hang to some other
failure mode.

Can you try the attached patch instead of the previous one? 

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

[-- Attachment #2: vmclear --]
[-- Type: text/plain, Size: 2231 bytes --]

diff -r 9dbbf1631193 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Mon Jul 25 14:21:13 2011 +0100
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Tue Jul 26 12:42:00 2011 +0100
@@ -1070,11 +1070,17 @@ int nvmx_handle_vmresume(struct cpu_user
     int launched;
     struct vcpu *v = current;
 
+    if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+    {
+        vmreturn (regs, VMFAIL_INVALID);
+        return X86EMUL_OKAY;        
+    }
+
     launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
                            NVMX_LAUNCH_STATE);
     if ( !launched ) {
        vmreturn (regs, VMFAIL_VALID);
-       return X86EMUL_EXCEPTION;
+       return X86EMUL_OKAY;
     }
     return nvmx_vmresume(v,regs);
 }
@@ -1085,11 +1091,17 @@ int nvmx_handle_vmlaunch(struct cpu_user
     int rc;
     struct vcpu *v = current;
 
+    if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR )
+    {
+        vmreturn (regs, VMFAIL_INVALID);
+        return X86EMUL_OKAY;        
+    }
+
     launched = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx,
                            NVMX_LAUNCH_STATE);
     if ( launched ) {
        vmreturn (regs, VMFAIL_VALID);
-       rc = X86EMUL_EXCEPTION;
+       return X86EMUL_OKAY;
     }
     else {
         rc = nvmx_vmresume(v,regs);
@@ -1162,6 +1174,7 @@ int nvmx_handle_vmclear(struct cpu_user_
     struct vmx_inst_decoded decode;
     struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
     unsigned long gpa = 0;
+    void *vvmcs;
     int rc;
 
     rc = decode_vmx_inst(regs, &decode, &gpa, 0);
@@ -1176,9 +1189,15 @@ int nvmx_handle_vmclear(struct cpu_user_
 
     if ( gpa != nvcpu->nv_vvmcxaddr && nvcpu->nv_vvmcxaddr != VMCX_EADDR )
     {
-        gdprintk(XENLOG_WARNING, 
-                 "vmclear gpa %lx not the same as current vmcs %"PRIpaddr"\n",
+        gdprintk(XENLOG_WARNING, "vmclear gpa %lx != %"PRIpaddr"\n",
                  gpa, nvcpu->nv_vvmcxaddr);
+
+        /* Even if this VMCS isn't the current one, we must clear it. */
+        vvmcs = hvm_map_guest_frame_rw(gpa >> PAGE_SHIFT);
+        if ( vvmcs ) 
+            __set_vvmcs(vvmcs, NVMX_LAUNCH_STATE, 0);
+        hvm_unmap_guest_frame(vvmcs);
+
         vmreturn(regs, VMSUCCEED);
         goto out;
     }

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 10:00                                     ` Tim Deegan
  2011-07-26 10:11                                       ` Tim Deegan
@ 2011-07-26 11:05                                       ` Jeroen Groenewegen van der Weyden
  1 sibling, 0 replies; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26 11:05 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Op 26-7-2011 12:00, Tim Deegan schreef:
> If you give your first-level guest only one vcpu, does the problem go
> away?
I did. I can not tell for sure 100% but it seems different/better. eg 
from ir-responsive to dead snail performance. after this the DOMU reboot 
it self but this is/could be a mechanism of the installed application.  
I'do more investigation to be sure and keep you informed.

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 10:11                                       ` Tim Deegan
@ 2011-07-26 10:46                                         ` Jeroen Groenewegen van der Weyden
  2011-07-26 11:42                                           ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26 10:46 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

[-- Attachment #1: Type: text/plain, Size: 789 bytes --]

Here my input


mfg,
jeroen

Op 26-7-2011 12:11, Tim Deegan schreef:
> At 11:00 +0100 on 26 Jul (1311678018), Tim Deegan wrote:
>> If you want to double-check that you've done the patch right,
>> edit xen/arch/x86/hvm/vmx/vvmx.c, and at line 1185, just under the line
>> ` /* Even if this VMCS isn't the current one, we must clear it. */ '
>> add a line ` printk("boo!\n"); '.  Then when you recompile and test you
>> should see "boo!" printed just after each "vvmx.c:1182:d3" line on the
>> console.
> Oh, and when the domU is hung, can you run the command
> /usr/lib/xen/bin/xenctx -aCS 1
> (replacing '1' with the domid of your domU) three or four times
> and post the output here?  On a 64-bit dom0 I think the correct path
> will be /usr/lib64/xen/bin/xenctx.
>
> Cheers,
>
> Tim.
>


[-- Attachment #2: 1.xenctx --]
[-- Type: text/plain, Size: 11856 bytes --]

rip: ffffffff810784d0 
flags: 00000202 i nz
rsp: ffff8801f17c9ce8
rax: 000000000000000f	rcx: 000000000000000f	rdx: 0000000000000000
rbx: ffff88001146ffc0	rsi: 000000000000000f	rdi: 0000000000000000
rbp: ffff8801f17c9d28	 r8: 000000000000000f	 r9: ffffffff8140bba0
r10: 0000000000000000	r11: ffffffff8101f2b0	r12: ffff88001146ffd0
r13: ffff88001146ffc0	r14: 0000000000000003	r15: 0000000000000001
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f572c000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff810784d0)
39 eb 74 41 45 85 ff 75 0e 0f 1f 40 00 eb 0e 66 0f 1f 44 00 00 <f3> 90 f6 45 20 01 75 f8 48 8b 5c 


Stack:
 0000000000013700 0000000000000000 0000000000000003 ffffffff81927680
 ffff8801f5698100 ffffffffa019e920 0000000000000001 ffffffff810786f3
 ffff88001146ffc0 ffff88001146ffc0 ffffffffa019e920 ffff8801f5698100
 0000000000000001 ffff8801f15e2280 ffff8801f17c9dd8 ffff8801f5698100

Stack Trace:
* [<ffffffff810784d0>]  <--
    0000000000013700
    0000000000000000
    0000000000000003
  [<ffffffff81927680>] 
    ffff8801f5698100
  [<ffffffffa019e920>] 
    0000000000000001
  [<ffffffff810786f3>] 
    ffff88001146ffc0
    ffff88001146ffc0
  [<ffffffffa019e920>] 
    ffff8801f5698100
    0000000000000001
    ffff8801f15e2280
    ffff8801f17c9dd8
    ffff8801f5698100
    0000000000000000
    00007fc30a713c90
    ffff8801f5698100
    000000004004ae86
    0000000000c76ad0
  [<ffffffffa019fcf4>] 
    0000000000000286
    ffff8801f17c9e10
    ffff8801f17c9de0
    00000001f5713000
    ffff8801f5698100
    ffff8801f5698100
    ffff8801f5698100
  [<ffffffffa0377e7e>] 
  [<fffffffffffffffb>] 
  [<ffffffffa037cdb5>] 
    ffff88010000007b
    ffff8801f17c9df0
    ffff8801f17c9df0
    ffff8801f15e2280
    0000000000000000
    000000000086b000
    ffff880203941040
    0000000000000b00
    0000000000000000
    0000000000000000
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f5698100
    00007fc30a713c90
    000000000000000f
  [<ffffffffa03736a6>] 
    ffff8801f17c9ea8
  [<ffffffff8105aacc>] 
    ffff8801f15e2280
    00007fc30a713ce0
    00007fc30a713c20
  [<ffffffff8105a0bd>] 
    00000000000000fa
  [<ffffffff8105ad7d>] 
    0000000000000026
  [<ffffffff81ad9a28>] 
    0000000000003320
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    000000004004ae86
  [<ffffffff8110c63f>] 
    ffff88020377d900
    00007fc30a713c90
    00007fc30a713c90
  [<ffffffff8110cacb>] 
    0000000200c77c74
    000000000086bb00
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
  [<ffffffff8110cbe1>] 
    00007fc310ccc000
    00000001810595c9
    0000000000ca1ec0
    000000000000007b
    0000000000ca1ec0
    00007fc30a713fa0
    00007fc310ccb000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000000000
    00000000ffffff80
    0000000000000010
    00007fc30e85abd7
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    0000000000000010
    00007fc30e85abd7
    0000000000000033
    0000000000000246
    00007fc30a713ca0
    000000000000002b
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f20ddc90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c0352433	rdi: 00000000c1602593
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 080b0028
cr3: 1f2030000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f14bc0c0 ffff8801f14bc0c0 0000000000006c14 0000000000000000
 ffff8801f14bc2b4 0000000000013700 ffffffff811e2fd0 ffff8802056853d0
 ffffffff811e2fd0 ffff880203ad0870 0000000000000000 0000000000000001
 ffff880203ad0870 0000000000000001 ffffffff81066f81 fffffffffffffffb

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f14bc0c0
    ffff8801f14bc0c0
    0000000000006c14
    0000000000000000
    ffff8801f14bc2b4
    0000000000013700
  [<ffffffff811e2fd0>] 
    ffff8802056853d0
  [<ffffffff811e2fd0>] 
    ffff880203ad0870
    0000000000000000
    0000000000000001
    ffff880203ad0870
    0000000000000001
  [<ffffffff81066f81>] 
  [<fffffffffffffffb>] 
    ffff88001142fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000001
    000000000000fdc0
    000000000000fdc0
    ffff8802056853c0
  [<ffffffffa038e898>] 
    0000000000000070
  [<ffffffffa038ed00>] 
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    ffff8801f14bc118
    0000000000000000
    ffff8801f147a000
    ffff8801f14bc119
  [<ffffffffa0380866>] 
    ffff8801f21281c0
    ffff8801f20dc000
    0000000000014310
    ffff8801f20ddfd8
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f20ddfd8
    ffff8801f14bd750
    ffff8801f14bd748
    00ffffff8107454f
    ffff8801dea9ddd8
  [<ffffffff81ad7370>] 
    fffffffe7ffbfeff
  [<ffffffff81074a05>] 
    ffff8801f20dc000
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77950
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54a2538
    ffff880011473700
    ffff8801f20ddec0
  [<ffffffff8103fe03>] 
    ffff8801f7970ac0
    ffff8801f7970ac0
    ffff880011473700
    ffff8801f7970ac0
    ffff880011242f78
  [<ffffffff811245c0>] 
    ffff8801f20ddf70
    ffff880202d95bc0
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff880202d95bc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff880202d95bc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000001123d20
    0000000181003d75
    00007fd0b975a000
    0000000000000000
    0000000000cb2bb0
    0000000000000001
    00007fd0b9759000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000100000
    000000000086bb00
    0000000000000010
    0000000000000000
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007fd0b731dbd7
    0000000000000033
    0000000000010202
    00007fd0b462a678
    000000000000002b
rip: ffffffff8100aef2 
flags: 00000246 i z p
rsp: ffff8802073dbf30
rax: ffff8802073dbfd8	rcx: 00000000ffffffff	rdx: 0000000000000000
rbx: ffff8802073dbfd8	rsi: 0000000000000001	rdi: ffffffff81a2e308
rbp: ffffffff81927680	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 00000000000003ff	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 0018	 es: 0018
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f5751000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff8100aef2)
65 48 8b 04 25 88 b5 00 00 83 88 3c e0 ff ff 04 c3 66 90 fb f4 <eb> e9 66 66 66 2e 0f 1f 84 00 00 


Stack:
 ffffffff8100205a 0000000000000018 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000

Stack Trace:
* [<ffffffff8100aef2>]  <--
  [<ffffffff8100205a>] 
    0000000000000018
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f2151c90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c035245a	rdi: 00000000c14015ba
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 0807f000
cr3: 1f23fa000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f1600080 ffff8801f1600080 0000000000006c14 0000000000000003
 ffff8801f1600274 00000000ffffffff ffffffffa0378937 ffff8802056854d0
 0000000000000000 ffff88020513d670 0000000000000000 0000000000000003
 ffff88020513d670 0000000000000003 ffffffff81066f81 ffff8801f2151e08

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f1600080
    ffff8801f1600080
    0000000000006c14
    0000000000000003
    ffff8801f1600274
    00000000ffffffff
  [<ffffffffa0378937>] 
    ffff8802056854d0
    0000000000000000
    ffff88020513d670
    0000000000000000
    0000000000000003
    ffff88020513d670
    0000000000000003
  [<ffffffff81066f81>] 
    ffff8801f2151e08
    ffff88001146fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000003
    000000000000fdc0
    000000000000fdc0
    ffff8802056854c0
  [<ffffffffa038e898>] 
    0000000000000010
  [<ffffffffa038ed00>] 
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f16000d8
    0000000000000000
    ffff8801f15f0000
    ffff8801f16000d9
  [<ffffffffa0380866>] 
    ffff8801f154c3c0
    ffff8801f2150000
    0000000000014310
    ffff8801f2151fd8
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f2151fd8
    ffff8801f1601710
    ffff8801f1601708
    00ff8801f154c1c0
    00000000000000ab
    0000000007e5df6d
    fffffffe7ffbfeff
    0000000000000b00
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f1600080
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77910
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54ae5f8
    ffff880011453700
    ffff8801f2151ec0
  [<ffffffff8103fe03>] 
    ffff880205753040
    ffff880205753040
    ffff880011453700
    ffff880203941040
    0000000000000304
    ffff8801de86fac8
    ffff8801f2151f70
    ffff8801f7a6d140
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f7a6d140
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff8801f7a6d140
    0000000000000000
  [<ffffffff8110cbe1>] 
    00007f4c669d2000
    0000000100cb2b70
    00007f4c669d2000
    0000000000000000
    0000000000cb2b70
    0000000000000001
    00007f4c669d1000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000001
    0000000000002cf3
    000000000086bb00
    0000000000000010
    00007f4c64595bd7
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007f4c64595bd7
    0000000000000033
    0000000000000202
    00007f4c618a2cb0
    000000000000002b

[-- Attachment #3: 2.xenctx --]
[-- Type: text/plain, Size: 11731 bytes --]

rip: ffffffff8101f0db 
flags: 00000083 s nz c
rsp: ffff880011403ee0
rax: ffffffff818120e0	rcx: 0000000000000020	rdx: 00000000003ce63b
rbx: 0000000000000000	rsi: 0000000000006170	rdi: ffffffffff5fb380
rbp: 0000004130d2de00	 r8: ffff88001140cdc0	 r9: 0000000000015ab9
r10: ffff88001140fe18	r11: ffffffff8101a450	r12: ffff88001140cdc0
r13: 0000004130d2de01	r14: ffffffff8155dca5	r15: ffff880011403f48
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f572c000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff8101f0db)
90 90 90 90 90 90 90 90 90 90 89 ff 48 81 ef 00 50 a0 00 89 37 <c3> 0f 1f 40 00 89 ff 8b 87 00 b0 


Stack:
 ffffffff8101a468 ffffffff8155dca5 ffffffff810725a6 0000000000000080
 ffff88001140fdc8 ffff88001140fdc0 0000004130d2de00 0000004130d2de00
 ffffffff810673eb ffff88001146ffd0 000000413095f057 000000413095f057
 0000000000000001 000000413095f057 ffff880011403f58 0000000000000046

Stack Trace:
* [<ffffffff8101f0db>]  <--
  [<ffffffff8101a468>] 
  [<ffffffff8155dca5>] 
  [<ffffffff810725a6>] 
    0000000000000080
    ffff88001140fdc8
    ffff88001140fdc0
    0000004130d2de00
    0000004130d2de00
  [<ffffffff810673eb>] 
    ffff88001146ffd0
    000000413095f057
    000000413095f057
    0000000000000001
    000000413095f057
    ffff880011403f58
    0000000000000046
    ffff88001140cdc0
    0000000000000000
    ffff88001146ffd0
    ffff88001146ffc0
    0000000000000003
    0000000000000001
  [<ffffffff8101b077>] 
    ffff8801f17c9c60
    ffff88001146ffc0
    ffff8801f17c9c60
  [<ffffffff81003a93>] 
    ffff8801f17c9c60
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f20ddc90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c0352433	rdi: 00000000c1602593
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 080b0028
cr3: 1f2030000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f14bc0c0 ffff8801f14bc0c0 0000000000006c14 0000000000000000
 ffff8801f14bc2b4 0000000000013700 ffffffff811e2fd0 ffff8802056853d0
 ffffffff811e2fd0 ffff880203ad0870 0000000000000000 0000000000000001
 ffff880203ad0870 0000000000000001 ffffffff81066f81 fffffffffffffffb

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f14bc0c0
    ffff8801f14bc0c0
    0000000000006c14
    0000000000000000
    ffff8801f14bc2b4
    0000000000013700
  [<ffffffff811e2fd0>] 
    ffff8802056853d0
  [<ffffffff811e2fd0>] 
    ffff880203ad0870
    0000000000000000
    0000000000000001
    ffff880203ad0870
    0000000000000001
  [<ffffffff81066f81>] 
  [<fffffffffffffffb>] 
    ffff88001142fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000001
    000000000000fdc0
    000000000000fdc0
    ffff8802056853c0
  [<ffffffffa038e898>] 
    0000000000000070
  [<ffffffffa038ed00>] 
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    ffff8801f14bc118
    0000000000000000
    ffff8801f147a000
    ffff8801f14bc119
  [<ffffffffa0380866>] 
    ffff8801f21281c0
    ffff8801f20dc000
    0000000000014310
    ffff8801f20ddfd8
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f20ddfd8
    ffff8801f14bd750
    ffff8801f14bd748
    00ffffff8107454f
    ffff8801dea9ddd8
  [<ffffffff81ad7370>] 
    fffffffe7ffbfeff
  [<ffffffff81074a05>] 
    ffff8801f20dc000
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77950
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54a2538
    ffff880011473700
    ffff8801f20ddec0
  [<ffffffff8103fe03>] 
    ffff8801f7970ac0
    ffff8801f7970ac0
    ffff880011473700
    ffff8801f7970ac0
    ffff880011242f78
  [<ffffffff811245c0>] 
    ffff8801f20ddf70
    ffff880202d95bc0
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff880202d95bc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff880202d95bc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000001123d20
    0000000181003d75
    00007fd0b975a000
    0000000000000000
    0000000000cb2bb0
    0000000000000001
    00007fd0b9759000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000100000
    000000000086bb00
    0000000000000010
    0000000000000000
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007fd0b731dbd7
    0000000000000033
    0000000000010202
    00007fd0b462a678
    000000000000002b
rip: ffffffffa01a0b02 
flags: 00000202 i nz
rsp: ffff8801f5657d68
rax: 0000000000000001	rcx: 00000000000004a1	rdx: 000000000000440c
rbx: ffff8801f57c0040	rsi: ffff8801f207f000	rdi: ffff8801f57c0040
rbp: ffff8801f57c0230	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: ffffffffa01a0b60	r12: ffff8801f207f000
r13: 0000000000000001	r14: ffff8801f207f000	r15: ffff8801f57c0099
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 80050033
cr2: 00000000
cr3: 1f5751000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a0b02)
ff 90 08 01 00 00 48 8b 8b e8 01 00 00 ba 0c 44 00 00 0f 78 d0 <89> c0 48 01 c8 48 89 83 e8 01 00 


Stack:
 880011444000007f 0000000011000008 ffff8801f57c0040 ffffffffa01a0bc5
 0000000000000000 ffff8801f57c0040 ffff8801f57c0098 ffffffffa03808d3
 0000000000013700 ffff8801f5656000 0000000000014310 ffff8801f5657fd8
 ffff8801f550c600 ffff8801f550c600 ffff8801f550c600 ffff8801f550c600

Stack Trace:
* [<ffffffffa01a0b02>]  <--
    880011444000007f
    0000000011000008
    ffff8801f57c0040
  [<ffffffffa01a0bc5>] 
    0000000000000000
    ffff8801f57c0040
    ffff8801f57c0098
  [<ffffffffa03808d3>] 
    0000000000013700
    ffff8801f5656000
    0000000000014310
    ffff8801f5657fd8
    ffff8801f550c600
    ffff8801f550c600
    ffff8801f550c600
    ffff8801f550c600
    ffff8801f5657fd8
    ffff8801f57c16d0
    ffff8801f57c16c8
    0000000000000096
    0000000000000000
  [<ffffffff81817860>] 
    fffffffe7ffbfeff
    ffff8801f550cd90
    0000000000000026
  [<fffffffffffffffb>] 
    ffff8801f57c0040
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c76840
  [<ffffffffa037385a>] 
    ffff8801f5657ea8
  [<ffffffff8105aacc>] 
    ffff8801f550c600
    00007ff18675bce0
    00007ff18675bc20
  [<ffffffff8105a0bd>] 
    0000000000000000
  [<ffffffff8105ad7d>] 
    0000000000000026
    00000000fffffffa
    0000000000002b8d
    0000000000000200
    ffff8801f91a5cc0
    0000000000000000
    000000000000ae80
    000000000000000f
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f91a5cc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    00007fff874c4380
  [<ffffffff810fd6d0>] 
    0000000000000000
    ffff8801f91a5cc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000000000000
    00000001810595c9
    00007ff18c513000
    0000000000000000
    0000000000c904f0
    0000000000000001
    00007ff18c512000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    000000002158fe01
    000000000086bb00
    0000000000000010
    00000000000000aa
    0000000000000000
    000000000000ae80
    000000000000000f
    0000000000000010
    00007ff18a0a1bd7
    0000000000000033
    0000000000000207
    00007ff18675bb20
    000000000000002b
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f2151c90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c035245a	rdi: 00000000c14015ba
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 0807f000
cr3: 1f23fa000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f1600080 ffff8801f1600080 0000000000006c14 0000000000000003
 ffff8801f1600274 00000000ffffffff ffffffffa0378937 ffff8802056854d0
 0000000000000000 ffff88020513d670 0000000000000000 0000000000000003
 ffff88020513d670 0000000000000003 ffffffff81066f81 ffff8801f2151e08

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f1600080
    ffff8801f1600080
    0000000000006c14
    0000000000000003
    ffff8801f1600274
    00000000ffffffff
  [<ffffffffa0378937>] 
    ffff8802056854d0
    0000000000000000
    ffff88020513d670
    0000000000000000
    0000000000000003
    ffff88020513d670
    0000000000000003
  [<ffffffff81066f81>] 
    ffff8801f2151e08
    ffff88001146fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000003
    000000000000fdc0
    000000000000fdc0
    ffff8802056854c0
  [<ffffffffa038e898>] 
    0000000000000010
  [<ffffffffa038ed00>] 
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f16000d8
    0000000000000000
    ffff8801f15f0000
    ffff8801f16000d9
  [<ffffffffa0380866>] 
    ffff8801f154c3c0
    ffff8801f2150000
    0000000000014310
    ffff8801f2151fd8
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f2151fd8
    ffff8801f1601710
    ffff8801f1601708
    00ff8801f154c1c0
    00000000000000ab
    0000000007e5df6d
    fffffffe7ffbfeff
    0000000000000b00
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f1600080
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77910
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54ae5f8
    ffff880011453700
    ffff8801f2151ec0
  [<ffffffff8103fe03>] 
    ffff880205753040
    ffff880205753040
    ffff880011453700
    ffff880203941040
    0000000000000304
    ffff8801de86fac8
    ffff8801f2151f70
    ffff8801f7a6d140
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f7a6d140
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff8801f7a6d140
    0000000000000000
  [<ffffffff8110cbe1>] 
    00007f4c669d2000
    0000000100cb2b70
    00007f4c669d2000
    0000000000000000
    0000000000cb2b70
    0000000000000001
    00007f4c669d1000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000001
    0000000000002cf3
    000000000086bb00
    0000000000000010
    00007f4c64595bd7
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007f4c64595bd7
    0000000000000033
    0000000000000202
    00007f4c618a2cb0
    000000000000002b

[-- Attachment #4: 3.xenctx --]
[-- Type: text/plain, Size: 11856 bytes --]

rip: ffffffff810784d2 
flags: 00000202 i nz
rsp: ffff8801f17c9ce8
rax: 000000000000000f	rcx: 000000000000000f	rdx: 0000000000000000
rbx: ffff88001146ffc0	rsi: 000000000000000f	rdi: 0000000000000000
rbp: ffff8801f17c9d28	 r8: 000000000000000f	 r9: ffffffff8140bba0
r10: 0000000000000000	r11: ffffffff8101f2b0	r12: ffff88001146ffd0
r13: ffff88001146ffc0	r14: 0000000000000003	r15: 0000000000000001
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f572c000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff810784d2)
74 41 45 85 ff 75 0e 0f 1f 40 00 eb 0e 66 0f 1f 44 00 00 f3 90 <f6> 45 20 01 75 f8 48 8b 5c 24 08 


Stack:
 0000000000013700 0000000000000000 0000000000000003 ffffffff81927680
 ffff8801f5698100 ffffffffa019e920 0000000000000001 ffffffff810786f3
 ffff88001146ffc0 ffff88001146ffc0 ffffffffa019e920 ffff8801f5698100
 0000000000000001 ffff8801f15e2280 ffff8801f17c9dd8 ffff8801f5698100

Stack Trace:
* [<ffffffff810784d2>]  <--
    0000000000013700
    0000000000000000
    0000000000000003
  [<ffffffff81927680>] 
    ffff8801f5698100
  [<ffffffffa019e920>] 
    0000000000000001
  [<ffffffff810786f3>] 
    ffff88001146ffc0
    ffff88001146ffc0
  [<ffffffffa019e920>] 
    ffff8801f5698100
    0000000000000001
    ffff8801f15e2280
    ffff8801f17c9dd8
    ffff8801f5698100
    0000000000000000
    00007fc30a713c90
    ffff8801f5698100
    000000004004ae86
    0000000000c76ad0
  [<ffffffffa019fcf4>] 
    0000000000000286
    ffff8801f17c9e10
    ffff8801f17c9de0
    00000001f5713000
    ffff8801f5698100
    ffff8801f5698100
    ffff8801f5698100
  [<ffffffffa0377e7e>] 
  [<fffffffffffffffb>] 
  [<ffffffffa037cdb5>] 
    ffff88010000007b
    ffff8801f17c9df0
    ffff8801f17c9df0
    ffff8801f15e2280
    0000000000000000
    000000000086b000
    ffff880203941040
    0000000000000b00
    0000000000000000
    0000000000000000
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f5698100
    00007fc30a713c90
    000000000000000f
  [<ffffffffa03736a6>] 
    ffff8801f17c9ea8
  [<ffffffff8105aacc>] 
    ffff8801f15e2280
    00007fc30a713ce0
    00007fc30a713c20
  [<ffffffff8105a0bd>] 
    00000000000000fa
  [<ffffffff8105ad7d>] 
    0000000000000026
  [<ffffffff81ad9a28>] 
    0000000000003320
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    000000004004ae86
  [<ffffffff8110c63f>] 
    ffff88020377d900
    00007fc30a713c90
    00007fc30a713c90
  [<ffffffff8110cacb>] 
    0000000200c77c74
    000000000086bb00
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
  [<ffffffff8110cbe1>] 
    00007fc310ccc000
    00000001810595c9
    0000000000ca1ec0
    000000000000007b
    0000000000ca1ec0
    00007fc30a713fa0
    00007fc310ccb000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000000000
    00000000ffffff80
    0000000000000010
    00007fc30e85abd7
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    0000000000000010
    00007fc30e85abd7
    0000000000000033
    0000000000000246
    00007fc30a713ca0
    000000000000002b
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f20ddc90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c0352433	rdi: 00000000c1602593
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 080b0028
cr3: 1f2030000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f14bc0c0 ffff8801f14bc0c0 0000000000006c14 0000000000000000
 ffff8801f14bc2b4 0000000000013700 ffffffff811e2fd0 ffff8802056853d0
 ffffffff811e2fd0 ffff880203ad0870 0000000000000000 0000000000000001
 ffff880203ad0870 0000000000000001 ffffffff81066f81 fffffffffffffffb

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f14bc0c0
    ffff8801f14bc0c0
    0000000000006c14
    0000000000000000
    ffff8801f14bc2b4
    0000000000013700
  [<ffffffff811e2fd0>] 
    ffff8802056853d0
  [<ffffffff811e2fd0>] 
    ffff880203ad0870
    0000000000000000
    0000000000000001
    ffff880203ad0870
    0000000000000001
  [<ffffffff81066f81>] 
  [<fffffffffffffffb>] 
    ffff88001142fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000001
    000000000000fdc0
    000000000000fdc0
    ffff8802056853c0
  [<ffffffffa038e898>] 
    0000000000000070
  [<ffffffffa038ed00>] 
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    ffff8801f14bc118
    0000000000000000
    ffff8801f147a000
    ffff8801f14bc119
  [<ffffffffa0380866>] 
    ffff8801f21281c0
    ffff8801f20dc000
    0000000000014310
    ffff8801f20ddfd8
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f20ddfd8
    ffff8801f14bd750
    ffff8801f14bd748
    00ffffff8107454f
    ffff8801dea9ddd8
  [<ffffffff81ad7370>] 
    fffffffe7ffbfeff
  [<ffffffff81074a05>] 
    ffff8801f20dc000
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77950
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54a2538
    ffff880011473700
    ffff8801f20ddec0
  [<ffffffff8103fe03>] 
    ffff8801f7970ac0
    ffff8801f7970ac0
    ffff880011473700
    ffff8801f7970ac0
    ffff880011242f78
  [<ffffffff811245c0>] 
    ffff8801f20ddf70
    ffff880202d95bc0
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff880202d95bc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff880202d95bc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000001123d20
    0000000181003d75
    00007fd0b975a000
    0000000000000000
    0000000000cb2bb0
    0000000000000001
    00007fd0b9759000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000100000
    000000000086bb00
    0000000000000010
    0000000000000000
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007fd0b731dbd7
    0000000000000033
    0000000000010202
    00007fd0b462a678
    000000000000002b
rip: ffffffff8100aef2 
flags: 00000246 i z p
rsp: ffff8802073dbf30
rax: ffff8802073dbfd8	rcx: 00000000ffffffff	rdx: 0000000000000000
rbx: ffff8802073dbfd8	rsi: 0000000000000001	rdi: ffffffff81a2e308
rbp: ffffffff81927680	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 00000000000003ff	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 0018	 es: 0018
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f5751000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff8100aef2)
65 48 8b 04 25 88 b5 00 00 83 88 3c e0 ff ff 04 c3 66 90 fb f4 <eb> e9 66 66 66 2e 0f 1f 84 00 00 


Stack:
 ffffffff8100205a 0000000000000018 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000

Stack Trace:
* [<ffffffff8100aef2>]  <--
  [<ffffffff8100205a>] 
    0000000000000018
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f2151c90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c035245a	rdi: 00000000c14015ba
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 0807f000
cr3: 1f23fa000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f1600080 ffff8801f1600080 0000000000006c14 0000000000000003
 ffff8801f1600274 00000000ffffffff ffffffffa0378937 ffff8802056854d0
 0000000000000000 ffff88020513d670 0000000000000000 0000000000000003
 ffff88020513d670 0000000000000003 ffffffff81066f81 ffff8801f2151e08

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f1600080
    ffff8801f1600080
    0000000000006c14
    0000000000000003
    ffff8801f1600274
    00000000ffffffff
  [<ffffffffa0378937>] 
    ffff8802056854d0
    0000000000000000
    ffff88020513d670
    0000000000000000
    0000000000000003
    ffff88020513d670
    0000000000000003
  [<ffffffff81066f81>] 
    ffff8801f2151e08
    ffff88001146fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000003
    000000000000fdc0
    000000000000fdc0
    ffff8802056854c0
  [<ffffffffa038e898>] 
    0000000000000010
  [<ffffffffa038ed00>] 
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f16000d8
    0000000000000000
    ffff8801f15f0000
    ffff8801f16000d9
  [<ffffffffa0380866>] 
    ffff8801f154c3c0
    ffff8801f2150000
    0000000000014310
    ffff8801f2151fd8
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f2151fd8
    ffff8801f1601710
    ffff8801f1601708
    00ff8801f154c1c0
    00000000000000ab
    0000000007e5df6d
    fffffffe7ffbfeff
    0000000000000b00
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f1600080
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77910
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54ae5f8
    ffff880011453700
    ffff8801f2151ec0
  [<ffffffff8103fe03>] 
    ffff880205753040
    ffff880205753040
    ffff880011453700
    ffff880203941040
    0000000000000304
    ffff8801de86fac8
    ffff8801f2151f70
    ffff8801f7a6d140
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f7a6d140
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff8801f7a6d140
    0000000000000000
  [<ffffffff8110cbe1>] 
    00007f4c669d2000
    0000000100cb2b70
    00007f4c669d2000
    0000000000000000
    0000000000cb2b70
    0000000000000001
    00007f4c669d1000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000001
    0000000000002cf3
    000000000086bb00
    0000000000000010
    00007f4c64595bd7
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007f4c64595bd7
    0000000000000033
    0000000000000202
    00007f4c618a2cb0
    000000000000002b

[-- Attachment #5: 4.xenctx --]
[-- Type: text/plain, Size: 11856 bytes --]

rip: ffffffff810784d0 
flags: 00000202 i nz
rsp: ffff8801f17c9ce8
rax: 000000000000000f	rcx: 000000000000000f	rdx: 0000000000000000
rbx: ffff88001146ffc0	rsi: 000000000000000f	rdi: 0000000000000000
rbp: ffff8801f17c9d28	 r8: 000000000000000f	 r9: ffffffff8140bba0
r10: 0000000000000000	r11: ffffffff8101f2b0	r12: ffff88001146ffd0
r13: ffff88001146ffc0	r14: 0000000000000003	r15: 0000000000000001
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f572c000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff810784d0)
39 eb 74 41 45 85 ff 75 0e 0f 1f 40 00 eb 0e 66 0f 1f 44 00 00 <f3> 90 f6 45 20 01 75 f8 48 8b 5c 


Stack:
 0000000000013700 0000000000000000 0000000000000003 ffffffff81927680
 ffff8801f5698100 ffffffffa019e920 0000000000000001 ffffffff810786f3
 ffff88001146ffc0 ffff88001146ffc0 ffffffffa019e920 ffff8801f5698100
 0000000000000001 ffff8801f15e2280 ffff8801f17c9dd8 ffff8801f5698100

Stack Trace:
* [<ffffffff810784d0>]  <--
    0000000000013700
    0000000000000000
    0000000000000003
  [<ffffffff81927680>] 
    ffff8801f5698100
  [<ffffffffa019e920>] 
    0000000000000001
  [<ffffffff810786f3>] 
    ffff88001146ffc0
    ffff88001146ffc0
  [<ffffffffa019e920>] 
    ffff8801f5698100
    0000000000000001
    ffff8801f15e2280
    ffff8801f17c9dd8
    ffff8801f5698100
    0000000000000000
    00007fc30a713c90
    ffff8801f5698100
    000000004004ae86
    0000000000c76ad0
  [<ffffffffa019fcf4>] 
    0000000000000286
    ffff8801f17c9e10
    ffff8801f17c9de0
    00000001f5713000
    ffff8801f5698100
    ffff8801f5698100
    ffff8801f5698100
  [<ffffffffa0377e7e>] 
  [<fffffffffffffffb>] 
  [<ffffffffa037cdb5>] 
    ffff88010000007b
    ffff8801f17c9df0
    ffff8801f17c9df0
    ffff8801f15e2280
    0000000000000000
    000000000086b000
    ffff880203941040
    0000000000000b00
    0000000000000000
    0000000000000000
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f5698100
    00007fc30a713c90
    000000000000000f
  [<ffffffffa03736a6>] 
    ffff8801f17c9ea8
  [<ffffffff8105aacc>] 
    ffff8801f15e2280
    00007fc30a713ce0
    00007fc30a713c20
  [<ffffffff8105a0bd>] 
    00000000000000fa
  [<ffffffff8105ad7d>] 
    0000000000000026
  [<ffffffff81ad9a28>] 
    0000000000003320
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    000000004004ae86
  [<ffffffff8110c63f>] 
    ffff88020377d900
    00007fc30a713c90
    00007fc30a713c90
  [<ffffffff8110cacb>] 
    0000000200c77c74
    000000000086bb00
    0000000000000000
    ffff88020377d900
    00007fc30a713c90
  [<ffffffff8110cbe1>] 
    00007fc310ccc000
    00000001810595c9
    0000000000ca1ec0
    000000000000007b
    0000000000ca1ec0
    00007fc30a713fa0
    00007fc310ccb000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000000000
    00000000ffffff80
    0000000000000010
    00007fc30e85abd7
    00007fc30a713c90
    000000004004ae86
    000000000000000f
    0000000000000010
    00007fc30e85abd7
    0000000000000033
    0000000000000246
    00007fc30a713ca0
    000000000000002b
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f20ddc90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c0352433	rdi: 00000000c1602593
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 080b0028
cr3: 1f2030000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f14bc0c0 ffff8801f14bc0c0 0000000000006c14 0000000000000000
 ffff8801f14bc2b4 0000000000013700 ffffffff811e2fd0 ffff8802056853d0
 ffffffff811e2fd0 ffff880203ad0870 0000000000000000 0000000000000001
 ffff880203ad0870 0000000000000001 ffffffff81066f81 fffffffffffffffb

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f14bc0c0
    ffff8801f14bc0c0
    0000000000006c14
    0000000000000000
    ffff8801f14bc2b4
    0000000000013700
  [<ffffffff811e2fd0>] 
    ffff8802056853d0
  [<ffffffff811e2fd0>] 
    ffff880203ad0870
    0000000000000000
    0000000000000001
    ffff880203ad0870
    0000000000000001
  [<ffffffff81066f81>] 
  [<fffffffffffffffb>] 
    ffff88001142fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000001
    000000000000fdc0
    000000000000fdc0
    ffff8802056853c0
  [<ffffffffa038e898>] 
    0000000000000070
  [<ffffffffa038ed00>] 
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    ffff8801f14bc118
    0000000000000000
    ffff8801f147a000
    ffff8801f14bc119
  [<ffffffffa0380866>] 
    ffff8801f21281c0
    ffff8801f20dc000
    0000000000014310
    ffff8801f20ddfd8
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f20ddfd8
    ffff8801f14bd750
    ffff8801f14bd748
    00ffffff8107454f
    ffff8801dea9ddd8
  [<ffffffff81ad7370>] 
    fffffffe7ffbfeff
  [<ffffffff81074a05>] 
    ffff8801f20dc000
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77950
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54a2538
    ffff880011473700
    ffff8801f20ddec0
  [<ffffffff8103fe03>] 
    ffff8801f7970ac0
    ffff8801f7970ac0
    ffff880011473700
    ffff8801f7970ac0
    ffff880011242f78
  [<ffffffff811245c0>] 
    ffff8801f20ddf70
    ffff880202d95bc0
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff880202d95bc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff880202d95bc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000001123d20
    0000000181003d75
    00007fd0b975a000
    0000000000000000
    0000000000cb2bb0
    0000000000000001
    00007fd0b9759000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000100000
    000000000086bb00
    0000000000000010
    0000000000000000
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007fd0b731dbd7
    0000000000000033
    0000000000010202
    00007fd0b462a678
    000000000000002b
rip: ffffffff8100aef2 
flags: 00000246 i z p
rsp: ffff8802073dbf30
rax: ffff8802073dbfd8	rcx: 00000000ffffffff	rdx: 0000000000000000
rbx: ffff8802073dbfd8	rsi: 0000000000000001	rdi: ffffffff81a2e308
rbp: ffffffff81927680	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 00000000000003ff	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 0018	 es: 0018
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f5751000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff8100aef2)
65 48 8b 04 25 88 b5 00 00 83 88 3c e0 ff ff 04 c3 66 90 fb f4 <eb> e9 66 66 66 2e 0f 1f 84 00 00 


Stack:
 ffffffff8100205a 0000000000000018 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000

Stack Trace:
* [<ffffffff8100aef2>]  <--
  [<ffffffff8100205a>] 
    0000000000000018
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f2151c90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c035245a	rdi: 00000000c14015ba
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 0807f000
cr3: 1f23fa000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f1600080 ffff8801f1600080 0000000000006c14 0000000000000003
 ffff8801f1600274 00000000ffffffff ffffffffa0378937 ffff8802056854d0
 0000000000000000 ffff88020513d670 0000000000000000 0000000000000003
 ffff88020513d670 0000000000000003 ffffffff81066f81 ffff8801f2151e08

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f1600080
    ffff8801f1600080
    0000000000006c14
    0000000000000003
    ffff8801f1600274
    00000000ffffffff
  [<ffffffffa0378937>] 
    ffff8802056854d0
    0000000000000000
    ffff88020513d670
    0000000000000000
    0000000000000003
    ffff88020513d670
    0000000000000003
  [<ffffffff81066f81>] 
    ffff8801f2151e08
    ffff88001146fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000003
    000000000000fdc0
    000000000000fdc0
    ffff8802056854c0
  [<ffffffffa038e898>] 
    0000000000000010
  [<ffffffffa038ed00>] 
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f16000d8
    0000000000000000
    ffff8801f15f0000
    ffff8801f16000d9
  [<ffffffffa0380866>] 
    ffff8801f154c3c0
    ffff8801f2150000
    0000000000014310
    ffff8801f2151fd8
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f2151fd8
    ffff8801f1601710
    ffff8801f1601708
    00ff8801f154c1c0
    00000000000000ab
    0000000007e5df6d
    fffffffe7ffbfeff
    0000000000000b00
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f1600080
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77910
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54ae5f8
    ffff880011453700
    ffff8801f2151ec0
  [<ffffffff8103fe03>] 
    ffff880205753040
    ffff880205753040
    ffff880011453700
    ffff880203941040
    0000000000000304
    ffff8801de86fac8
    ffff8801f2151f70
    ffff8801f7a6d140
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f7a6d140
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff8801f7a6d140
    0000000000000000
  [<ffffffff8110cbe1>] 
    00007f4c669d2000
    0000000100cb2b70
    00007f4c669d2000
    0000000000000000
    0000000000cb2b70
    0000000000000001
    00007f4c669d1000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000001
    0000000000002cf3
    000000000086bb00
    0000000000000010
    00007f4c64595bd7
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007f4c64595bd7
    0000000000000033
    0000000000000202
    00007f4c618a2cb0
    000000000000002b

[-- Attachment #6: 5.xenctx --]
[-- Type: text/plain, Size: 10354 bytes --]

rip: ffffffffa03fedf8 
flags: 00010286 rf i s nz p
rsp: ffff880011403f18
rax: ffffc900030000c0	rcx: ffff880011400000	rdx: ffff8802055b7000
rbx: ffff8802055b7780	rsi: ffff8802055b7000	rdi: 0000000000000020
rbp: 0000000000000000	 r8: 000000000000000f	 r9: ffffffff8140bba0
r10: 0000000000000000	r11: ffffffff8101f2b0	r12: 0000000000000000
r13: 0000000000000020	r14: 0000000000000003	r15: 0000000000000001
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f572c000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa03fedf8)
9e 80 07 00 00 48 89 f2 48 8b 83 90 03 00 00 48 05 c0 00 00 00 <8b> 00 85 c0 0f 84 ce 00 00 00 f6 


Stack:
 ffff88020573a9c0 ffffffff8109f7c9 ffff88001146ffd0 ffff88020372f2c0
 ffff88020372f32c 0000000000000020 0000000000000000 ffffffff810a1f04
 0000000000000020 0000000000000020 0000000000000051 ffffffff81005d47
 ffff8801f17c9c38 ffffffff81005255 0000000000000001 ffff88001146ffc0

Stack Trace:
* [<ffffffffa03fedf8>]  <--
    ffff88020573a9c0
  [<ffffffff8109f7c9>] 
    ffff88001146ffd0
    ffff88020372f2c0
    ffff88020372f32c
    0000000000000020
    0000000000000000
  [<ffffffff810a1f04>] 
    0000000000000020
    0000000000000020
    0000000000000051
  [<ffffffff81005d47>] 
    ffff8801f17c9c38
  [<ffffffff81005255>] 
    0000000000000001
    ffff88001146ffc0
    ffff8801f17c9c60
    ffff88001146ffd0
    ffff88001146ffc0
  [<ffffffff81003913>] 
    ffff8801f17c9c60
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f20ddc90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c0352433	rdi: 00000000c1602593
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 080b0028
cr3: 1f2030000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f14bc0c0 ffff8801f14bc0c0 0000000000006c14 0000000000000000
 ffff8801f14bc2b4 0000000000013700 ffffffff811e2fd0 ffff8802056853d0
 ffffffff811e2fd0 ffff880203ad0870 0000000000000000 0000000000000001
 ffff880203ad0870 0000000000000001 ffffffff81066f81 fffffffffffffffb

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f14bc0c0
    ffff8801f14bc0c0
    0000000000006c14
    0000000000000000
    ffff8801f14bc2b4
    0000000000013700
  [<ffffffff811e2fd0>] 
    ffff8802056853d0
  [<ffffffff811e2fd0>] 
    ffff880203ad0870
    0000000000000000
    0000000000000001
    ffff880203ad0870
    0000000000000001
  [<ffffffff81066f81>] 
  [<fffffffffffffffb>] 
    ffff88001142fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000001
    000000000000fdc0
    000000000000fdc0
    ffff8802056853c0
  [<ffffffffa038e898>] 
    0000000000000070
  [<ffffffffa038ed00>] 
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    ffff8801f14bc118
    0000000000000000
    ffff8801f147a000
    ffff8801f14bc119
  [<ffffffffa0380866>] 
    ffff8801f21281c0
    ffff8801f20dc000
    0000000000014310
    ffff8801f20ddfd8
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f5748080
    ffff8801f20ddfd8
    ffff8801f14bd750
    ffff8801f14bd748
    00ffffff8107454f
    ffff8801dea9ddd8
  [<ffffffff81ad7370>] 
    fffffffe7ffbfeff
  [<ffffffff81074a05>] 
    ffff8801f20dc000
  [<fffffffffffffffb>] 
    ffff8801f14bc0c0
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77950
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54a2538
    ffff880011473700
    ffff8801f20ddec0
  [<ffffffff8103fe03>] 
    ffff8801f7970ac0
    ffff8801f7970ac0
    ffff880011473700
    ffff8801f7970ac0
    ffff880011242f78
  [<ffffffff811245c0>] 
    ffff8801f20ddf70
    ffff880202d95bc0
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff880202d95bc0
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff880202d95bc0
    0000000000000000
  [<ffffffff8110cbe1>] 
    0000000001123d20
    0000000181003d75
    00007fd0b975a000
    0000000000000000
    0000000000cb2bb0
    0000000000000001
    00007fd0b9759000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000000
    0000000000100000
    000000000086bb00
    0000000000000010
    0000000000000000
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007fd0b731dbd7
    0000000000000033
    0000000000010202
    00007fd0b462a678
    000000000000002b
rip: ffffffff8100aef2 
flags: 00000246 i z p
rsp: ffff8802073dbf30
rax: ffff8802073dbfd8	rcx: 00000000ffffffff	rdx: 0000000000000000
rbx: ffff8802073dbfd8	rsi: 0000000000000001	rdi: ffffffff81a2e308
rbp: ffffffff81927680	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 00000000000003ff	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 0018	 es: 0018
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 00000000
cr3: 1f5751000
cr4: 000026f0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffff8100aef2)
65 48 8b 04 25 88 b5 00 00 83 88 3c e0 ff ff 04 c3 66 90 fb f4 <eb> e9 66 66 66 2e 0f 1f 84 00 00 


Stack:
 ffffffff8100205a 0000000000000018 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000

Stack Trace:
* [<ffffffff8100aef2>]  <--
  [<ffffffff8100205a>] 
    0000000000000018
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
rip: ffffffffa01a1c9d 
flags: 00000042 z
rsp: ffff8801f2151c90
rax: 0000000000000000	rcx: 00000000c0332008	rdx: 00000000c0332000
rbx: 00000000ffffffff	rsi: 00000000c035245a	rdi: 00000000c14015ba
rbp: 00000000c02a53ec	 r8: 0000000000000000	 r9: 0000000000000000
r10: 0000000000000000	r11: 0000000000000000	r12: 0000000000000000
r13: 0000000000000000	r14: 0000000000000000	r15: 0000000000000000
 cs: 0010	 ss: 0018	 ds: 002b	 es: 002b
 fs: 0000 @ 0000000000000000
 gs: 0000 @ 0000000000000000/0000000000000000

cr0: 8005003b
cr2: 0807f000
cr3: 1f23fa000
cr4: 000026e0

dr0: 00000000
dr1: 00000000
dr2: 00000000
dr3: 00000000
dr6: ffff0ff0
dr7: 00000400
Code (instr addr ffffffffa01a1c9d)
b1 d8 01 00 00 4c 8b b9 e0 01 00 00 48 8b 89 70 01 00 00 75 05 <0f> 01 c2 eb 03 0f 01 c3 48 87 0c 


Stack:
 ffff8801f1600080 ffff8801f1600080 0000000000006c14 0000000000000003
 ffff8801f1600274 00000000ffffffff ffffffffa0378937 ffff8802056854d0
 0000000000000000 ffff88020513d670 0000000000000000 0000000000000003
 ffff88020513d670 0000000000000003 ffffffff81066f81 ffff8801f2151e08

Stack Trace:
* [<ffffffffa01a1c9d>]  <--
    ffff8801f1600080
    ffff8801f1600080
    0000000000006c14
    0000000000000003
    ffff8801f1600274
    00000000ffffffff
  [<ffffffffa0378937>] 
    ffff8802056854d0
    0000000000000000
    ffff88020513d670
    0000000000000000
    0000000000000003
    ffff88020513d670
    0000000000000003
  [<ffffffff81066f81>] 
    ffff8801f2151e08
    ffff88001146fe00
    0000000000000282
  [<ffffffff81067cdf>] 
    0000000000000003
    000000000000fdc0
    000000000000fdc0
    ffff8802056854c0
  [<ffffffffa038e898>] 
    0000000000000010
  [<ffffffffa038ed00>] 
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f2151e08
    ffff8801f1600080
    ffff8801f16000d8
    0000000000000000
    ffff8801f15f0000
    ffff8801f16000d9
  [<ffffffffa0380866>] 
    ffff8801f154c3c0
    ffff8801f2150000
    0000000000014310
    ffff8801f2151fd8
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f154c1c0
    ffff8801f2151fd8
    ffff8801f1601710
    ffff8801f1601708
    00ff8801f154c1c0
    00000000000000ab
    0000000007e5df6d
    fffffffe7ffbfeff
    0000000000000b00
    0000000000000000
  [<fffffffffffffffb>] 
    ffff8801f1600080
    0000000000000000
    0000000000000000
    0000000000000000
    0000000000c77910
  [<ffffffffa037385a>] 
    0000000000000000
    ffff8801f54ae5f8
    ffff880011453700
    ffff8801f2151ec0
  [<ffffffff8103fe03>] 
    ffff880205753040
    ffff880205753040
    ffff880011453700
    ffff880203941040
    0000000000000304
    ffff8801de86fac8
    ffff8801f2151f70
    ffff8801f7a6d140
    0000000000000000
    000000000000ae80
    0000000000000010
    000000000000ae80
  [<ffffffff8110c63f>] 
    ffff8801f7a6d140
    0000000000000000
    0000000000000000
  [<ffffffff8110cacb>] 
    0000000000013700
    0000000000013700
    0000000000000000
    ffff8801f7a6d140
    0000000000000000
  [<ffffffff8110cbe1>] 
    00007f4c669d2000
    0000000100cb2b70
    00007f4c669d2000
    0000000000000000
    0000000000cb2b70
    0000000000000001
    00007f4c669d1000
  [<ffffffff81002f7b>] 
    0000000000000246
    0000000000000001
    0000000000002cf3
    000000000086bb00
    0000000000000010
    00007f4c64595bd7
    0000000000000000
    000000000000ae80
    0000000000000010
    0000000000000010
    00007f4c64595bd7
    0000000000000033
    0000000000000202
    00007f4c618a2cb0
    000000000000002b

[-- Attachment #7: dmesg --]
[-- Type: text/plain, Size: 79999 bytes --]

 __  __            _  _    ____                     _        _     _      
 \ \/ /___ _ __   | || |  |___ \    _   _ _ __  ___| |_ __ _| |__ | | ___ 
  \  // _ \ \047_ \  | || |_   __) |__| | | | \047_ \/ __| __/ _` | \047_ \| |/ _ \
  /  \  __/ | | | |__   _| / __/|__| |_| | | | \__ \ || (_| | |_) | |  __/
 /_/\_\___|_| |_|    |_|(_)_____|   \__,_|_| |_|___/\__\__,_|_.__/|_|\___|
                                                                          
(XEN) Xen version 4.2-unstable (root@site) (gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux) ) Tue Jul 26 12:41:19 CEST 2011
(XEN) Latest ChangeSet: Tue Jul 19 16:02:36 2011 +0100 23728:548b2826293e
(XEN) Bootloader: GNU GRUB 0.97
(XEN) Command line: vga=mode-0x31a
(XEN) Video information:
(XEN)  VGA is graphics mode 1280x1024, 16 bpp
(XEN)  VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN)  Found 5 MBR signatures
(XEN)  Found 5 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN)  0000000000000000 - 000000000009fc00 (usable)
(XEN)  000000000009fc00 - 00000000000a0000 (reserved)
(XEN)  00000000000e4000 - 0000000000100000 (reserved)
(XEN)  0000000000100000 - 00000000bf780000 (usable)
(XEN)  00000000bf78e000 - 00000000bf790000 type 9
(XEN)  00000000bf790000 - 00000000bf79e000 (ACPI data)
(XEN)  00000000bf79e000 - 00000000bf7d0000 (ACPI NVS)
(XEN)  00000000bf7d0000 - 00000000bf7e0000 (reserved)
(XEN)  00000000bf7ec000 - 00000000c0000000 (reserved)
(XEN)  00000000e0000000 - 00000000f0000000 (reserved)
(XEN)  00000000fee00000 - 00000000fee01000 (reserved)
(XEN)  00000000ffe00000 - 0000000100000000 (reserved)
(XEN)  0000000100000000 - 0000001840000000 (usable)
(XEN) ACPI: RSDP 000FB410, 0024 (r2 ACPIAM)
(XEN) ACPI: XSDT BF790100, 008C (r1 120210 XSDT1403 20101202 MSFT       97)
(XEN) ACPI: FACP BF790290, 00F4 (r3 120210 FACP1403 20101202 MSFT       97)
(XEN) ACPI: DSDT BF790540, 5AE1 (r1  S0075 S0075001        1 INTL 20060113)
(XEN) ACPI: FACS BF79E000, 0040
(XEN) ACPI: APIC BF790390, 011E (r1 120210 APIC1403 20101202 MSFT       97)
(XEN) ACPI: MCFG BF7904B0, 003C (r1 120210 OEMMCFG  20101202 MSFT       97)
(XEN) ACPI: SPMI BF7904F0, 0041 (r5 120210 OEMSPMI  20101202 MSFT       97)
(XEN) ACPI: OEMB BF79E040, 0072 (r1 120210 OEMB1403 20101202 MSFT       97)
(XEN) ACPI: HPET BF798540, 0038 (r1 120210 OEMHPET  20101202 MSFT       97)
(XEN) ACPI: SRAT BF798580, 0228 (r1 120210 OEMSRAT         1 INTL        1)
(XEN) ACPI: DMAR BF79E0C0, 0140 (r1    AMI  OEMDMAR        1 MSFT       97)
(XEN) ACPI: SSDT BF7A4000, 0363 (r1 DpgPmm    CpuPm       12 INTL 20060113)
(XEN) ACPI: EINJ BF7987B0, 0130 (r1  AMIER AMI_EINJ 20101202 MSFT       97)
(XEN) ACPI: BERT BF798940, 0030 (r1  AMIER AMI_BERT 20101202 MSFT       97)
(XEN) ACPI: ERST BF798970, 01B0 (r1  AMIER AMI_ERST 20101202 MSFT       97)
(XEN) ACPI: HEST BF798B20, 00A8 (r1  AMIER ABC_HEST 20101202 MSFT       97)
(XEN) System RAM: 98295MB (100654204kB)
(XEN) SRAT: PXM 0 -> APIC 0 -> Node 0
(XEN) SRAT: PXM 1 -> APIC 32 -> Node 1
(XEN) SRAT: PXM 0 -> APIC 2 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 4 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 16 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 18 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 20 -> Node 0
(XEN) SRAT: PXM 1 -> APIC 34 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 36 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 48 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 50 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 52 -> Node 1
(XEN) SRAT: PXM 0 -> APIC 1 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 3 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 5 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 17 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 19 -> Node 0
(XEN) SRAT: PXM 0 -> APIC 21 -> Node 0
(XEN) SRAT: PXM 1 -> APIC 33 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 35 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 37 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 49 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 51 -> Node 1
(XEN) SRAT: PXM 1 -> APIC 53 -> Node 1
(XEN) SRAT: Node 0 PXM 0 0-c0000000
(XEN) SRAT: Node 0 PXM 0 100000000-c40000000
(XEN) SRAT: Node 1 PXM 1 c40000000-1840000000
(XEN) NUMA: Allocated memnodemap from 183db0f000 - 183db10000
(XEN) NUMA: Using 18 for the hash shift.
(XEN) Domain heap initialised DMA width 32 bits
(XEN) vesafb: framebuffer at 0xfb000000, mapped to 0xffff82c000000000, using 4096k, total 8192k
(XEN) vesafb: mode is 1280x1024x16, linelength=2560, font 8x16
(XEN) vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0
(XEN) found SMP MP-table at 000ff780
(XEN) DMI present.
(XEN) Using APIC driver default
(XEN) ACPI: PM-Timer IO Port: 0x808
(XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[804,0], pm1x_evt[800,0]
(XEN) ACPI:                  wakeup_vec[bf79e00c], vec_size[20]
(XEN) ACPI: Local APIC address 0xfee00000
(XEN) ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
(XEN) Processor #0 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled)
(XEN) Processor #2 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled)
(XEN) Processor #4 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x04] lapic_id[0x10] enabled)
(XEN) Processor #16 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x05] lapic_id[0x12] enabled)
(XEN) Processor #18 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x06] lapic_id[0x14] enabled)
(XEN) Processor #20 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x07] lapic_id[0x20] enabled)
(XEN) Processor #32 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x08] lapic_id[0x22] enabled)
(XEN) Processor #34 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x09] lapic_id[0x24] enabled)
(XEN) Processor #36 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x30] enabled)
(XEN) Processor #48 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x32] enabled)
(XEN) Processor #50 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x34] enabled)
(XEN) Processor #52 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x01] enabled)
(XEN) Processor #1 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x03] enabled)
(XEN) Processor #3 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x05] enabled)
(XEN) Processor #5 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x10] lapic_id[0x11] enabled)
(XEN) Processor #17 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x11] lapic_id[0x13] enabled)
(XEN) Processor #19 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x12] lapic_id[0x15] enabled)
(XEN) Processor #21 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x13] lapic_id[0x21] enabled)
(XEN) Processor #33 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x14] lapic_id[0x23] enabled)
(XEN) Processor #35 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x15] lapic_id[0x25] enabled)
(XEN) Processor #37 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x16] lapic_id[0x31] enabled)
(XEN) Processor #49 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x17] lapic_id[0x33] enabled)
(XEN) Processor #51 6:12 APIC version 21
(XEN) ACPI: LAPIC (acpi_id[0x18] lapic_id[0x35] enabled)
(XEN) Processor #53 6:12 APIC version 21
(XEN) ACPI: LAPIC_NMI (acpi_id[0xff] high level lint[0x1])
(XEN) Overriding APIC driver with bigsmp
(XEN) ACPI: IOAPIC (id[0x06] address[0xfec00000] gsi_base[0])
(XEN) IOAPIC[0]: apic_id 6, version 32, address 0xfec00000, GSI 0-23
(XEN) ACPI: IOAPIC (id[0x07] address[0xfec8a000] gsi_base[24])
(XEN) IOAPIC[1]: apic_id 7, version 32, address 0xfec8a000, GSI 24-47
(XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
(XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
(XEN) ACPI: IRQ0 used by override.
(XEN) ACPI: IRQ2 used by override.
(XEN) ACPI: IRQ9 used by override.
(XEN) Enabling APIC mode:  Phys.  Using 2 I/O APICs
(XEN) ACPI: HPET id: 0x8086a301 base: 0xfed00000
(XEN) PCI: MCFG configuration 0: base e0000000 segment 0 buses 0 - 255
(XEN) PCI: MCFG area at e0000000 reserved in E820
(XEN) ERST table is invalid
(XEN) Using ACPI (MADT) for SMP configuration information
(XEN) IRQ limits: 48 GSI, 4576 MSI/MSI-X
(XEN) Using scheduler: SMP Credit Scheduler (credit)
(XEN) Detected 2400.177 MHz processor.
(XEN) Initing memory sharing.
(XEN) mce_intel.c:1214: MCA Capability: BCAST 1 SER 0 CMCI 1 firstbank 0 extended MCE MSR 0
(XEN) Intel machine check reporting enabled
(XEN) Intel VT-d Snoop Control enabled.
(XEN) Intel VT-d Dom0 DMA Passthrough not enabled.
(XEN) Intel VT-d Queued Invalidation enabled.
(XEN) Intel VT-d Interrupt Remapping enabled.
(XEN) Intel VT-d Shared EPT tables not enabled.
(XEN) I/O virtualisation enabled
(XEN)  - Dom0 mode: Relaxed
(XEN) Enabled directed EOI with ioapic_ack_old on!
(XEN) ENABLING IO-APIC IRQs
(XEN)  -> Using old ACK method
(XEN) ..TIMER: vector=0xF0 apic1=0 pin1=2 apic2=-1 pin2=-1
(XEN) Platform timer is 14.318MHz HPET
(XEN) Defaulting to alternative key handling; send \047A\047 to switch to normal mode.
(XEN) Allocated console ring of 256 KiB.
(XEN) VMX: Supported advanced features:
(XEN)  - APIC MMIO access virtualisation
(XEN)  - APIC TPR shadow
(XEN)  - Extended Page Tables (EPT)
(XEN)  - Virtual-Processor Identifiers (VPID)
(XEN)  - Virtual NMI
(XEN)  - MSR direct-access bitmap
(XEN)  - Unrestricted Guest
(XEN) EPT supports 1GB super page.
(XEN) EPT supports 2MB super page.
(XEN) HVM: ASIDs enabled.
(XEN) HVM: VMX enabled
(XEN) HVM: Hardware Assisted Paging detected.
(XEN) Brought up 24 CPUs
(XEN) ACPI sleep modes: S3
(XEN) mcheck_poll: Machine check polling timer started.
(XEN) *** LOADING DOMAIN 0 ***
(XEN) elf_parse_binary: phdr: paddr=0x2000 memsz=0x7cc000
(XEN) elf_parse_binary: phdr: paddr=0x7ce000 memsz=0x634d0
(XEN) elf_parse_binary: phdr: paddr=0x832000 memsz=0x888
(XEN) elf_parse_binary: phdr: paddr=0x833000 memsz=0xaa80
(XEN) elf_parse_binary: phdr: paddr=0x83e000 memsz=0x157000
(XEN) elf_parse_binary: memory: 0x2000 -> 0x995000
(XEN) elf_xen_parse_note: GUEST_OS = "linux"
(XEN) elf_xen_parse_note: GUEST_VERSION = "2.6"
(XEN) elf_xen_parse_note: XEN_VERSION = "xen-3.0"
(XEN) elf_xen_parse_note: VIRT_BASE = 0xffffffff80000000
(XEN) elf_xen_parse_note: PADDR_OFFSET = 0x0
(XEN) elf_xen_parse_note: ENTRY = 0xffffffff80002000
(XEN) elf_xen_parse_note: HYPERCALL_PAGE = 0xffffffff80003000
(XEN) elf_xen_parse_note: unknown xen elf note (0xd)
(XEN) elf_xen_parse_note: MOD_START_PFN = 0x1
(XEN) elf_xen_parse_note: INIT_P2M = 0xffffea0000000000
(XEN) elf_xen_parse_note: FEATURES = "writable_page_tables|writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel"
(XEN) elf_xen_parse_note: LOADER = "generic"
(XEN) elf_xen_parse_note: SUSPEND_CANCEL = 0x1
(XEN) elf_xen_addr_calc_check: addresses:
(XEN)     virt_base        = 0xffffffff80000000
(XEN)     elf_paddr_offset = 0x0
(XEN)     virt_offset      = 0xffffffff80000000
(XEN)     virt_kstart      = 0xffffffff80002000
(XEN)     virt_kend        = 0xffffffff80995000
(XEN)     virt_entry       = 0xffffffff80002000
(XEN)     p2m_base         = 0xffffea0000000000
(XEN)  Xen  kernel: 64-bit, lsb, compat32
(XEN)  Dom0 kernel: 64-bit, lsb, paddr 0x2000 -> 0x995000
(XEN) PHYSICAL MEMORY ARRANGEMENT:
(XEN)  Dom0 alloc.:   0000001803000000->0000001804000000 (24798061 pages to be allocated)
(XEN)  Init. ramdisk: 000000183e7b0000->000000183ffff800
(XEN) VIRTUAL MEMORY ARRANGEMENT:
(XEN)  Loaded kernel: ffffffff80002000->ffffffff80995000
(XEN)  Init. ramdisk: 0000000000000000->0000000000000000
(XEN)  Phys-Mach map: ffffea0000000000->ffffea000bd45de8
(XEN)  Start info:    ffffffff80995000->ffffffff809954b4
(XEN)  Page tables:   ffffffff80996000->ffffffff8099f000
(XEN)  Boot stack:    ffffffff8099f000->ffffffff809a0000
(XEN)  TOTAL:         ffffffff80000000->ffffffff80c00000
(XEN)  ENTRY ADDRESS: ffffffff80002000
(XEN) Dom0 has maximum 24 VCPUs
(XEN) elf_load_binary: phdr 0 at 0xffffffff80002000 -> 0xffffffff807ce000
(XEN) elf_load_binary: phdr 1 at 0xffffffff807ce000 -> 0xffffffff808314d0
(XEN) elf_load_binary: phdr 2 at 0xffffffff80832000 -> 0xffffffff80832888
(XEN) elf_load_binary: phdr 3 at 0xffffffff80833000 -> 0xffffffff8083da80
(XEN) elf_load_binary: phdr 4 at 0xffffffff8083e000 -> 0xffffffff80899000
(XEN) Scrubbing Free RAM: .done.
(XEN) Std. Loglevel: All
(XEN) Guest Loglevel: All
(XEN) Xen is relinquishing VGA console.
(XEN) *** Serial input -> DOM0 (type \047CTRL-a\047 three times to switch input to Xen)
(XEN) Freed 244kB init memory.
(XEN) PCI add device 00:01.0
(XEN) PCI add device 00:02.0
(XEN) PCI add device 00:03.0
(XEN) PCI add device 00:07.0
(XEN) PCI add device 00:08.0
(XEN) PCI add device 00:09.0
(XEN) PCI add device 00:0a.0
(XEN) PCI add device 00:1c.0
(XEN) PCI add device 00:1c.4
(XEN) PCI add device 00:1c.5
(XEN) PCI add device 00:1f.2
(XEN) PCI add device 00:1f.5
(XEN) PCI add device 00:1a.7
(XEN) PCI add device 00:1d.7
(XEN) PCI add device 00:1a.0
(XEN) PCI add device 00:1a.1
(XEN) PCI add device 00:1d.0
(XEN) PCI add device 00:1d.1
(XEN) PCI add device 00:1d.2
(XEN) PCI add device 00:1d.3
(XEN) PCI add device 00:16.0
(XEN) PCI add device 00:16.1
(XEN) PCI add device 00:16.2
(XEN) PCI add device 00:16.3
(XEN) PCI add device 00:16.4
(XEN) PCI add device 00:16.5
(XEN) PCI add device 00:16.6
(XEN) PCI add device 00:16.7
(XEN) PCI add device 00:01.0
(XEN) PCI add device 00:02.0
(XEN) PCI add device 00:03.0
(XEN) PCI add device 00:07.0
(XEN) PCI add device 00:08.0
(XEN) PCI add device 00:09.0
(XEN) PCI add device 00:0a.0
(XEN) PCI add device 00:1c.0
(XEN) PCI add device 00:1c.4
(XEN) PCI add device 00:1c.5
(XEN) PCI add device 00:14.0
(XEN) PCI add device 00:1f.3
(XEN) PCI add device 03:00.0
(XEN) PCI add device 02:00.0
(XEN) mtrr: type mismatch for fb000000,800000 old: write-back new: write-combining
(XEN) memory.c:133:d0 Could not allocate order=18 extent: id=2 memflags=0 (0 of 1)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (2 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 4)
(XEN) memory.c:133:d0 Could not allocate order=9 extent: id=2 memflags=0 (0 of 2)
(XEN) HVM2: HVM Loader
(XEN) HVM2: Detected Xen v4.2-unstable
(XEN) HVM2: Xenbus rings @0xfeffc000, event channel 5
(XEN) HVM2: System requested ROMBIOS
(XEN) HVM2: CPU speed is 2400 MHz
(XEN) irq.c:264: Dom2 PCI link 0 changed 0 -> 5
(XEN) HVM2: PCI-ISA link 0 routed to IRQ5
(XEN) irq.c:264: Dom2 PCI link 1 changed 0 -> 10
(XEN) HVM2: PCI-ISA link 1 routed to IRQ10
(XEN) irq.c:264: Dom2 PCI link 2 changed 0 -> 11
(XEN) HVM2: PCI-ISA link 2 routed to IRQ11
(XEN) irq.c:264: Dom2 PCI link 3 changed 0 -> 5
(XEN) HVM2: PCI-ISA link 3 routed to IRQ5
(XEN) HVM2: pci dev 01:2 INTD->IRQ5
(XEN) HVM2: pci dev 01:3 INTA->IRQ10
(XEN) HVM2: pci dev 03:0 INTA->IRQ5
(XEN) HVM2: pci dev 04:0 INTA->IRQ5
(XEN) HVM2: pci dev 05:0 INTA->IRQ10
(XEN) HVM2: pci dev 06:0 INTA->IRQ11
(XEN) HVM2: pci dev 07:0 INTA->IRQ5
(XEN) HVM2: pci dev 02:0 bar 10 size 02000000: f0000008
(XEN) HVM2: pci dev 03:0 bar 14 size 01000000: f2000008
(XEN) HVM2: pci dev 04:0 bar 10 size 00020000: f3000000
(XEN) HVM2: pci dev 05:0 bar 10 size 00020000: f3020000
(XEN) HVM2: pci dev 06:0 bar 10 size 00020000: f3040000
(XEN) HVM2: pci dev 07:0 bar 10 size 00020000: f3060000
(XEN) HVM2: pci dev 02:0 bar 14 size 00001000: f3080000
(XEN) HVM2: pci dev 03:0 bar 10 size 00000100: 0000c001
(XEN) HVM2: pci dev 04:0 bar 14 size 00000040: 0000c101
(XEN) HVM2: pci dev 05:0 bar 14 size 00000040: 0000c141
(XEN) HVM2: pci dev 06:0 bar 14 size 00000040: 0000c181
(XEN) HVM2: pci dev 07:0 bar 14 size 00000040: 0000c1c1
(XEN) HVM2: pci dev 01:2 bar 20 size 00000020: 0000c201
(XEN) HVM2: pci dev 01:1 bar 20 size 00000010: 0000c221
(XEN) HVM2: Multiprocessor initialisation:
(XEN) HVM2:  - CPU0 ... 40-bit phys ... fixed MTRRs ... var MTRRs [2/8] ... done.
(XEN) HVM2:  - CPU1 ... 40-bit phys ... fixed MTRRs ... var MTRRs [2/8] ... done.
(XEN) HVM2:  - CPU2 ... 40-bit phys ... fixed MTRRs ... var MTRRs [2/8] ... done.
(XEN) HVM2:  - CPU3 ... 40-bit phys ... fixed MTRRs ... var MTRRs [2/8] ... done.
(XEN) HVM2: Testing HVM environment:
(XEN) HVM2:  - REP INSB across page boundaries ... passed
(XEN) HVM2:  - GS base MSRs and SWAPGS ... passed
(XEN) HVM2: Passed 2 of 2 tests
(XEN) HVM2: Writing SMBIOS tables ...
(XEN) HVM2: Loading ROMBIOS ...
(XEN) HVM2: 9852 bytes of ROMBIOS high-memory extensions:
(XEN) HVM2:   Relocating to 0xfc000000-0xfc00267c ... done
(XEN) HVM2: Creating MP tables ...
(XEN) HVM2: Loading Cirrus VGABIOS ...
(XEN) HVM2: Loading PCI Option ROM ...
(XEN) HVM2:  - Manufacturer: http://etherboot.org
(XEN) HVM2:  - Product name: gPXE
(XEN) HVM2: Loading ACPI ...
(XEN) HVM2: vm86 TSS at fc012880
(XEN) HVM2: BIOS map:
(XEN) HVM2:  c0000-c8fff: VGA BIOS
(XEN) HVM2:  c9000-dafff: Etherboot ROM
(XEN) HVM2:  f0000-fffff: Main BIOS
(XEN) HVM2: E820 table:
(XEN) HVM2:  [00]: 00000000:00000000 - 00000000:0009e000: RAM
(XEN) HVM2:  [01]: 00000000:0009e000 - 00000000:000a0000: RESERVED
(XEN) HVM2:  HOLE: 00000000:000a0000 - 00000000:000e0000
(XEN) HVM2:  [02]: 00000000:000e0000 - 00000000:00100000: RESERVED
(XEN) HVM2:  [03]: 00000000:00100000 - 00000000:f0000000: RAM
(XEN) HVM2:  HOLE: 00000000:f0000000 - 00000000:fc000000
(XEN) HVM2:  [04]: 00000000:fc000000 - 00000001:00000000: RESERVED
(XEN) HVM2:  [05]: 00000001:00000000 - 00000002:10400000: RAM
(XEN) HVM2: Invoking ROMBIOS ...
(XEN) HVM2: $Revision: 1.221 $ $Date: 2008/12/07 17:32:29 $
(XEN) stdvga.c:147:d2 entering stdvga and caching modes
(XEN) HVM2: VGABios $Id: vgabios.c,v 1.67 2008/01/27 09:44:12 vruppert Exp $
(XEN) HVM2: Bochs BIOS - build: 06/23/99
(XEN) HVM2: $Revision: 1.221 $ $Date: 2008/12/07 17:32:29 $
(XEN) HVM2: Options: apmbios pcibios eltorito PMM 
(XEN) HVM2: 
(XEN) HVM2: ata0-0: PCHS=16383/16/63 translation=lba LCHS=1024/255/63
(XEN) HVM2: ata0 master: QEMU HARDDISK ATA-7 Hard-Disk ( 250 GBytes)
(XEN) HVM2: IDE time out
(XEN) HVM2: ata1 master: QEMU DVD-ROM ATAPI-4 CD-Rom/DVD-Rom
(XEN) HVM2: IDE time out
(XEN) HVM2: 
(XEN) HVM2: 
(XEN) HVM2: 
(XEN) HVM2: Press F12 for boot menu.
(XEN) HVM2: 
(XEN) HVM2: Booting from CD-Rom...
(XEN) HVM2: 2895MB medium detected
(XEN) HVM2: Booting from 0000:7c00
(XEN) stdvga.c:151:d2 leaving stdvga
(XEN) stdvga.c:147:d2 entering stdvga and caching modes
(XEN) HVM2: IDE time out
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=81
(XEN) HVM2: int13_harddisk: function 08, unmapped device for ELDL=81
(XEN) HVM2: *** int 15h function AX=00c0, BX=0000 not yet supported!
(XEN) HVM2: *** int 15h function AX=ec00, BX=0002 not yet supported!
(XEN) HVM2: KBD: unsupported int 16h function 03
(XEN) HVM2: *** int 15h function AX=e980, BX=0000 not yet supported!
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=81
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=81
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=82
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=82
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=83
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=83
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=84
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=84
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=85
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=85
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=86
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=86
(XEN) HVM2: int13_harddisk: function 41, unmapped device for ELDL=87
(XEN) HVM2: int13_harddisk: function 02, unmapped device for ELDL=87
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 88
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 88
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 89
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 89
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8a
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8a
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8b
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8b
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8c
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8c
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8d
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8d
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8e
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8e
(XEN) HVM2: int13_harddisk: function 41, ELDL out of range 8f
(XEN) HVM2: int13_harddisk: function 02, ELDL out of range 8f
(XEN) stdvga.c:151:d2 leaving stdvga
(XEN) irq.c:264: Dom2 PCI link 0 changed 5 -> 0
(XEN) irq.c:264: Dom2 PCI link 1 changed 10 -> 0
(XEN) irq.c:264: Dom2 PCI link 2 changed 11 -> 0
(XEN) irq.c:264: Dom2 PCI link 3 changed 5 -> 0
(XEN) traps.c:3074: GPF (0000): ffff82c4801c6f34 -> ffff82c4802166c5
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001dfb26000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1dfb26000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5793000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5793000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f5713000 not the same as current vmcs 00000001f151a000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied
(XEN) vvmx.c:1182:d2 vmclear gpa 1f151a000 not the same as current vmcs 00000001f5713000
(XEN) appropiate debug message to indicate tim\047s patch is applied

[-- Attachment #8: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26 10:00                                     ` Tim Deegan
@ 2011-07-26 10:11                                       ` Tim Deegan
  2011-07-26 10:46                                         ` Jeroen Groenewegen van der Weyden
  2011-07-26 11:05                                       ` Jeroen Groenewegen van der Weyden
  1 sibling, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 10:11 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

At 11:00 +0100 on 26 Jul (1311678018), Tim Deegan wrote:
> If you want to double-check that you've done the patch right,
> edit xen/arch/x86/hvm/vmx/vvmx.c, and at line 1185, just under the line
> ` /* Even if this VMCS isn't the current one, we must clear it. */ '
> add a line ` printk("boo!\n"); '.  Then when you recompile and test you
> should see "boo!" printed just after each "vvmx.c:1182:d3" line on the
> console.

Oh, and when the domU is hung, can you run the command 
/usr/lib/xen/bin/xenctx -aCS 1 
(replacing '1' with the domid of your domU) three or four times 
and post the output here?  On a 64-bit dom0 I think the correct path
will be /usr/lib64/xen/bin/xenctx.

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-26  7:15                                   ` Jeroen Groenewegen van der Weyden
@ 2011-07-26 10:00                                     ` Tim Deegan
  2011-07-26 10:11                                       ` Tim Deegan
  2011-07-26 11:05                                       ` Jeroen Groenewegen van der Weyden
  0 siblings, 2 replies; 74+ messages in thread
From: Tim Deegan @ 2011-07-26 10:00 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Hi, 

At 09:15 +0200 on 26 Jul (1311671730), Jeroen Groenewegen van der Weyden wrote:
> I think the behaviour is still the same,
> 
> 1) cs23726
> 2) vvmc.c patched with attachment.
> 3) new compile
> 
> after a little while the domu becomes ir-responsive.

Dang. :(

> with xm dmesg I see a lot of these:
> (XEN) vvmx.c:1182:d3 vmclear gpa 1f5a89000 not the same as current
> vmcs 00000001f448f000
> (XEN) vvmx.c:1182:d3 vmclear gpa 1f5a89000 not the same as current
> vmcs 00000001f448f000

Yeah; with the patch applied, those should be harmlesss.

If you give your first-level guest only one vcpu, does the problem go
away?

> Note: I have to say, patching this on this level is not common
> practice for me. although I think I did it the right way. please
> keep in mind I can make mistakes on this level.

If you want to double-check that you've done the patch right,
edit xen/arch/x86/hvm/vmx/vvmx.c, and at line 1185, just under the line
` /* Even if this VMCS isn't the current one, we must clear it. */ '
add a line ` printk("boo!\n"); '.  Then when you recompile and test you
should see "boo!" printed just after each "vvmx.c:1182:d3" line on the
console.

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-25 16:16                                 ` Tim Deegan
@ 2011-07-26  7:15                                   ` Jeroen Groenewegen van der Weyden
  2011-07-26 10:00                                     ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-26  7:15 UTC (permalink / raw)
  To: Tim Deegan; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Hi Tim,

I think the behaviour is still the same,

1) cs23726
2) vvmc.c patched with attachment.
3) new compile

after a little while the domu becomes ir-responsive.

with xm dmesg I see a lot of these:
(XEN) vvmx.c:1182:d3 vmclear gpa 1f5a89000 not the same as current vmcs 
00000001f448f000
(XEN) vvmx.c:1182:d3 vmclear gpa 1f5a89000 not the same as current vmcs 
00000001f448f000


Note: I have to say, patching this on this level is not common practice 
for me. although I think I did it the right way. please keep in mind I 
can make mistakes on this level.

mfg,
Jeroen.

Op 25-7-2011 18:16, Tim Deegan schreef:
> Hi,
>
> At 15:08 +0100 on 25 Jul (1311606523), Tim Deegan wrote:
>> FWIW, I can reproduce this with a Debian 2.6.32-5-686 n1 guest on
>> current unstable tip.  Running two copies of 'kvm' inside that
>> (i.e. simple n2s without any disks) I see this on the n0 console:
>>
>> (XEN) vvmx.c:1181:d1 vmclear gpa 3661d000 not the same as current vmcs 0000000036459000
>> (XEN) vvmx.c:1181:d1 vmclear gpa 36459000 not the same as current vmcs 000000003661d000
>>
>> and the n1 guest locks up using 100% cpu on one of its vcpus.
> AFAICS when KVM has two VMs sharing a CPU, it just switches between them
> with VMPTRLD, rather than VMCLEARing the current one on every context
> switch.  When it migrates one of them away, it VMCLEARs it, even if it's
> not the most recently loaded VMCS.
>
> Xen's emulation of VMCLEAR doesn't clear the 'launched' bit in this
> case, though the SDM says it should.  The attached patch fixes the hang
> for me, but has had only very light testing (i.e. I haven't checked that
> proper OSes running inside the KVM VMs behave correctly).
>
> Eddie, does this look right to you?
>
> Jeroen, can you try it and see if it fixes your problems?
>
> Cheers,
>
> Tim.
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-25 14:08                               ` Tim Deegan
@ 2011-07-25 16:16                                 ` Tim Deegan
  2011-07-26  7:15                                   ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-25 16:16 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

[-- Attachment #1: Type: text/plain, Size: 1290 bytes --]

Hi, 

At 15:08 +0100 on 25 Jul (1311606523), Tim Deegan wrote:
> FWIW, I can reproduce this with a Debian 2.6.32-5-686 n1 guest on
> current unstable tip.  Running two copies of 'kvm' inside that
> (i.e. simple n2s without any disks) I see this on the n0 console:
> 
> (XEN) vvmx.c:1181:d1 vmclear gpa 3661d000 not the same as current vmcs 0000000036459000
> (XEN) vvmx.c:1181:d1 vmclear gpa 36459000 not the same as current vmcs 000000003661d000
> 
> and the n1 guest locks up using 100% cpu on one of its vcpus. 

AFAICS when KVM has two VMs sharing a CPU, it just switches between them
with VMPTRLD, rather than VMCLEARing the current one on every context
switch.  When it migrates one of them away, it VMCLEARs it, even if it's
not the most recently loaded VMCS.

Xen's emulation of VMCLEAR doesn't clear the 'launched' bit in this
case, though the SDM says it should.  The attached patch fixes the hang
for me, but has had only very light testing (i.e. I haven't checked that
proper OSes running inside the KVM VMs behave correctly).

Eddie, does this look right to you?

Jeroen, can you try it and see if it fixes your problems?

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

[-- Attachment #2: vmclear --]
[-- Type: text/plain, Size: 1232 bytes --]

Nested VMX: always mark VVMCS as not-launched on VMCLEAR.

The SDM says to flush changes and clear the launch state even if this
isn't the "current VMCS", and KVM seems to rely on this behaviour.

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>

diff -r 9dbbf1631193 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Mon Jul 25 14:21:13 2011 +0100
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Mon Jul 25 17:16:01 2011 +0100
@@ -1162,6 +1162,7 @@ int nvmx_handle_vmclear(struct cpu_user_
     struct vmx_inst_decoded decode;
     struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v);
     unsigned long gpa = 0;
+    void *vvmcs;
     int rc;
 
     rc = decode_vmx_inst(regs, &decode, &gpa, 0);
@@ -1179,6 +1180,13 @@ int nvmx_handle_vmclear(struct cpu_user_
         gdprintk(XENLOG_WARNING, 
                  "vmclear gpa %lx not the same as current vmcs %"PRIpaddr"\n",
                  gpa, nvcpu->nv_vvmcxaddr);
+
+        /* Even if this VMCS isn't the current one, we must clear it. */
+        vvmcs = hvm_map_guest_frame_rw(gpa >> PAGE_SHIFT);
+        if ( vvmcs ) 
+            __set_vvmcs(vvmcs, NVMX_LAUNCH_STATE, 0);
+        hvm_unmap_guest_frame(vvmcs);
+
         vmreturn(regs, VMSUCCEED);
         goto out;
     }

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-20 14:12                             ` Jeroen Groenewegen van der Weyden
@ 2011-07-25 14:08                               ` Tim Deegan
  2011-07-25 16:16                                 ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-25 14:08 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, Dong, Eddie

Hi, 


At 16:12 +0200 on 20 Jul (1311178333), Jeroen Groenewegen van der Weyden wrote:
> in short: HW ->    dom0 opensuse 11.4(xen-cs23728) ->   domU (HVM-sles11sp1) KVM ->    4 time kvm guest
> 
> dom0
> opensuse 11.4 x86
> kernel 2.6.37.6-0.5-xen
> xen: unstable cs 23728
> 
> - domu (HVM)
> - sles11sp1
> - mem: 8 GB
> - vcpu: 4
> - kvm

FWIW, I can reproduce this with a Debian 2.6.32-5-686 n1 guest on
current unstable tip.  Running two copies of 'kvm' inside that
(i.e. simple n2s without any disks) I see this on the n0 console:

(XEN) vvmx.c:1181:d1 vmclear gpa 3661d000 not the same as current vmcs 0000000036459000
(XEN) vvmx.c:1181:d1 vmclear gpa 36459000 not the same as current vmcs 000000003661d000

and the n1 guest locks up using 100% cpu on one of its vcpus. 

Reducing the n1 guest to only 1 VCPU works around the issue, though I
still see one of those complaints about vmclear, so that might be a red
herring.

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-20 13:44                           ` Dong, Eddie
@ 2011-07-20 14:12                             ` Jeroen Groenewegen van der Weyden
  2011-07-25 14:08                               ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-20 14:12 UTC (permalink / raw)
  To: Dong, Eddie; +Cc: Christoph.Egger, xen-devel, Tim Deegan

Eddie, Here my setup,

in short: HW ->    dom0 opensuse 11.4(xen-cs23728) ->   domU (HVM-sles11sp1) KVM ->    4 time kvm guest

dom0
opensuse 11.4 x86
kernel 2.6.37.6-0.5-xen
xen: unstable cs 23728

- domu (HVM)
- sles11sp1
- mem: 8 GB
- vcpu: 4
- kvm

--domu guests
--1) qemu-kvm: propetary OS
--2) qemu-kvm: propetary OS
--3) qemu-kvm: SLES10SP3
--4) qemu-kvm: SLES10SP3


mfg,
Jeroen

Op 20-7-2011 15:44, Dong, Eddie schreef:
> Hi Jeroen:
> 	What L1 guest do u use? Xen or KVM?
> Thx, Eddie
>
>> -----Original Message-----
>> From: Jeroen Groenewegen van der Weyden [mailto:groen692@grosc.com]
>> Sent: Tuesday, July 19, 2011 10:00 PM
>> To: Dong, Eddie
>> Cc: xen-devel@lists.xensource.com; Tim Deegan;
>> Christoph.Egger@amd.com
>> Subject: Re: [Xen-devel] [PATCH 20 of 20] n2 MSR handling and capability
>> exposure
>>
>> Hi eddie, I use the same settings. however my setup becomes in-response
>> after start of the second nested kvm quest. were does that leave us?
>> Should I make some trace and sent it to you. I can give you access to my
>> system as well if you want. just give me your thoughts on how to move
>> forward.
>>
>> mfg,
>> Jeroen.
>>
>> Op 18-7-2011 17:41, Dong, Eddie schreef:
>>> Jeroen:
>>> 	Sorry for later response.
>>> 	I did a double check locally, I was able to create 2 layer 2 guests. My
>> environment is L1 guest: 64 bits Linux 2.6.25 + KVM-76. One L2 guest is 32
>> bits Linux, another one is 64 bits guest.
>>> 	For layer 1 guest, I am setting:
>>>
>>> hap=1
>>> nestedhvm = 1
>>>
>>> Thx, Eddie
>>>
>>> _______________________________________________
>>> Xen-devel mailing list
>>> Xen-devel@lists.xensource.com
>>> http://lists.xensource.com/xen-devel
>>>
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-19 13:59                         ` Jeroen Groenewegen van der Weyden
@ 2011-07-20 13:44                           ` Dong, Eddie
  2011-07-20 14:12                             ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Dong, Eddie @ 2011-07-20 13:44 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden
  Cc: Tim, Christoph.Egger, xen-devel, Dong, Eddie, Deegan

Hi Jeroen:
	What L1 guest do u use? Xen or KVM? 
Thx, Eddie

> -----Original Message-----
> From: Jeroen Groenewegen van der Weyden [mailto:groen692@grosc.com]
> Sent: Tuesday, July 19, 2011 10:00 PM
> To: Dong, Eddie
> Cc: xen-devel@lists.xensource.com; Tim Deegan;
> Christoph.Egger@amd.com
> Subject: Re: [Xen-devel] [PATCH 20 of 20] n2 MSR handling and capability
> exposure
> 
> Hi eddie, I use the same settings. however my setup becomes in-response
> after start of the second nested kvm quest. were does that leave us?
> Should I make some trace and sent it to you. I can give you access to my
> system as well if you want. just give me your thoughts on how to move
> forward.
> 
> mfg,
> Jeroen.
> 
> Op 18-7-2011 17:41, Dong, Eddie schreef:
> > Jeroen:
> > 	Sorry for later response.
> > 	I did a double check locally, I was able to create 2 layer 2 guests. My
> environment is L1 guest: 64 bits Linux 2.6.25 + KVM-76. One L2 guest is 32
> bits Linux, another one is 64 bits guest.
> > 	For layer 1 guest, I am setting:
> >
> > hap=1
> > nestedhvm = 1
> >
> > Thx, Eddie
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com
> > http://lists.xensource.com/xen-devel
> >

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-18 15:41                       ` Dong, Eddie
@ 2011-07-19 13:59                         ` Jeroen Groenewegen van der Weyden
  2011-07-20 13:44                           ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-19 13:59 UTC (permalink / raw)
  To: Dong, Eddie; +Cc: Christoph.Egger, xen-devel, Tim Deegan

Hi eddie, I use the same settings. however my setup becomes in-response 
after start of the second nested kvm quest. were does that leave us? 
Should I make some trace and sent it to you. I can give you access to my 
system as well if you want. just give me your thoughts on how to move 
forward.

mfg,
Jeroen.

Op 18-7-2011 17:41, Dong, Eddie schreef:
> Jeroen:
> 	Sorry for later response.
> 	I did a double check locally, I was able to create 2 layer 2 guests. My environment is L1 guest: 64 bits Linux 2.6.25 + KVM-76. One L2 guest is 32 bits Linux, another one is 64 bits guest.
> 	For layer 1 guest, I am setting:
>
> hap=1
> nestedhvm = 1
>
> Thx, Eddie
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-08  7:12                     ` Jeroen Groenewegen van der Weyden
@ 2011-07-18 15:41                       ` Dong, Eddie
  2011-07-19 13:59                         ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Dong, Eddie @ 2011-07-18 15:41 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden, xen-devel, Tim Deegan,
	Christoph.Egger
  Cc: Dong, Eddie

Jeroen:
	Sorry for later response.
	I did a double check locally, I was able to create 2 layer 2 guests. My environment is L1 guest: 64 bits Linux 2.6.25 + KVM-76. One L2 guest is 32 bits Linux, another one is 64 bits guest.
	For layer 1 guest, I am setting: 

hap=1
nestedhvm = 1

Thx, Eddie

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-04  8:58                   ` Tim Deegan
  2011-07-04  9:58                     ` Jeroen Groenewegen van der Weyden
@ 2011-07-08  7:12                     ` Jeroen Groenewegen van der Weyden
  2011-07-18 15:41                       ` Dong, Eddie
  1 sibling, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-08  7:12 UTC (permalink / raw)
  To: xen-devel, eddie.dong, Tim Deegan, Christoph.Egger

Eddie, did I mention I'm eager and capable of testing anything you need.

mfg,
jeroen

Op 4-7-2011 10:58, Tim Deegan schreef:
> At 12:11 +0200 on 01 Jul (1309522280), Jeroen Groenewegen van der Weyden wrote:
>> Just a remark to avoid misunderstanding
>>
>> The first nested  KVM guest is running ok, for as long as i keep it running
>> When starting a second nested KVM guest (in the same Xen DOMU) that
>> is when the Xen DOMU becomes in-responsive. In DOM0 it it shown that
>> it is still running and consuming time.
>>
>>
>> The complete test is like this
>>
>> dom0
>> opensuse 11.4 x86
>> xen: unstable cs 23640
> You're testing on Intel hardware, right?
>
> Eddie, any comment?
>
> Tim.
>
>> domu1 (HVM)
>> sles11sp1
>> mem: 8 GB
>> vcpu: 4
>>
>> domu1 guests
>> 1) qemu-kvm: propetary OS
>> 2) qemu-kvm: propetary OS
>> 3) qemu-kvm: SLES10SP3
>> 4) qemu-kvm: SLES10SP3
>>
>> mfg,
>> Jeroen
>>
>> Op 1-7-2011 11:54, Christoph Egger schreef:
>>> KVM on Xen works for me. Also KVM on Xen on Xen.
>>>
>>> Christoph
>>>
>>>
>>> On 07/01/11 11:01, Tim Deegan wrote:
>>>> Eddie?  Did you test with KVM guests?  Is this expected to work?
>>>>
>>>> Tim.
>>>>
>>>> At 15:14 +0100 on 30 Jun (1309446872), Jeroen Groenewegen van
>>>> der Weyden wrote:
>>>>> Hi Tim/Eddi/Christoph,
>>>>>
>>>>> I just gave it a go again with cs23640. But the behaviour is still the
>>>>> same. so L1 becomes inresponsive after starting the second
>>>>> nested quest.
>>>>> I can deliver any trace input you want/need.
>>>>>
>>>>> mfg,
>>>>> Jeroen.
>>>>>
>>>>> Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
>>>>>> Hi,
>>>>>>
>>>>>> Based on these patch series, I gave it go.
>>>>>> I noticed until now that the system becomes in-responsive a few second
>>>>>> after activating the second nested guest.
>>>>>> steps:
>>>>>> 1) dom0 creates domu (pass)
>>>>>> 2) domU creates first kvm guest (pass)
>>>>>> 3) domU creates second kvm guest (fail)
>>>>>> after the third step the domu becomes in-responsive. eg no network /
>>>>>> vnc console response. in dom0 is shows domu is stil running.
>>>>>>
>>>>>> I'm able to provide any input needed, just tell me what you need (and
>>>>>> how).
>>>>>>
>>>>>> mfg,
>>>>>> Jeroen
>>>>>>
>>>>>> My HW setup
>>>>>> mobo asus z8nr-d12
>>>>>> proc: 2 times e5645
>>>>>> mem: 96 GB
>>>>>>
>>>>>> My goal/test
>>>>>> in short: HW ->   dom0 ->   domU ->   4 time kvm guest
>>>>>>
>>>>>> dom0
>>>>>> opensuse 11.4 x86
>>>>>> xen: unstable cs 23553
>>>>>>
>>>>>> domu (HVM)
>>>>>> sles11sp1
>>>>>> mem: 8 GB
>>>>>> vcpu: 4
>>>>>>
>>>>>> domu guests
>>>>>> 1) qemu-kvm: propetary OS
>>>>>> 2) qemu-kvm: propetary OS
>>>>>> 3) qemu-kvm: SLES10SP3
>>>>>> 4) qemu-kvm: SLES10SP3
>>>>>>
>>>>>>
>>>>>>
>>>>>> Op 15-6-2011 14:45, Tim Deegan schreef:
>>>>>>> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
>>>>>>>>>> +    case MSR_IA32_VMX_MISC:
>>>>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
>>>>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
>>>>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
>>>>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
>>>>>>>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
>>>>>>>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
>>>>>>>>> yet.\n", msr);
>>>>>>>>>
>>>>>>>>> Are you planning to fix this before checking in this series?  I'm
>>>>>>>>> pretty
>>>>>>>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be
>>>>>>>>> trivial, since you
>>>>>>>>> define your own VMCS format.
>>>>>>>>>
>>>>>>>> Sure, the updated patch is attached.
>>>>>>> Thanks.  I've applied the full series.  I cleaned up a few things for
>>>>>>> the 32-bit build as well.
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Tim.
>>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-04  8:58                   ` Tim Deegan
@ 2011-07-04  9:58                     ` Jeroen Groenewegen van der Weyden
  2011-07-08  7:12                     ` Jeroen Groenewegen van der Weyden
  1 sibling, 0 replies; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-04  9:58 UTC (permalink / raw)
  To: xen-devel, Tim Deegan, eddie.dong, Christoph.Egger

You're testing on Intel hardware, right?

- Yes, the proc is a Xeon e5645. Two of them on a asus z8nr-d12 mobo.

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-01 10:11                 ` Jeroen Groenewegen van der Weyden
@ 2011-07-04  8:58                   ` Tim Deegan
  2011-07-04  9:58                     ` Jeroen Groenewegen van der Weyden
  2011-07-08  7:12                     ` Jeroen Groenewegen van der Weyden
  0 siblings, 2 replies; 74+ messages in thread
From: Tim Deegan @ 2011-07-04  8:58 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, eddie.dong

At 12:11 +0200 on 01 Jul (1309522280), Jeroen Groenewegen van der Weyden wrote:
> Just a remark to avoid misunderstanding
> 
> The first nested  KVM guest is running ok, for as long as i keep it running
> When starting a second nested KVM guest (in the same Xen DOMU) that
> is when the Xen DOMU becomes in-responsive. In DOM0 it it shown that
> it is still running and consuming time.
> 
> 
> The complete test is like this
> 
> dom0
> opensuse 11.4 x86
> xen: unstable cs 23640

You're testing on Intel hardware, right?

Eddie, any comment?

Tim.

> domu1 (HVM)
> sles11sp1
> mem: 8 GB
> vcpu: 4
> 
> domu1 guests
> 1) qemu-kvm: propetary OS
> 2) qemu-kvm: propetary OS
> 3) qemu-kvm: SLES10SP3
> 4) qemu-kvm: SLES10SP3
> 
> mfg,
> Jeroen
> 
> Op 1-7-2011 11:54, Christoph Egger schreef:
> >
> >KVM on Xen works for me. Also KVM on Xen on Xen.
> >
> >Christoph
> >
> >
> >On 07/01/11 11:01, Tim Deegan wrote:
> >>Eddie?  Did you test with KVM guests?  Is this expected to work?
> >>
> >>Tim.
> >>
> >>At 15:14 +0100 on 30 Jun (1309446872), Jeroen Groenewegen van
> >>der Weyden wrote:
> >>>Hi Tim/Eddi/Christoph,
> >>>
> >>>I just gave it a go again with cs23640. But the behaviour is still the
> >>>same. so L1 becomes inresponsive after starting the second
> >>>nested quest.
> >>>I can deliver any trace input you want/need.
> >>>
> >>>mfg,
> >>>Jeroen.
> >>>
> >>>Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
> >>>>Hi,
> >>>>
> >>>>Based on these patch series, I gave it go.
> >>>>I noticed until now that the system becomes in-responsive a few second
> >>>>after activating the second nested guest.
> >>>>steps:
> >>>>1) dom0 creates domu (pass)
> >>>>2) domU creates first kvm guest (pass)
> >>>>3) domU creates second kvm guest (fail)
> >>>>after the third step the domu becomes in-responsive. eg no network /
> >>>>vnc console response. in dom0 is shows domu is stil running.
> >>>>
> >>>>I'm able to provide any input needed, just tell me what you need (and
> >>>>how).
> >>>>
> >>>>mfg,
> >>>>Jeroen
> >>>>
> >>>>My HW setup
> >>>>mobo asus z8nr-d12
> >>>>proc: 2 times e5645
> >>>>mem: 96 GB
> >>>>
> >>>>My goal/test
> >>>>in short: HW ->  dom0 ->  domU ->  4 time kvm guest
> >>>>
> >>>>dom0
> >>>>opensuse 11.4 x86
> >>>>xen: unstable cs 23553
> >>>>
> >>>>domu (HVM)
> >>>>sles11sp1
> >>>>mem: 8 GB
> >>>>vcpu: 4
> >>>>
> >>>>domu guests
> >>>>1) qemu-kvm: propetary OS
> >>>>2) qemu-kvm: propetary OS
> >>>>3) qemu-kvm: SLES10SP3
> >>>>4) qemu-kvm: SLES10SP3
> >>>>
> >>>>
> >>>>
> >>>>Op 15-6-2011 14:45, Tim Deegan schreef:
> >>>>>At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
> >>>>>>>>+    case MSR_IA32_VMX_MISC:
> >>>>>>>>+    case MSR_IA32_VMX_CR0_FIXED0:
> >>>>>>>>+    case MSR_IA32_VMX_CR0_FIXED1:
> >>>>>>>>+    case MSR_IA32_VMX_CR4_FIXED0:
> >>>>>>>>+    case MSR_IA32_VMX_CR4_FIXED1:
> >>>>>>>>+    case MSR_IA32_VMX_VMCS_ENUM:
> >>>>>>>>+        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
> >>>>>>>yet.\n", msr);
> >>>>>>>
> >>>>>>>Are you planning to fix this before checking in this series?  I'm
> >>>>>>>pretty
> >>>>>>>sure that at least MSR_IA32_VMX_VMCS_ENUM should be
> >>>>>>>trivial, since you
> >>>>>>>define your own VMCS format.
> >>>>>>>
> >>>>>>Sure, the updated patch is attached.
> >>>>>Thanks.  I've applied the full series.  I cleaned up a few things for
> >>>>>the 32-bit build as well.
> >>>>>
> >>>>>Cheers,
> >>>>>
> >>>>>Tim.
> >
> >
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-01  9:54               ` Christoph Egger
@ 2011-07-01 10:11                 ` Jeroen Groenewegen van der Weyden
  2011-07-04  8:58                   ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-07-01 10:11 UTC (permalink / raw)
  To: xen-devel, Tim Deegan, eddie.dong, Christoph.Egger

Just a remark to avoid misunderstanding

The first nested  KVM guest is running ok, for as long as i keep it running
When starting a second nested KVM guest (in the same Xen DOMU) that is 
when the Xen DOMU becomes in-responsive. In DOM0 it it shown that it is 
still running and consuming time.


The complete test is like this

dom0
opensuse 11.4 x86
xen: unstable cs 23640

domu1 (HVM)
sles11sp1
mem: 8 GB
vcpu: 4

domu1 guests
1) qemu-kvm: propetary OS
2) qemu-kvm: propetary OS
3) qemu-kvm: SLES10SP3
4) qemu-kvm: SLES10SP3

mfg,
Jeroen

Op 1-7-2011 11:54, Christoph Egger schreef:
>
> KVM on Xen works for me. Also KVM on Xen on Xen.
>
> Christoph
>
>
> On 07/01/11 11:01, Tim Deegan wrote:
>> Eddie?  Did you test with KVM guests?  Is this expected to work?
>>
>> Tim.
>>
>> At 15:14 +0100 on 30 Jun (1309446872), Jeroen Groenewegen van der 
>> Weyden wrote:
>>> Hi Tim/Eddi/Christoph,
>>>
>>> I just gave it a go again with cs23640. But the behaviour is still the
>>> same. so L1 becomes inresponsive after starting the second nested 
>>> quest.
>>> I can deliver any trace input you want/need.
>>>
>>> mfg,
>>> Jeroen.
>>>
>>> Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
>>>> Hi,
>>>>
>>>> Based on these patch series, I gave it go.
>>>> I noticed until now that the system becomes in-responsive a few second
>>>> after activating the second nested guest.
>>>> steps:
>>>> 1) dom0 creates domu (pass)
>>>> 2) domU creates first kvm guest (pass)
>>>> 3) domU creates second kvm guest (fail)
>>>> after the third step the domu becomes in-responsive. eg no network /
>>>> vnc console response. in dom0 is shows domu is stil running.
>>>>
>>>> I'm able to provide any input needed, just tell me what you need (and
>>>> how).
>>>>
>>>> mfg,
>>>> Jeroen
>>>>
>>>> My HW setup
>>>> mobo asus z8nr-d12
>>>> proc: 2 times e5645
>>>> mem: 96 GB
>>>>
>>>> My goal/test
>>>> in short: HW ->  dom0 ->  domU ->  4 time kvm guest
>>>>
>>>> dom0
>>>> opensuse 11.4 x86
>>>> xen: unstable cs 23553
>>>>
>>>> domu (HVM)
>>>> sles11sp1
>>>> mem: 8 GB
>>>> vcpu: 4
>>>>
>>>> domu guests
>>>> 1) qemu-kvm: propetary OS
>>>> 2) qemu-kvm: propetary OS
>>>> 3) qemu-kvm: SLES10SP3
>>>> 4) qemu-kvm: SLES10SP3
>>>>
>>>>
>>>>
>>>> Op 15-6-2011 14:45, Tim Deegan schreef:
>>>>> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
>>>>>>>> +    case MSR_IA32_VMX_MISC:
>>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
>>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
>>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
>>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
>>>>>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
>>>>>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
>>>>>>> yet.\n", msr);
>>>>>>>
>>>>>>> Are you planning to fix this before checking in this series?  I'm
>>>>>>> pretty
>>>>>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, 
>>>>>>> since you
>>>>>>> define your own VMCS format.
>>>>>>>
>>>>>> Sure, the updated patch is attached.
>>>>> Thanks.  I've applied the full series.  I cleaned up a few things for
>>>>> the 32-bit build as well.
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Tim.
>
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-07-01  9:01             ` Tim Deegan
@ 2011-07-01  9:54               ` Christoph Egger
  2011-07-01 10:11                 ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Christoph Egger @ 2011-07-01  9:54 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, eddie.dong, Jeroen Groenewegen van der Weyden


KVM on Xen works for me. Also KVM on Xen on Xen.

Christoph


On 07/01/11 11:01, Tim Deegan wrote:
> Eddie?  Did you test with KVM guests?  Is this expected to work?
>
> Tim.
>
> At 15:14 +0100 on 30 Jun (1309446872), Jeroen Groenewegen van der Weyden wrote:
>> Hi Tim/Eddi/Christoph,
>>
>> I just gave it a go again with cs23640. But the behaviour is still the
>> same. so L1 becomes inresponsive after starting the second nested quest.
>> I can deliver any trace input you want/need.
>>
>> mfg,
>> Jeroen.
>>
>> Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
>>> Hi,
>>>
>>> Based on these patch series, I gave it go.
>>> I noticed until now that the system becomes in-responsive a few second
>>> after activating the second nested guest.
>>> steps:
>>> 1) dom0 creates domu (pass)
>>> 2) domU creates first kvm guest (pass)
>>> 3) domU creates second kvm guest (fail)
>>> after the third step the domu becomes in-responsive. eg no network /
>>> vnc console response. in dom0 is shows domu is stil running.
>>>
>>> I'm able to provide any input needed, just tell me what you need (and
>>> how).
>>>
>>> mfg,
>>> Jeroen
>>>
>>> My HW setup
>>> mobo asus z8nr-d12
>>> proc: 2 times e5645
>>> mem: 96 GB
>>>
>>> My goal/test
>>> in short: HW ->  dom0 ->  domU ->  4 time kvm guest
>>>
>>> dom0
>>> opensuse 11.4 x86
>>> xen: unstable cs 23553
>>>
>>> domu (HVM)
>>> sles11sp1
>>> mem: 8 GB
>>> vcpu: 4
>>>
>>> domu guests
>>> 1) qemu-kvm: propetary OS
>>> 2) qemu-kvm: propetary OS
>>> 3) qemu-kvm: SLES10SP3
>>> 4) qemu-kvm: SLES10SP3
>>>
>>>
>>>
>>> Op 15-6-2011 14:45, Tim Deegan schreef:
>>>> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
>>>>>>> +    case MSR_IA32_VMX_MISC:
>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
>>>>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
>>>>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
>>>>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
>>>>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
>>>>>> yet.\n", msr);
>>>>>>
>>>>>> Are you planning to fix this before checking in this series?  I'm
>>>>>> pretty
>>>>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
>>>>>> define your own VMCS format.
>>>>>>
>>>>> Sure, the updated patch is attached.
>>>> Thanks.  I've applied the full series.  I cleaned up a few things for
>>>> the 32-bit build as well.
>>>>
>>>> Cheers,
>>>>
>>>> Tim.


-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Einsteinring 24, 85689 Dornach b. Muenchen
Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-30 14:14           ` Jeroen Groenewegen van der Weyden
@ 2011-07-01  9:01             ` Tim Deegan
  2011-07-01  9:54               ` Christoph Egger
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-07-01  9:01 UTC (permalink / raw)
  To: Jeroen Groenewegen van der Weyden; +Cc: Christoph.Egger, xen-devel, eddie.dong

Eddie?  Did you test with KVM guests?  Is this expected to work?

Tim.

At 15:14 +0100 on 30 Jun (1309446872), Jeroen Groenewegen van der Weyden wrote:
> Hi Tim/Eddi/Christoph,
> 
> I just gave it a go again with cs23640. But the behaviour is still the 
> same. so L1 becomes inresponsive after starting the second nested quest.
> I can deliver any trace input you want/need.
> 
> mfg,
> Jeroen.
> 
> Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
> > Hi,
> >
> > Based on these patch series, I gave it go.
> > I noticed until now that the system becomes in-responsive a few second 
> > after activating the second nested guest.
> > steps:
> > 1) dom0 creates domu (pass)
> > 2) domU creates first kvm guest (pass)
> > 3) domU creates second kvm guest (fail)
> > after the third step the domu becomes in-responsive. eg no network / 
> > vnc console response. in dom0 is shows domu is stil running.
> >
> > I'm able to provide any input needed, just tell me what you need (and 
> > how).
> >
> > mfg,
> > Jeroen
> >
> > My HW setup
> > mobo asus z8nr-d12
> > proc: 2 times e5645
> > mem: 96 GB
> >
> > My goal/test
> > in short: HW -> dom0 -> domU -> 4 time kvm guest
> >
> > dom0
> > opensuse 11.4 x86
> > xen: unstable cs 23553
> >
> > domu (HVM)
> > sles11sp1
> > mem: 8 GB
> > vcpu: 4
> >
> > domu guests
> > 1) qemu-kvm: propetary OS
> > 2) qemu-kvm: propetary OS
> > 3) qemu-kvm: SLES10SP3
> > 4) qemu-kvm: SLES10SP3
> >
> >
> >
> > Op 15-6-2011 14:45, Tim Deegan schreef:
> >> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
> >>>>> +    case MSR_IA32_VMX_MISC:
> >>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
> >>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
> >>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
> >>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
> >>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
> >>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
> >>>> yet.\n", msr);
> >>>>
> >>>> Are you planning to fix this before checking in this series?  I'm 
> >>>> pretty
> >>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
> >>>> define your own VMCS format.
> >>>>
> >>> Sure, the updated patch is attached.
> >> Thanks.  I've applied the full series.  I cleaned up a few things for
> >> the 32-bit build as well.
> >>
> >> Cheers,
> >>
> >> Tim.
> >>
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com
> > http://lists.xensource.com/xen-devel
> >
> 

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-20  6:31         ` Jeroen Groenewegen van der Weyden
@ 2011-06-30 14:14           ` Jeroen Groenewegen van der Weyden
  2011-07-01  9:01             ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-06-30 14:14 UTC (permalink / raw)
  To: xen-devel, Tim Deegan, Christoph.Egger, eddie.dong

Hi Tim/Eddi/Christoph,

I just gave it a go again with cs23640. But the behaviour is still the 
same. so L1 becomes inresponsive after starting the second nested quest.
I can deliver any trace input you want/need.

mfg,
Jeroen.

Op 20-6-2011 8:31, Jeroen Groenewegen van der Weyden schreef:
> Hi,
>
> Based on these patch series, I gave it go.
> I noticed until now that the system becomes in-responsive a few second 
> after activating the second nested guest.
> steps:
> 1) dom0 creates domu (pass)
> 2) domU creates first kvm guest (pass)
> 3) domU creates second kvm guest (fail)
> after the third step the domu becomes in-responsive. eg no network / 
> vnc console response. in dom0 is shows domu is stil running.
>
> I'm able to provide any input needed, just tell me what you need (and 
> how).
>
> mfg,
> Jeroen
>
> My HW setup
> mobo asus z8nr-d12
> proc: 2 times e5645
> mem: 96 GB
>
> My goal/test
> in short: HW -> dom0 -> domU -> 4 time kvm guest
>
> dom0
> opensuse 11.4 x86
> xen: unstable cs 23553
>
> domu (HVM)
> sles11sp1
> mem: 8 GB
> vcpu: 4
>
> domu guests
> 1) qemu-kvm: propetary OS
> 2) qemu-kvm: propetary OS
> 3) qemu-kvm: SLES10SP3
> 4) qemu-kvm: SLES10SP3
>
>
>
> Op 15-6-2011 14:45, Tim Deegan schreef:
>> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
>>>>> +    case MSR_IA32_VMX_MISC:
>>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
>>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
>>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
>>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
>>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
>>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
>>>> yet.\n", msr);
>>>>
>>>> Are you planning to fix this before checking in this series?  I'm 
>>>> pretty
>>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
>>>> define your own VMCS format.
>>>>
>>> Sure, the updated patch is attached.
>> Thanks.  I've applied the full series.  I cleaned up a few things for
>> the 32-bit build as well.
>>
>> Cheers,
>>
>> Tim.
>>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-15 12:45       ` Tim Deegan
@ 2011-06-20  6:31         ` Jeroen Groenewegen van der Weyden
  2011-06-30 14:14           ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Jeroen Groenewegen van der Weyden @ 2011-06-20  6:31 UTC (permalink / raw)
  To: xen-devel, eddie.dong, Tim Deegan

Hi,

Based on these patch series, I gave it go.
I noticed until now that the system becomes in-responsive a few second 
after activating the second nested guest.
steps:
1) dom0 creates domu (pass)
2) domU creates first kvm guest (pass)
3) domU creates second kvm guest (fail)
after the third step the domu becomes in-responsive. eg no network / vnc 
console response. in dom0 is shows domu is stil running.

I'm able to provide any input needed, just tell me what you need (and how).

mfg,
Jeroen

My HW setup
mobo asus z8nr-d12
proc: 2 times e5645
mem: 96 GB

My goal/test
in short: HW -> dom0 -> domU -> 4 time kvm guest

dom0
opensuse 11.4 x86
xen: unstable cs 23553

domu (HVM)
sles11sp1
mem: 8 GB
vcpu: 4

domu guests
1) qemu-kvm: propetary OS
2) qemu-kvm: propetary OS
3) qemu-kvm: SLES10SP3
4) qemu-kvm: SLES10SP3



Op 15-6-2011 14:45, Tim Deegan schreef:
> At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
>>>> +    case MSR_IA32_VMX_MISC:
>>>> +    case MSR_IA32_VMX_CR0_FIXED0:
>>>> +    case MSR_IA32_VMX_CR0_FIXED1:
>>>> +    case MSR_IA32_VMX_CR4_FIXED0:
>>>> +    case MSR_IA32_VMX_CR4_FIXED1:
>>>> +    case MSR_IA32_VMX_VMCS_ENUM:
>>>> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
>>> yet.\n", msr);
>>>
>>> Are you planning to fix this before checking in this series?  I'm pretty
>>> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
>>> define your own VMCS format.
>>>
>> Sure, the updated patch is attached.
> Thanks.  I've applied the full series.  I cleaned up a few things for
> the 32-bit build as well.
>
> Cheers,
>
> Tim.
>

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-14  2:29     ` Dong, Eddie
@ 2011-06-15 12:45       ` Tim Deegan
  2011-06-20  6:31         ` Jeroen Groenewegen van der Weyden
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-15 12:45 UTC (permalink / raw)
  To: Dong, Eddie; +Cc: xen-devel

At 10:29 +0800 on 14 Jun (1308047377), Dong, Eddie wrote:
> > > +    case MSR_IA32_VMX_MISC:
> > > +    case MSR_IA32_VMX_CR0_FIXED0:
> > > +    case MSR_IA32_VMX_CR0_FIXED1:
> > > +    case MSR_IA32_VMX_CR4_FIXED0:
> > > +    case MSR_IA32_VMX_CR4_FIXED1:
> > > +    case MSR_IA32_VMX_VMCS_ENUM:
> > > +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
> > yet.\n", msr);
> > 
> > Are you planning to fix this before checking in this series?  I'm pretty
> > sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
> > define your own VMCS format.
> > 
> 
> Sure, the updated patch is attached.

Thanks.  I've applied the full series.  I cleaned up a few things for
the 32-bit build as well.

Cheers,

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* RE: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-13  8:27   ` Tim Deegan
@ 2011-06-14  2:29     ` Dong, Eddie
  2011-06-15 12:45       ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Dong, Eddie @ 2011-06-14  2:29 UTC (permalink / raw)
  To: Tim Deegan; +Cc: xen-devel, Dong, Eddie

[-- Attachment #1: Type: text/plain, Size: 566 bytes --]

> > +    case MSR_IA32_VMX_MISC:
> > +    case MSR_IA32_VMX_CR0_FIXED0:
> > +    case MSR_IA32_VMX_CR0_FIXED1:
> > +    case MSR_IA32_VMX_CR4_FIXED0:
> > +    case MSR_IA32_VMX_CR4_FIXED1:
> > +    case MSR_IA32_VMX_VMCS_ENUM:
> > +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported
> yet.\n", msr);
> 
> Are you planning to fix this before checking in this series?  I'm pretty
> sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
> define your own VMCS format.
> 

Sure, the updated patch is attached.

Thx, Eddie

[-- Attachment #2: msr_capability --]
[-- Type: application/octet-stream, Size: 5950 bytes --]


n2 MSR handling and capability exposure

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 4242db588ea6 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Sun Jun 12 13:50:43 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Tue Jun 14 10:22:00 2011 +0800
@@ -1774,8 +1774,11 @@ static int vmx_msr_read_intercept(unsign
         *msr_content |= (u64)__vmread(GUEST_IA32_DEBUGCTL_HIGH) << 32;
 #endif
         break;
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_read_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     case MSR_IA32_MISC_ENABLE:
         rdmsrl(MSR_IA32_MISC_ENABLE, *msr_content);
         /* Debug Trace Store is not supported. */
@@ -1935,8 +1938,11 @@ static int vmx_msr_write_intercept(unsig
 
         break;
     }
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_write_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     default:
         if ( vpmu_do_wrmsr(msr, msr_content) )
             return X86EMUL_OKAY;
diff -r 4242db588ea6 xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Sun Jun 12 13:50:43 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Tue Jun 14 10:22:00 2011 +0800
@@ -22,6 +22,7 @@
 
 #include <xen/config.h>
 #include <asm/types.h>
+#include <asm/mtrr.h>
 #include <asm/p2m.h>
 #include <asm/hvm/vmx/vmx.h>
 #include <asm/hvm/vmx/vvmx.h>
@@ -1230,6 +1231,113 @@ int nvmx_handle_vmwrite(struct cpu_user_
     return X86EMUL_OKAY;
 }
 
+/*
+ * Capability reporting
+ */
+int nvmx_msr_read_intercept(unsigned int msr, u64 *msr_content)
+{
+    u64 data = 0, tmp;
+    int r = 1;
+
+    if ( !nestedhvm_enabled(current->domain) )
+        return 0;
+
+    /*
+     * Remove unsupport features from n1 guest capability MSR
+     */
+    switch (msr) {
+    case MSR_IA32_VMX_BASIC:
+        data = VVMCS_REVISION | (PAGE_SIZE) << 32 | 
+               ((u64)MTRR_TYPE_WRBACK) << 50 | (1L << 55);
+        break;
+    case MSR_IA32_VMX_PINBASED_CTLS:
+        /* 1-seetings */
+        data = PIN_BASED_EXT_INTR_MASK | PIN_BASED_NMI_EXITING;
+        data <<= 32;
+	/* 0-settings */
+        data |= 0;
+        break;
+    case MSR_IA32_VMX_PROCBASED_CTLS:
+        /* 1-seetings */
+        data = (CPU_BASED_HLT_EXITING |
+               CPU_BASED_VIRTUAL_INTR_PENDING |
+               CPU_BASED_CR8_LOAD_EXITING |
+               CPU_BASED_CR8_STORE_EXITING |
+               CPU_BASED_INVLPG_EXITING |
+               CPU_BASED_CR3_LOAD_EXITING |
+               CPU_BASED_CR3_STORE_EXITING |
+               CPU_BASED_MONITOR_EXITING |
+               CPU_BASED_MWAIT_EXITING |
+               CPU_BASED_MOV_DR_EXITING |
+               CPU_BASED_ACTIVATE_IO_BITMAP |
+               CPU_BASED_USE_TSC_OFFSETING |
+               CPU_BASED_UNCOND_IO_EXITING |
+               CPU_BASED_RDTSC_EXITING);
+        /* bit 1, 4-6,8,13-16,26 must be 1 (refer G4 of SDM) */
+        tmp = ( (1<<26) | (0xf << 13) | 0x100 | (0x7 << 4) | 0x2);
+        /* 0-settings */
+        data = ((data | tmp) << 32) | (tmp);
+        break;
+    case MSR_IA32_VMX_EXIT_CTLS:
+        /* 1-seetings */
+        /* bit 0-8, 10,11,13,14,16,17 must be 1 (refer G4 of SDM) */
+        tmp = 0x36dff;
+        data = VM_EXIT_ACK_INTR_ON_EXIT;
+#ifdef __x86_64__
+        data |= VM_EXIT_IA32E_MODE;
+#endif
+	/* 0-settings */
+        data = ((data | tmp) << 32) | tmp;
+        break;
+    case MSR_IA32_VMX_ENTRY_CTLS:
+        /* bit 0-8, and 12 must be 1 (refer G5 of SDM) */
+        data = 0x11ff;
+        data |= VM_ENTRY_IA32E_MODE;
+        data = (data << 32) | data;
+        break;
+
+    case IA32_FEATURE_CONTROL_MSR:
+        data = IA32_FEATURE_CONTROL_MSR_LOCK | 
+               IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX;
+        break;
+    case MSR_IA32_VMX_VMCS_ENUM:
+        /* The max index of VVMCS encoding is 0x1f. */
+        data = 0x1f << 1;
+        break;
+    case MSR_IA32_VMX_CR0_FIXED0:
+        /* PG, PE bits must be 1 in VMX operation */
+        data = X86_CR0_PE | X86_CR0_PG;
+        break;
+    case MSR_IA32_VMX_CR0_FIXED1:
+        /* allow 0-settings for all bits */
+        data = 0xffffffff;
+        break;
+    case MSR_IA32_VMX_CR4_FIXED0:
+        /* VMXE bit must be 1 in VMX operation */
+        data = X86_CR4_VMXE;
+        break;
+    case MSR_IA32_VMX_CR4_FIXED1:
+        /* allow 0-settings except SMXE */
+        data = 0x267ff & ~X86_CR4_SMXE;
+        break;
+    case MSR_IA32_VMX_MISC:
+        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported yet.\n", msr);
+        break;
+    default:
+        r = 0;
+        break;
+    }
+
+    *msr_content = data;
+    return r;
+}
+
+int nvmx_msr_write_intercept(unsigned int msr, u64 msr_content)
+{
+    /* silently ignore for now */
+    return 1;
+}
+
 void nvmx_idtv_handling(void)
 {
     struct vcpu *v = current;
diff -r 4242db588ea6 xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Sun Jun 12 13:50:43 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Tue Jun 14 10:22:00 2011 +0800
@@ -164,6 +164,10 @@ int nvmx_handle_vmread(struct cpu_user_r
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
 int nvmx_handle_vmresume(struct cpu_user_regs *regs);
 int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
+int nvmx_msr_read_intercept(unsigned int msr,
+                                u64 *msr_content);
+int nvmx_msr_write_intercept(unsigned int msr,
+                                 u64 msr_content);
 
 void nvmx_update_exec_control(struct vcpu *v, u32 value);
 void nvmx_update_secondary_exec_control(struct vcpu *v,

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 74+ messages in thread

* Re: [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-09  8:25 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
@ 2011-06-13  8:27   ` Tim Deegan
  2011-06-14  2:29     ` Dong, Eddie
  0 siblings, 1 reply; 74+ messages in thread
From: Tim Deegan @ 2011-06-13  8:27 UTC (permalink / raw)
  To: Eddie Dong; +Cc: xen-devel

At 16:25 +0800 on 09 Jun (1307636725), Eddie Dong wrote:
> +    /* pass through MSRs */
> +    case MSR_IA32_VMX_MISC:
> +    case MSR_IA32_VMX_CR0_FIXED0:
> +    case MSR_IA32_VMX_CR0_FIXED1:
> +    case MSR_IA32_VMX_CR4_FIXED0:
> +    case MSR_IA32_VMX_CR4_FIXED1:
> +    case MSR_IA32_VMX_VMCS_ENUM:
> +        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported yet.\n", msr);

Are you planning to fix this before checking in this series?  I'm pretty
sure that at least MSR_IA32_VMX_VMCS_ENUM should be trivial, since you
define your own VMCS format. 

Tim.

> +        break;
> +
> +    default:
> +        r = 0;
> +        break;
> +    }
> +
> +    *msr_content = data;
> +    return r;
> +}
> +
> +int nvmx_msr_write_intercept(unsigned int msr, u64 msr_content)
> +{
> +    /* silently ignore for now */
> +    return 1;
> +}
> +
>  void nvmx_idtv_handling(void)
>  {
>      struct vcpu *v = current;
> diff -r 3189a3e6f05e -r 480cfcea095b xen/include/asm-x86/hvm/vmx/vvmx.h
> --- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 09 16:24:09 2011 +0800
> +++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 09 16:24:09 2011 +0800
> @@ -163,6 +163,10 @@ int nvmx_handle_vmread(struct cpu_user_r
>  int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
>  int nvmx_handle_vmresume(struct cpu_user_regs *regs);
>  int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
> +int nvmx_msr_read_intercept(unsigned int msr,
> +                                u64 *msr_content);
> +int nvmx_msr_write_intercept(unsigned int msr,
> +                                 u64 msr_content);
>  
>  void nvmx_update_exec_control(struct vcpu *v, u32 value);
>  void nvmx_update_secondary_exec_control(struct vcpu *v,
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 74+ messages in thread

* [PATCH 20 of 20] n2 MSR handling and capability exposure
  2011-06-09  8:25 [PATCH 00 of 20] Rebased Nested VMX v2 Eddie Dong
@ 2011-06-09  8:25 ` Eddie Dong
  2011-06-13  8:27   ` Tim Deegan
  0 siblings, 1 reply; 74+ messages in thread
From: Eddie Dong @ 2011-06-09  8:25 UTC (permalink / raw)
  To: Tim.Deegan; +Cc: xen-devel

# HG changeset patch
# User Eddie Dong <eddie.dong@intel.com>
# Date 1307607849 -28800
# Node ID 480cfcea095bddb2e7c495a092632e80d552332d
# Parent  3189a3e6f05ecc7e14bc55e944c48d7e50613a96
n2 MSR handling and capability exposure

Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Eddie Dong <eddie.dong@intel.com>

diff -r 3189a3e6f05e -r 480cfcea095b xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 09 16:24:09 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vmx.c	Thu Jun 09 16:24:09 2011 +0800
@@ -1778,8 +1778,11 @@ static int vmx_msr_read_intercept(unsign
         *msr_content |= (u64)__vmread(GUEST_IA32_DEBUGCTL_HIGH) << 32;
 #endif
         break;
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_read_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     case MSR_IA32_MISC_ENABLE:
         rdmsrl(MSR_IA32_MISC_ENABLE, *msr_content);
         /* Debug Trace Store is not supported. */
@@ -1940,8 +1943,11 @@ static int vmx_msr_write_intercept(unsig
 
         break;
     }
-    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_PROCBASED_CTLS2:
-        goto gp_fault;
+    case IA32_FEATURE_CONTROL_MSR:
+    case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_TRUE_ENTRY_CTLS:
+        if ( !nvmx_msr_write_intercept(msr, msr_content) )
+            goto gp_fault;
+        break;
     default:
         if ( vpmu_do_wrmsr(msr, msr_content) )
             return X86EMUL_OKAY;
diff -r 3189a3e6f05e -r 480cfcea095b xen/arch/x86/hvm/vmx/vvmx.c
--- a/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 09 16:24:09 2011 +0800
+++ b/xen/arch/x86/hvm/vmx/vvmx.c	Thu Jun 09 16:24:09 2011 +0800
@@ -22,6 +22,7 @@
 
 #include <xen/config.h>
 #include <asm/types.h>
+#include <asm/mtrr.h>
 #include <asm/p2m.h>
 #include <asm/hvm/vmx/vmx.h>
 #include <asm/hvm/vmx/vvmx.h>
@@ -1254,6 +1255,100 @@ int nvmx_handle_vmwrite(struct cpu_user_
     return X86EMUL_OKAY;
 }
 
+/*
+ * Capability reporting
+ */
+int nvmx_msr_read_intercept(unsigned int msr, u64 *msr_content)
+{
+    u64 data = 0, tmp;
+    int r = 1;
+
+    if ( !nestedhvm_enabled(current->domain) )
+        return 0;
+
+    /*
+     * Remove unsupport features from n1 guest capability MSR
+     */
+    switch (msr) {
+    case MSR_IA32_VMX_BASIC:
+        data = VVMCS_REVISION | (PAGE_SIZE) << 32 | 
+               ((u64)MTRR_TYPE_WRBACK) << 50 | (1L << 55);
+        break;
+    case MSR_IA32_VMX_PINBASED_CTLS:
+        /* 1-seetings */
+        data = PIN_BASED_EXT_INTR_MASK | PIN_BASED_NMI_EXITING;
+        data <<= 32;
+	/* 0-settings */
+        data |= 0;
+        break;
+    case MSR_IA32_VMX_PROCBASED_CTLS:
+        /* 1-seetings */
+        data = (CPU_BASED_HLT_EXITING |
+               CPU_BASED_VIRTUAL_INTR_PENDING |
+               CPU_BASED_CR8_LOAD_EXITING |
+               CPU_BASED_CR8_STORE_EXITING |
+               CPU_BASED_INVLPG_EXITING |
+               CPU_BASED_CR3_LOAD_EXITING |
+               CPU_BASED_CR3_STORE_EXITING |
+               CPU_BASED_MONITOR_EXITING |
+               CPU_BASED_MWAIT_EXITING |
+               CPU_BASED_MOV_DR_EXITING |
+               CPU_BASED_ACTIVATE_IO_BITMAP |
+               CPU_BASED_USE_TSC_OFFSETING |
+               CPU_BASED_UNCOND_IO_EXITING |
+               CPU_BASED_RDTSC_EXITING);
+        /* bit 1, 4-6,8,13-16,26 must be 1 (refer G4 of SDM) */
+        tmp = ( (1<<26) | (0xf << 13) | 0x100 | (0x7 << 4) | 0x2);
+        /* 0-settings */
+        data = ((data | tmp) << 32) | (tmp);
+        break;
+    case MSR_IA32_VMX_EXIT_CTLS:
+        /* 1-seetings */
+        /* bit 0-8, 10,11,13,14,16,17 must be 1 (refer G4 of SDM) */
+        tmp = 0x36dff;
+        data = VM_EXIT_ACK_INTR_ON_EXIT;
+#ifdef __x86_64__
+        data |= VM_EXIT_IA32E_MODE;
+#endif
+	/* 0-settings */
+        data = ((data | tmp) << 32) | tmp;
+        break;
+    case MSR_IA32_VMX_ENTRY_CTLS:
+        /* bit 0-8, and 12 must be 1 (refer G5 of SDM) */
+        data = 0x11ff;
+        data |= VM_ENTRY_IA32E_MODE;
+        data = (data << 32) | data;
+        break;
+
+    case IA32_FEATURE_CONTROL_MSR:
+        data = IA32_FEATURE_CONTROL_MSR_LOCK | 
+               IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX;
+         break;
+    /* pass through MSRs */
+    case MSR_IA32_VMX_MISC:
+    case MSR_IA32_VMX_CR0_FIXED0:
+    case MSR_IA32_VMX_CR0_FIXED1:
+    case MSR_IA32_VMX_CR4_FIXED0:
+    case MSR_IA32_VMX_CR4_FIXED1:
+    case MSR_IA32_VMX_VMCS_ENUM:
+        gdprintk(XENLOG_WARNING, "VMX MSR %x not fully supported yet.\n", msr);
+        break;
+
+    default:
+        r = 0;
+        break;
+    }
+
+    *msr_content = data;
+    return r;
+}
+
+int nvmx_msr_write_intercept(unsigned int msr, u64 msr_content)
+{
+    /* silently ignore for now */
+    return 1;
+}
+
 void nvmx_idtv_handling(void)
 {
     struct vcpu *v = current;
diff -r 3189a3e6f05e -r 480cfcea095b xen/include/asm-x86/hvm/vmx/vvmx.h
--- a/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 09 16:24:09 2011 +0800
+++ b/xen/include/asm-x86/hvm/vmx/vvmx.h	Thu Jun 09 16:24:09 2011 +0800
@@ -163,6 +163,10 @@ int nvmx_handle_vmread(struct cpu_user_r
 int nvmx_handle_vmwrite(struct cpu_user_regs *regs);
 int nvmx_handle_vmresume(struct cpu_user_regs *regs);
 int nvmx_handle_vmlaunch(struct cpu_user_regs *regs);
+int nvmx_msr_read_intercept(unsigned int msr,
+                                u64 *msr_content);
+int nvmx_msr_write_intercept(unsigned int msr,
+                                 u64 msr_content);
 
 void nvmx_update_exec_control(struct vcpu *v, u32 value);
 void nvmx_update_secondary_exec_control(struct vcpu *v,

^ permalink raw reply	[flat|nested] 74+ messages in thread

end of thread, other threads:[~2011-07-26 16:08 UTC | newest]

Thread overview: 74+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-02  8:57 [PATCH 00 of 20] NestedVMX support Eddie Dong
2011-06-02  8:57 ` [PATCH 01 of 20] pre-cleanup1: Extend nhvm_vmcx_guest_intercepts_trap to include errcode to Eddie Dong
2011-06-02  8:57 ` [PATCH 02 of 20] pre-cleanup2: Move IDT_VECTORING processing code out of intr_assist Eddie Dong
2011-06-02  8:57 ` [PATCH 03 of 20] Add data structure for nestedvmx Eddie Dong
2011-06-02  8:57 ` [PATCH 04 of 20] Add APIs for nestedhvm_ops Eddie Dong
2011-06-02  8:57 ` [PATCH 05 of 20] Emulation of guest VMXON/OFF instruction Eddie Dong
2011-06-02 14:36   ` Tim Deegan
2011-06-03  5:54     ` Dong, Eddie
2011-06-02  8:57 ` [PATCH 06 of 20] Define structure and access APIs for virtual VMCS Eddie Dong
2011-06-02  8:57 ` [PATCH 07 of 20] Emulation of guest vmptrld Eddie Dong
2011-06-02 14:45   ` Tim Deegan
2011-06-03  6:07     ` Dong, Eddie
2011-06-03  8:42       ` Tim Deegan
2011-06-07  1:48         ` Dong, Eddie
2011-06-02  8:57 ` [PATCH 08 of 20] Emulation of guest VMPTRST Eddie Dong
2011-06-02  8:57 ` [PATCH 09 of 20] Emulation of guest VMCLEAR Eddie Dong
2011-06-02  8:57 ` [PATCH 10 of 20] Emulation of guest VMWRITE Eddie Dong
2011-06-02  8:57 ` [PATCH 11 of 20] Emulation of guest VMREAD Eddie Dong
2011-06-02  8:57 ` [PATCH 12 of 20] Add APIs to switch n1/n2 VMCS Eddie Dong
2011-06-02 14:50   ` Tim Deegan
2011-06-03  7:30     ` Dong, Eddie
2011-06-02  8:57 ` [PATCH 13 of 20] Emulation of VMRESUME/VMLAUNCH Eddie Dong
2011-06-02  8:57 ` [PATCH 14 of 20] Extend VMCS control fields for n2 guest Eddie Dong
2011-06-02  8:57 ` [PATCH 15 of 20] Switch shadow/virtual VMCS between n1/n2 guests Eddie Dong
2011-06-02 14:56   ` Tim Deegan
2011-06-03  7:57     ` Dong, Eddie
2011-06-02 14:58   ` Tim Deegan
2011-06-02  8:57 ` [PATCH 16 of 20] interrupt/exception handling for n2 guest Eddie Dong
2011-06-02  8:57 ` [PATCH 17 of 20] VM exit handler of n2-guest Eddie Dong
2011-06-02 14:59   ` Tim Deegan
2011-06-03  8:06     ` Dong, Eddie
2011-06-03  8:43       ` Tim Deegan
2011-06-02  8:57 ` [PATCH 18 of 20] Lazy FPU for n2 guest Eddie Dong
2011-06-02  8:57 ` [PATCH 19 of 20] Add VMXE bits in virtual CR4 Eddie Dong
2011-06-02 15:01   ` Tim Deegan
2011-06-03  8:12     ` Dong, Eddie
2011-06-02  8:57 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
2011-06-02 15:07   ` Tim Deegan
2011-06-02 15:11     ` Tim Deegan
2011-06-02 19:20       ` Keir Fraser
2011-06-03  8:39       ` Dong, Eddie
2011-06-03  8:25     ` Dong, Eddie
2011-06-02 14:33 ` [PATCH 00 of 20] NestedVMX support Tim Deegan
2011-06-03  5:47   ` Dong, Eddie
2011-06-09  8:25 [PATCH 00 of 20] Rebased Nested VMX v2 Eddie Dong
2011-06-09  8:25 ` [PATCH 20 of 20] n2 MSR handling and capability exposure Eddie Dong
2011-06-13  8:27   ` Tim Deegan
2011-06-14  2:29     ` Dong, Eddie
2011-06-15 12:45       ` Tim Deegan
2011-06-20  6:31         ` Jeroen Groenewegen van der Weyden
2011-06-30 14:14           ` Jeroen Groenewegen van der Weyden
2011-07-01  9:01             ` Tim Deegan
2011-07-01  9:54               ` Christoph Egger
2011-07-01 10:11                 ` Jeroen Groenewegen van der Weyden
2011-07-04  8:58                   ` Tim Deegan
2011-07-04  9:58                     ` Jeroen Groenewegen van der Weyden
2011-07-08  7:12                     ` Jeroen Groenewegen van der Weyden
2011-07-18 15:41                       ` Dong, Eddie
2011-07-19 13:59                         ` Jeroen Groenewegen van der Weyden
2011-07-20 13:44                           ` Dong, Eddie
2011-07-20 14:12                             ` Jeroen Groenewegen van der Weyden
2011-07-25 14:08                               ` Tim Deegan
2011-07-25 16:16                                 ` Tim Deegan
2011-07-26  7:15                                   ` Jeroen Groenewegen van der Weyden
2011-07-26 10:00                                     ` Tim Deegan
2011-07-26 10:11                                       ` Tim Deegan
2011-07-26 10:46                                         ` Jeroen Groenewegen van der Weyden
2011-07-26 11:42                                           ` Tim Deegan
2011-07-26 13:33                                             ` Jeroen Groenewegen van der Weyden
2011-07-26 14:21                                               ` Tim Deegan
2011-07-26 15:25                                                 ` Jeroen Groenewegen van der Weyden
2011-07-26 15:48                                                   ` Tim Deegan
2011-07-26 16:00                                                     ` Jeroen Groenewegen van der Weyden
2011-07-26 16:08                                                       ` Tim Deegan
2011-07-26 11:05                                       ` Jeroen Groenewegen van der Weyden

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.