From: Jack Lange Date: Fri, 15 Jan 2010 02:50:52 +0000 (-0600) Subject: moved vmx/svm arch maps to global setup X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=ea2c3508b25e832976994db6ccedb4be94137e48 moved vmx/svm arch maps to global setup --- diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c index 50d2b85..c92da0c 100644 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@ -189,15 +189,11 @@ static void Init_VMCB_BIOS(vmcb_t * vmcb, struct guest_info * core) { core->dbg_regs.dr7 = 0x0000000000000400LL; - /** THESE NEED TO BE MOVED TO GLOBAL LOCATION **/ - v3_init_svm_io_map(core->vm_info); ctrl_area->IOPM_BASE_PA = (addr_t)V3_PAddr(core->vm_info->io_map.arch_data); ctrl_area->instrs.IOIO_PROT = 1; - - v3_init_svm_msr_map(core->vm_info); + ctrl_area->MSRPM_BASE_PA = (addr_t)V3_PAddr(core->vm_info->msr_map.arch_data); - ctrl_area->instrs.MSR_PROT = 1; - /** *** **/ + ctrl_area->instrs.MSR_PROT = 1; PrintDebug("Exiting on interrupts\n"); diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index 3b712f5..e3bc57b 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -28,9 +28,9 @@ #include #include #include +#include +#include -#include -#include #ifdef CONFIG_SYMBIOTIC #include @@ -42,6 +42,19 @@ #endif +#ifdef CONFIG_SVM +#include +#include +#include +#endif + +#ifdef CONFIG_VMX +#include +#include +#include +#endif + + #include #include @@ -189,6 +202,8 @@ static struct v3_config * parse_config(void * cfg_blob) { } static int pre_config_vm(struct v3_vm_info * vm, v3_cfg_tree_t * vm_cfg) { + v3_cpu_arch_t cpu_type = v3_get_cpu_type(v3_get_cpu_id()); + char * memory_str = v3_cfg_val(vm_cfg, "memory"); char * schedule_hz_str = v3_cfg_val(vm_cfg, "schedule_hz"); char * vm_class = v3_cfg_val(vm_cfg, "class"); @@ -249,6 +264,25 @@ static int pre_config_vm(struct v3_vm_info * vm, v3_cfg_tree_t * vm_cfg) { v3_init_sym_swap(vm); #endif + + // init SVM/VMX +#ifdef CONFIG_SVM + if ((cpu_type == V3_SVM_CPU) || (cpu_type == V3_SVM_REV3_CPU)) { + v3_init_svm_io_map(vm); + v3_init_svm_msr_map(vm); + } +#endif +#ifdef CONFIG_VMX + else if ((cpu_type == V3_VMX_CPU) || (cpu_type == V3_VMX_EPT_CPU)) { + v3_init_vmx_io_map(vm); + v3_init_vmx_msr_map(vm); + } +#endif + else { + PrintError("Invalid CPU Type\n"); + return -1; + } + if (schedule_hz_str) { sched_hz = atoi(schedule_hz_str); } diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index 2a461b9..15d108b 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -199,10 +199,7 @@ static int init_vmcs_bios(struct guest_info * info, struct vmx_data * vmx_state) /********** Setup and VMX Control Fields from MSR ***********/ /* Setup IO map */ - /***** THEES NEED TO BE MOVED TO A GLOBAL LOCATION ***/ - v3_init_vmx_io_map(info->vm_info); - v3_init_vmx_msr_map(info->vm_info); - /**** ****/ + struct v3_msr tmp_msr;