Updated default.xml appropriately.
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_type = v3_cfg_val(pg_tree, "type");
+ char *pg_type = v3_cfg_val(vm_tree, "paging");
char *pg_mode = v3_cfg_val(pg_tree, "mode");
PrintDebug("Paging mode specified as %s(%s)\n", pg_type, pg_mode);
return -1;
}
- if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
- PrintError("Could not translate fault address (%p)\n", (void *)fault_addr);
- return -1;
- }
-
// Lookup the correct PDE address based on the PAGING MODE
if (info->shdw_pg_mode == SHADOW_PAGING) {
pde = CR3_TO_PDE32_VA(info->ctrl_regs.cr3);
} else {
pte[pte_index].writable = 0;
}
+
+ if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
+ PrintError("Could not translate fault address (%p)\n", (void *)fault_addr);
+ return -1;
+ }
pte[pte_index].page_base_addr = PAGE_BASE_ADDR(host_addr);
} else {
return -1;
}
- if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
- PrintError("Could not translate fault address (%p)\n", (void *)fault_addr);
- return -1;
- }
-
// Lookup the correct PDPE address based on the PAGING MODE
if (info->shdw_pg_mode == SHADOW_PAGING) {
pdpe = CR3_TO_PDPE32PAE_VA(info->ctrl_regs.cr3);
pte[pte_index].writable = 0;
}
+ if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
+ PrintError("Could not translate fault address (%p)\n", (void *)fault_addr);
+ return -1;
+ }
+
pte[pte_index].page_base_addr = PAGE_BASE_ADDR(host_addr);
} else {
return region->unhandled(info, fault_addr, fault_addr, region, error_code);
return -1;
}
- if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
- PrintError("Error Could not translate fault addr (%p)\n", (void *)fault_addr);
- return -1;
- }
-
-
// Lookup the correct PML address based on the PAGING MODE
if (info->shdw_pg_mode == SHADOW_PAGING) {
pml = CR3_TO_PML4E64_VA(info->ctrl_regs.cr3);
pte[pte_index].writable = 0;
}
+ if (v3_gpa_to_hpa(info, fault_addr, &host_addr) == -1) {
+ PrintError("Error Could not translate fault addr (%p)\n", (void *)fault_addr);
+ return -1;
+ }
+
pte[pte_index].page_base_addr = PAGE_BASE_ADDR(host_addr);
} else {
return region->unhandled(info, fault_addr, fault_addr, region, error_code);
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_type = v3_cfg_val(vm->cfg_data->cfg, "paging");
+ char * pg_mode = v3_cfg_val(pg_cfg, "mode");
struct v3_shdw_pg_impl * impl = NULL;
PrintDebug("Checking if shadow paging requested.\n");
- if (type_name && (strcasecmp(type_name, "nested") == 0)) {
+ if (pg_type && (strcasecmp(pg_type, "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_mode);
if (impl == NULL) {
- PrintError("Could not find shadow paging impl (%s)\n", impl_name);
+ PrintError("Could not find shadow paging impl (%s)\n", pg_mode);
return -1;
}
<!-- Basic VMM system flags -->
<telemetry>enable</telemetry>
- <paging type="shadow" mode="VTLB"/>
- <!-- <paging type="nested" mode="4KB"/> -->
+ <paging mode="VTLB">shadow</paging>
+ <!-- <paging mode="4KB">nested</paging> -->
<schedule_hz>100</schedule_hz>
<cores count="1"><core /></cores>