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: Better diagnostic messages when VMXO

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] vmx: Better diagnostic messages when VMXON might have failed due to
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 02 Jun 2008 11:10:10 -0700
Delivery-date: Mon, 02 Jun 2008 11:10:11 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/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 1212400555 -3600
# Node ID a4775034ef83946803eb6a61e0af33fb6971123f
# Parent  0216f0d07efed1bebab5b742e72756236363d8cc
vmx: Better diagnostic messages when VMXON might have failed due to
bad setting of the IA32_FEATURE_CONTROL MSR.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/hvm/vmx/vmcs.c       |   29 ++++++++++++++++++++++++-----
 xen/include/asm-x86/hvm/vmx/vmx.h |    2 +-
 2 files changed, 25 insertions(+), 6 deletions(-)

diff -r 0216f0d07efe -r a4775034ef83 xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c       Mon Jun 02 10:04:19 2008 +0100
+++ b/xen/arch/x86/hvm/vmx/vmcs.c       Mon Jun 02 10:55:55 2008 +0100
@@ -267,7 +267,7 @@ int vmx_cpu_up(void)
 int vmx_cpu_up(void)
 {
     u32 eax, edx;
-    int cpu = smp_processor_id();
+    int bios_locked, cpu = smp_processor_id();
     u64 cr0, vmx_cr0_fixed0, vmx_cr0_fixed1;
 
     BUG_ON(!(read_cr4() & X86_CR4_VMXE));
@@ -288,7 +288,8 @@ int vmx_cpu_up(void)
 
     rdmsr(IA32_FEATURE_CONTROL_MSR, eax, edx);
 
-    if ( eax & IA32_FEATURE_CONTROL_MSR_LOCK )
+    bios_locked = !!(eax & IA32_FEATURE_CONTROL_MSR_LOCK);
+    if ( bios_locked )
     {
         if ( !(eax & (IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX |
                       IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_INSIDE_SMX)) )
@@ -320,10 +321,28 @@ int vmx_cpu_up(void)
         }
     }
 
-    if ( __vmxon(virt_to_maddr(this_cpu(host_vmcs))) )
-    {
-        printk("CPU%d: VMXON failed\n", cpu);
+    switch ( __vmxon(virt_to_maddr(this_cpu(host_vmcs))) )
+    {
+    case -2: /* #UD or #GP */
+        if ( bios_locked &&
+             test_bit(X86_FEATURE_SMXE, &boot_cpu_data.x86_capability) &&
+             (!(eax & IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX) ||
+              !(eax & IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_INSIDE_SMX)) )
+        {
+            printk("CPU%d: VMXON failed: perhaps because of TXT settings "
+                   "in your BIOS configuration?\n", cpu);
+            printk(" --> Disable TXT in your BIOS unless using a secure "
+                   "bootloader.\n");
+            return 0;
+        }
+        /* fall through */
+    case -1: /* CF==1 or ZF==1 */
+        printk("CPU%d: unexpected VMXON failure\n", cpu);
         return 0;
+    case 0: /* success */
+        break;
+    default:
+        BUG();
     }
 
     ept_sync_all();
diff -r 0216f0d07efe -r a4775034ef83 xen/include/asm-x86/hvm/vmx/vmx.h
--- a/xen/include/asm-x86/hvm/vmx/vmx.h Mon Jun 02 10:04:19 2008 +0100
+++ b/xen/include/asm-x86/hvm/vmx/vmx.h Mon Jun 02 10:55:55 2008 +0100
@@ -334,7 +334,7 @@ static inline int __vmxon(u64 addr)
         "   setna %b0 ; neg %0\n" /* CF==1 or ZF==1 --> rc = -1 */
         "2:\n"
         ".section .fixup,\"ax\"\n"
-        "3: not %0 ; jmp 2b\n"    /* #UD --> rc = -1 */
+        "3: sub $2,%0 ; jmp 2b\n"    /* #UD or #GP --> rc = -2 */
         ".previous\n"
         ".section __ex_table,\"a\"\n"
         "   "__FIXUP_ALIGN"\n"

_______________________________________________
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: Better diagnostic messages when VMXON might have failed due to, Xen patchbot-unstable <=