X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=738d2eee1e7dc13911992c40b2bc5a46d60d9442;hb=c8a303c8512c0dafcb8dd5f83e6682729165d547;hp=9c0aa59c2ecb1898908f04c65022890d55b463c8;hpb=cb7271d5e2fede8f39ece1c4b5ba516834c1e4aa;p=palacios-OLD.git diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index 9c0aa59..738d2ee 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -72,9 +72,16 @@ char * v3_cfg_val(v3_cfg_tree_t * tree, char * tag) { return NULL; } - val = (attrib == NULL) ? v3_xml_txt(child_entry): attrib; - - return val; + if (attrib == NULL) { + val = v3_xml_txt(child_entry); + + if ( val[0] == 0 ) + val = NULL; + } else { + val = attrib; + } + + return val; } v3_cfg_tree_t * v3_cfg_subtree(v3_cfg_tree_t * tree, char * tag) { @@ -239,7 +246,6 @@ static int pre_config_vm(struct v3_vm_info * vm, v3_cfg_tree_t * vm_cfg) { return -1; } - #ifdef CONFIG_TELEMETRY { char * telemetry = v3_cfg_val(vm_cfg, "telemetry"); @@ -278,7 +284,8 @@ static int determine_paging_mode(struct guest_info *info, v3_cfg_tree_t * core_c v3_cfg_tree_t *vm_tree = info->vm_info->cfg_data->cfg; v3_cfg_tree_t *pg_tree = v3_cfg_subtree(vm_tree, "paging"); - char *pg_mode = v3_cfg_val(pg_tree, "mode"); + char *pg_mode = v3_cfg_val(pg_tree, "mode"); + char *page_size = v3_cfg_val(pg_tree, "page_size"); PrintDebug("Paging mode specified as %s\n", pg_mode); @@ -297,13 +304,22 @@ static int determine_paging_mode(struct guest_info *info, v3_cfg_tree_t * core_c info->shdw_pg_mode = SHADOW_PAGING; } } else { - PrintDebug("No paging mode specified in configuration.\n"); + PrintDebug("No paging type specified in configuration. Defaulting to shadow paging\n"); info->shdw_pg_mode = SHADOW_PAGING; } if (info->shdw_pg_mode == NESTED_PAGING) { PrintDebug("Guest Paging Mode: NESTED_PAGING\n"); + if (strcasecmp(page_size, "4kb") == 0) { /* TODO: this may not be an ideal place for this */ + info->vm_info->paging_size = PAGING_4KB; + } else if (strcasecmp(page_size, "2mb") == 0) { + info->vm_info->paging_size = PAGING_2MB; + } else { + PrintError("Invalid VM paging size: '%s'\n", page_size); + return -1; + } + PrintDebug("VM page size=%s\n", page_size); } else if (info->shdw_pg_mode == SHADOW_PAGING) { PrintDebug("Guest Paging Mode: SHADOW_PAGING\n"); } else { @@ -311,11 +327,12 @@ static int determine_paging_mode(struct guest_info *info, v3_cfg_tree_t * core_c return -1; } - if (strcasecmp(v3_cfg_val(pg_tree, "large_pages"), "true") == 0) { - info->use_large_pages = 1; - PrintDebug("Use of large pages in memory virtualization enabled.\n"); + if (v3_cfg_val(pg_tree, "large_pages") != NULL) { + if (strcasecmp(v3_cfg_val(pg_tree, "large_pages"), "true") == 0) { + info->use_large_pages = 1; + PrintDebug("Use of large pages in memory virtualization enabled.\n"); + } } - return 0; }