VMM: Clean up VMX setup
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 2 Feb 2016 17:25:02 +0000 (12:25 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 2 Feb 2016 22:43:52 +0000 (17:43 -0500)
The pcpui->vmxarea was only used to pass the vmx buffer from setup() to
enable().

We can just merge those two functions and put their guts into
intel_vmm_pcpu_init().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/vmm/intel/vmx.c
kern/include/smp.h

index 9fd0a2f..cb49e2f 100644 (file)
@@ -1203,29 +1203,6 @@ static int __vmx_enable(struct vmcs *vmxon_buf) {
 }
 
 /**
- * vmx_enable - enables VMX mode on the current CPU
- * @unused: not used (required for on_each_cpu())
- *
- * Sets up necessary state for enable (e.g. a scratchpad for VMXON.)
- */
-static void vmx_enable(void) {
-       struct vmcs *vmxon_buf = currentcpu->vmxarea;
-       int ret;
-
-       ret = __vmx_enable(vmxon_buf);
-       if (ret)
-               goto failed;
-
-       currentcpu->vmx_enabled = 1;
-
-       printk("VMX enabled on CPU %d\n", core_id());
-       return;
-
-failed:
-       printk("Failed to enable VMX on core %d, err = %d\n", core_id(), ret);
-}
-
-/**
  * vmx_disable - disables VMX mode on the current CPU
  */
 static void vmx_disable(void *unused) {
@@ -1258,17 +1235,6 @@ static bool probe_cpu_vmx(void) {
        }
 }
 
-static void setup_vmxarea(void) {
-       struct vmcs *vmxon_buf;
-       printd("Set up vmxarea for cpu %d\n", core_id());
-       vmxon_buf = __vmx_alloc_vmcs(core_id());
-       if (!vmxon_buf) {
-               printk("setup_vmxarea failed on node %d\n", core_id());
-               return;
-       }
-       currentcpu->vmxarea = vmxon_buf;
-}
-
 static int ept_init(void) {
        if (!cpu_has_vmx_ept()) {
                printk("VMX doesn't support EPT!\n");
@@ -1367,10 +1333,26 @@ int intel_vmm_init(void) {
        return 0;
 }
 
-int intel_vmm_pcpu_init(void) {
-       setup_vmxarea();
-       vmx_enable();
+int intel_vmm_pcpu_init(void)
+{
+       struct vmcs *vmxon_buf;
+       int ret;
+
+       vmxon_buf = __vmx_alloc_vmcs(core_id());
+       if (!vmxon_buf) {
+               printk("setup_vmxarea failed on node %d\n", core_id());
+               return -1;
+       }
+
+       ret = __vmx_enable(vmxon_buf);
+       if (ret)
+               goto failed;
+       currentcpu->vmx_enabled = 1;
+       printk("VMX enabled on CPU %d\n", core_id());
        return 0;
+failed:
+       printk("Failed to enable VMX on core %d, err = %d\n", core_id(), ret);
+       return ret;
 }
 
 
index 77b1165..8c78229 100644 (file)
@@ -37,7 +37,6 @@ struct per_cpu_info {
 #ifdef CONFIG_X86
        uintptr_t stacktop;                     /* must be first */
        int coreid;                                     /* must be second */
-       struct vmcs *vmxarea;
        int vmx_enabled;
        int guest_pcoreid;
 #endif