WARNING - OLD ARCHIVES

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

xen-changelog

[Xen-changelog] [xen-unstable] vmx: Convert more initialisation BUG()s i

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] vmx: Convert more initialisation BUG()s into clean failures.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 19 May 2010 15:05:13 -0700
Delivery-date: Wed, 19 May 2010 15:06:29 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1274306392 -3600
# Node ID 840f269d95fb8e7367753612fffabc521be8df9e
# Parent  8114ea8495f07172077501af4af7755ea8e8b1d4
vmx: Convert more initialisation BUG()s into clean failures.

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/hvm/vmx/vmcs.c |   29 +++++++++++++++++++++--------
 1 files changed, 21 insertions(+), 8 deletions(-)

diff -r 8114ea8495f0 -r 840f269d95fb xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c       Wed May 19 22:49:28 2010 +0100
+++ b/xen/arch/x86/hvm/vmx/vmcs.c       Wed May 19 22:59:52 2010 +0100
@@ -97,7 +97,8 @@ static void __init vmx_display_features(
                vmx_ept_super_page_level_limit > 1 ? "1G" : "2M");
 }
 
-static u32 adjust_vmx_controls(u32 ctl_min, u32 ctl_opt, u32 msr)
+static u32 adjust_vmx_controls(
+    const char *name, u32 ctl_min, u32 ctl_opt, u32 msr, bool_t *mismatch)
 {
     u32 vmx_msr_low, vmx_msr_high, ctl = ctl_min | ctl_opt;
 
@@ -107,7 +108,12 @@ static u32 adjust_vmx_controls(u32 ctl_m
     ctl |= vmx_msr_low;  /* bit == 1 in low word  ==> must be one  */
 
     /* Ensure minimum (required) set of control bits are supported. */
-    BUG_ON(ctl_min & ~ctl);
+    if ( ctl_min & ~ctl )
+    {
+        *mismatch = 1;
+        printk("VMX: CPU%d has insufficent %s (%08x but requires min %08x)\n",
+               smp_processor_id(), name, ctl, ctl_min);
+    }
 
     return ctl;
 }
@@ -136,7 +142,8 @@ static int vmx_init_vmcs_config(void)
            PIN_BASED_NMI_EXITING);
     opt = PIN_BASED_VIRTUAL_NMIS;
     _vmx_pin_based_exec_control = adjust_vmx_controls(
-        min, opt, MSR_IA32_VMX_PINBASED_CTLS);
+        "Pin-Based Exec Control", min, opt,
+        MSR_IA32_VMX_PINBASED_CTLS, &mismatch);
 
     min = (CPU_BASED_HLT_EXITING |
            CPU_BASED_INVLPG_EXITING |
@@ -153,14 +160,16 @@ static int vmx_init_vmcs_config(void)
            CPU_BASED_MONITOR_TRAP_FLAG |
            CPU_BASED_ACTIVATE_SECONDARY_CONTROLS);
     _vmx_cpu_based_exec_control = adjust_vmx_controls(
-        min, opt, MSR_IA32_VMX_PROCBASED_CTLS);
+        "CPU-Based Exec Control", min, opt,
+        MSR_IA32_VMX_PROCBASED_CTLS, &mismatch);
     _vmx_cpu_based_exec_control &= ~CPU_BASED_RDTSC_EXITING;
 #ifdef __x86_64__
     if ( !(_vmx_cpu_based_exec_control & CPU_BASED_TPR_SHADOW) )
     {
         min |= CPU_BASED_CR8_LOAD_EXITING | CPU_BASED_CR8_STORE_EXITING;
         _vmx_cpu_based_exec_control = adjust_vmx_controls(
-            min, opt, MSR_IA32_VMX_PROCBASED_CTLS);
+            "CPU-Based Exec Control", min, opt,
+            MSR_IA32_VMX_PROCBASED_CTLS, &mismatch);
     }
 #endif
 
@@ -178,7 +187,8 @@ static int vmx_init_vmcs_config(void)
             opt |= SECONDARY_EXEC_UNRESTRICTED_GUEST;
 
         _vmx_secondary_exec_control = adjust_vmx_controls(
-            min, opt, MSR_IA32_VMX_PROCBASED_CTLS2);
+            "Secondary Exec Control", min, opt,
+            MSR_IA32_VMX_PROCBASED_CTLS2, &mismatch);
     }
 
     if ( _vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT )
@@ -228,12 +238,15 @@ static int vmx_init_vmcs_config(void)
     min |= VM_EXIT_IA32E_MODE;
 #endif
     _vmx_vmexit_control = adjust_vmx_controls(
-        min, opt, MSR_IA32_VMX_EXIT_CTLS);
+        "VMExit Control", min, opt, MSR_IA32_VMX_EXIT_CTLS, &mismatch);
 
     min = 0;
     opt = VM_ENTRY_LOAD_GUEST_PAT;
     _vmx_vmentry_control = adjust_vmx_controls(
-        min, opt, MSR_IA32_VMX_ENTRY_CTLS);
+        "VMEntry Control", min, opt, MSR_IA32_VMX_ENTRY_CTLS, &mismatch);
+
+    if ( mismatch )
+        return -EINVAL;
 
     if ( !vmx_pin_based_exec_control )
     {

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] vmx: Convert more initialisation BUG()s into clean failures., Xen patchbot-unstable <=