VMMCP: initialization
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 11 Mar 2015 16:28:39 +0000 (12:28 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 17 Mar 2015 14:55:59 +0000 (10:55 -0400)
vmm_init() happens before smp boot, and the per-cpu bits are done in
pcpu init.

(git-fu'd)

kern/arch/x86/init.c
kern/arch/x86/smp_boot.c
kern/include/smp.h

index e143cc9..51a572c 100644 (file)
@@ -83,6 +83,7 @@ void arch_init()
        asm volatile ("fninit");
        save_fp_state(&x86_default_fpu); /* used in arch/trap.h for fpu init */
        pci_init();
+       vmm_init();
        // this returns when all other cores are done and ready to receive IPIs
        #ifdef CONFIG_SINGLE_CORE
                smp_percpu_init();
index 9886fd2..b01059f 100644 (file)
@@ -28,6 +28,8 @@
 #include <trap.h>
 #include <kmalloc.h>
 
+#include "vmm/vmm.h"
+
 extern handler_wrapper_t (RO handler_wrappers)[NUM_HANDLER_WRAPPERS];
 volatile uint32_t num_cpus = 0xee;
 uintptr_t RO smp_stack_top;
@@ -345,4 +347,5 @@ void __arch_pcpu_init(uint32_t coreid)
        x86_sysenter_init(x86_get_stacktop_tss(pcpui->tss));
        /* need to init perfctr before potentiall using it in timer handler */
        perfmon_init();
+       vmm_pcpu_init();
 }
index f57f038..40886be 100644 (file)
@@ -41,8 +41,7 @@ struct per_cpu_info {
 #ifdef CONFIG_X86
        uintptr_t stacktop;                     /* must be first */
        int coreid;                                     /* must be second */
-       /* virtual machines */
-       //struct vmcs *vmxarea;
+       struct vmcs *vmxarea;
        pseudodesc_t host_gdt;
        int vmx_enabled;
        void *local_vcpu;