#include <palacios/vmm_dev_mgr.h>
#include <palacios/vmm_cpuid.h>
#include <palacios/vmm_xml.h>
+#include <palacios/vmm_io.h>
+#include <palacios/vmm_msr.h>
-#include <palacios/svm.h>
-#include <palacios/vmx.h>
#ifdef CONFIG_SYMBIOTIC
#include <palacios/vmm_sym_iface.h>
#endif
+#ifdef CONFIG_SVM
+#include <palacios/svm.h>
+#include <palacios/svm_io.h>
+#include <palacios/svm_msr.h>
+#endif
+
+#ifdef CONFIG_VMX
+#include <palacios/vmx.h>
+#include <palacios/vmx_io.h>
+#include <palacios/vmx_msr.h>
+#endif
+
+
#include <palacios/vmm_host_events.h>
#include <palacios/vmm_socket.h>
}
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");
v3_init_intr_routers(vm);
// Initialize the memory map
- if (v3_init_mem_map(&(vm->cores[0])) == -1) {
+ if (v3_init_mem_map(vm) == -1) {
PrintError("Could not initialize shadow map\n");
return -1;
}
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);
}
cores_cfg = v3_cfg_subtree(cfg_data->cfg, "cores");
+ if (!cores_cfg) {
+ PrintError("Could not find core configuration (new config format required)\n");
+ return NULL;
+ }
+
num_cores = atoi(v3_cfg_val(cores_cfg, "count"));
+ if (num_cores == 0) {
+ PrintError("No cores specified in configuration\n");
+ return NULL;
+ }
+
V3_Print("Configuring %d cores\n", num_cores);
vm = allocate_guest(num_cores);
addr_t host_addr = atox(v3_cfg_val(mem_region, "host_addr"));
- if (v3_add_shadow_mem(vm, start_addr, end_addr, host_addr) == -1) {
+ if (v3_add_shadow_mem(vm, V3_MEM_CORE_ANY, start_addr, end_addr, host_addr) == -1) {
PrintError("Could not map memory region: %p-%p => %p\n",
(void *)start_addr, (void *)end_addr, (void *)host_addr);
return -1;