#include <palacios/vmm_xml.h>
#include <palacios/vmm_io.h>
#include <palacios/vmm_msr.h>
-#include <palacios/vmm_mptable.h>
#include <palacios/vmm_sprintf.h>
static int determine_paging_mode(struct guest_info * info, v3_cfg_tree_t * core_cfg) {
- extern v3_cpu_arch_t v3_cpu_types[];
+ extern v3_cpu_arch_t v3_mach_type;
v3_cfg_tree_t * vm_tree = info->vm_info->cfg_data->cfg;
v3_cfg_tree_t * pg_tree = v3_cfg_subtree(vm_tree, "paging");
if (pg_mode) {
if ((strcasecmp(pg_mode, "nested") == 0)) {
// we assume symmetric cores, so if core 0 has nested paging they all do
- if ((v3_cpu_types[0] == V3_SVM_REV3_CPU) ||
- (v3_cpu_types[0] == V3_VMX_EPT_CPU) ||
- (v3_cpu_types[0] == V3_VMX_EPT_UG_CPU)) {
+ if ((v3_mach_type == V3_SVM_REV3_CPU) ||
+ (v3_mach_type == V3_VMX_EPT_CPU) ||
+ (v3_mach_type == V3_VMX_EPT_UG_CPU)) {
info->shdw_pg_mode = NESTED_PAGING;
} else {
PrintError("Nested paging not supported on this hardware. Defaulting to shadow paging\n");
return -1;
}
- /*
- * Initialize configured extensions
- */
- if (setup_extensions(vm, cfg) == -1) {
- PrintError("Failed to setup extensions\n");
+
+ if (vm->vm_class == V3_PC_VM) {
+ if (post_config_pc(vm, cfg) == -1) {
+ PrintError("PC Post configuration failure\n");
+ return -1;
+ }
+ } else {
+ PrintError("Invalid VM Class\n");
return -1;
}
+
/*
* Initialize configured devices
*/
v3_print_msr_map(vm);
- if (vm->vm_class == V3_PC_VM) {
- if (post_config_pc(vm, cfg) == -1) {
- PrintError("PC Post configuration failure\n");
- return -1;
- }
- } else {
- PrintError("Invalid VM Class\n");
+
+
+ /*
+ * Initialize configured extensions
+ */
+ if (setup_extensions(vm, cfg) == -1) {
+ PrintError("Failed to setup extensions\n");
return -1;
}
+
return 0;
}
struct v3_vm_info * v3_config_guest(void * cfg_blob, void * priv_data) {
- v3_cpu_arch_t cpu_type = v3_get_cpu_type(V3_Get_CPU());
+ extern v3_cpu_arch_t v3_mach_type;
struct v3_config * cfg_data = NULL;
struct v3_vm_info * vm = NULL;
int num_cores = 0;
v3_cfg_tree_t * cores_cfg = NULL;
v3_cfg_tree_t * per_core_cfg = NULL;
- if (cpu_type == V3_INVALID_CPU) {
+ if (v3_mach_type == V3_INVALID_CPU) {
PrintError("Configuring guest on invalid CPU\n");
return NULL;
}
for (i = 0; i < vm->num_cores; i++) {
struct guest_info * info = &(vm->cores[i]);
- info->cpu_id = i;
+ info->vcpu_id = i;
info->vm_info = vm;
info->core_cfg_data = per_core_cfg;