X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_shadow_paging.c;h=65d19ee6fd49af042d66014bed43d2b66645b748;hb=901fc56e53aaae4ebd6e9c3f9879afc3288be824;hp=f4e9f32850786c6aad1e794667117870dc524980;hpb=6d9d2f66b15fba2d85c6f74c84eee68444219775;p=palacios.git diff --git a/palacios/src/palacios/vmm_shadow_paging.c b/palacios/src/palacios/vmm_shadow_paging.c index f4e9f32..65d19ee 100644 --- a/palacios/src/palacios/vmm_shadow_paging.c +++ b/palacios/src/palacios/vmm_shadow_paging.c @@ -47,6 +47,8 @@ #endif +static const char default_strategy[] = "VTLB"; + static struct hashtable * master_shdw_pg_table = NULL; @@ -141,22 +143,26 @@ int v3_init_shdw_pg_state(struct guest_info * core) { int v3_init_shdw_impl(struct v3_vm_info * vm) { struct v3_shdw_impl_state * impl_state = &(vm->shdw_impl); v3_cfg_tree_t * pg_cfg = v3_cfg_subtree(vm->cfg_data->cfg, "paging"); - char * type_name = v3_cfg_val(pg_cfg, "type"); - char * impl_name = v3_cfg_val(pg_cfg, "mode"); + char * pg_mode = v3_cfg_val(pg_cfg, "mode"); + char * pg_strat = v3_cfg_val(pg_cfg, "strategy"); struct v3_shdw_pg_impl * impl = NULL; PrintDebug("Checking if shadow paging requested.\n"); - if (type_name && (strcasecmp(type_name, "shadow") != 0)) { - PrintDebug("Shadow paging not specified for VM.\n"); + if ((pg_mode != NULL) && (strcasecmp(pg_mode, "nested") == 0)) { + PrintDebug("Nested paging specified - not initializing shadow paging.\n"); return 0; } + + if (pg_strat == NULL) { + pg_strat = (char *)default_strategy; + } V3_Print("Initialization of Shadow Paging implementation\n"); - impl = (struct v3_shdw_pg_impl *)v3_htable_search(master_shdw_pg_table, (addr_t)impl_name); + impl = (struct v3_shdw_pg_impl *)v3_htable_search(master_shdw_pg_table, (addr_t)pg_strat); if (impl == NULL) { - PrintError("Could not find shadow paging impl (%s)\n", impl_name); + PrintError("Could not find shadow paging impl (%s)\n", pg_strat); return -1; }