X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_shadow_paging.c;h=434b34ed556b95ee36699015d357186fe344173b;hb=33b6aeb3258d1506b8e96e45e9b002554b664ca8;hp=33671a7d19e41f13e5391db67d0804c00add4f97;hpb=926e4e742c02e6f1255c8da243494c8bbddbf752;p=palacios.git diff --git a/palacios/src/palacios/vmm_shadow_paging.c b/palacios/src/palacios/vmm_shadow_paging.c index 33671a7..434b34e 100644 --- a/palacios/src/palacios/vmm_shadow_paging.c +++ b/palacios/src/palacios/vmm_shadow_paging.c @@ -141,15 +141,22 @@ 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 * 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 (pg_mode && (strcasecmp(pg_mode, "nested") == 0)) { + PrintDebug("Nested paging specified - not initializing shadow paging.\n"); + return 0; + } + 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; } @@ -218,9 +225,9 @@ int v3_handle_shadow_invlpg(struct guest_info * core) { } if (v3_get_vm_mem_mode(core) == PHYSICAL_MEM) { - ret = read_guest_pa_memory(core, get_addr_linear(core, core->rip, &(core->segments.cs)), 15, instr); + ret = v3_read_gpa_memory(core, get_addr_linear(core, core->rip, &(core->segments.cs)), 15, instr); } else { - ret = read_guest_va_memory(core, get_addr_linear(core, core->rip, &(core->segments.cs)), 15, instr); + ret = v3_read_gva_memory(core, get_addr_linear(core, core->rip, &(core->segments.cs)), 15, instr); } if (ret == -1) {