x86: Fixes init for machines that do not have VMX
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Mar 2015 21:13:35 +0000 (17:13 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Mar 2015 21:13:35 +0000 (17:13 -0400)
On machines (or at least qemu) that don't have VMX, we'd still try and
do the pcpu init, which attempts some VMX instructions.

kern/arch/x86/vmm/intel/vmx.c
kern/arch/x86/vmm/vmm.c

index 643d7af..45e9047 100644 (file)
@@ -1730,7 +1730,7 @@ static bool probe_cpu_vmx(void)
                printk("Machine does not support VT-x\n");
                return FALSE;
        } else {
-               printk("Machine has vmx\n");
+               printk("Machine supports VT-x\n");
                return TRUE;
        }
 }
@@ -1758,7 +1758,6 @@ int intel_vmm_init(void)
        int r, cpu, ret;
 
        if (! probe_cpu_vmx()) {
-               printk("CPU does not have VMX\n");
                return -EOPNOTSUPP;
        }
 
index e0ddfce..7a8f8d2 100644 (file)
@@ -18,6 +18,9 @@
 #include "intel/compat.h"
 #include "vmm.h"
 
+/* TODO: have better cpuid info storage and checks */
+bool x86_supports_vmx = FALSE;
+
 /* Figure out what kind of CPU we are on, and if it supports any reasonable
  * virtualization. For now, if we're not some sort of newer intel, don't
  * bother. This does all cores. Again, note, we make these decisions at runtime,
@@ -33,6 +36,7 @@ void vmm_init(void)
        ret = intel_vmm_init();
        if (! ret) {
                printd("intel_vmm_init worked\n");
+               x86_supports_vmx = TRUE;
                return;
        }
 
@@ -43,6 +47,8 @@ void vmm_init(void)
 
 void vmm_pcpu_init(void)
 {
+       if (!x86_supports_vmx)
+               return;
        if (! intel_vmm_pcpu_init()) {
                printd("vmm_pcpu_init worked\n");
                return;