X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx_ept.c;h=08e676548123a406535aa7afb876c35b1f662eab;hb=89537429397b93017ff307983442321665028f98;hp=d239bd2fe7107a8d59785d549c6638cd8e5ccc59;hpb=b7093fd3602ef2c796a1f8a0daded9d6aad0b756;p=palacios.git diff --git a/palacios/src/palacios/vmx_ept.c b/palacios/src/palacios/vmx_ept.c index d239bd2..08e6765 100644 --- a/palacios/src/palacios/vmx_ept.c +++ b/palacios/src/palacios/vmx_ept.c @@ -30,9 +30,9 @@ static addr_t create_ept_page() { void * temp; void * page = 0; - temp = V3_AllocPages(1); + temp = V3_AllocPages(1); // need not be shadow-safe, not exposed to guest if (!temp) { - PrintError("Cannot allocate EPT page\n"); + PrintError(VM_NONE, VCORE_NONE, "Cannot allocate EPT page\n"); return 0; } page = V3_VAddr(temp); @@ -57,7 +57,7 @@ int v3_init_ept(struct guest_info * core, struct vmx_hw_info * hw_info) { if (ept_info->pg_walk_len4) { ept_ptr->pwl1 = 3; } else { - PrintError("Unsupported EPT Table depth\n"); + PrintError(core->vm_info, core, "Unsupported EPT Table depth\n"); return -1; } @@ -94,7 +94,7 @@ int v3_handle_ept_fault(struct guest_info * core, addr_t fault_addr, struct ept_ error_code.write = ept_qual->write; if (region == NULL) { - PrintError("invalid region, addr=%p\n", (void *)fault_addr); + PrintError(core->vm_info, core, "invalid region, addr=%p\n", (void *)fault_addr); return -1; } @@ -151,7 +151,9 @@ int v3_handle_ept_fault(struct guest_info * core, addr_t fault_addr, struct ept_ // Full access pde2mb[pde_index].read = 1; pde2mb[pde_index].exec = 1; - + pde2mb[pde_index].ipat = 1; + pde2mb[pde_index].mt = 6; + if (region->flags.write == 1) { pde2mb[pde_index].write = 1; } else { @@ -159,7 +161,7 @@ int v3_handle_ept_fault(struct guest_info * core, addr_t fault_addr, struct ept_ } if (v3_gpa_to_hpa(core, fault_addr, &host_addr) == -1) { - PrintError("Error: Could not translate fault addr (%p)\n", (void *)fault_addr); + PrintError(core->vm_info, core, "Error: Could not translate fault addr (%p)\n", (void *)fault_addr); return -1; } @@ -204,6 +206,8 @@ int v3_handle_ept_fault(struct guest_info * core, addr_t fault_addr, struct ept_ // Full access pte[pte_index].read = 1; pte[pte_index].exec = 1; + pte[pte_index].ipat = 1; + pte[pte_index].mt = 6; if (region->flags.write == 1) { pte[pte_index].write = 1; @@ -212,7 +216,7 @@ int v3_handle_ept_fault(struct guest_info * core, addr_t fault_addr, struct ept_ } if (v3_gpa_to_hpa(core, fault_addr, &host_addr) == -1) { - PrintError("Error Could not translate fault addr (%p)\n", (void *)fault_addr); + PrintError(core->vm_info, core, "Error Could not translate fault addr (%p)\n", (void *)fault_addr); return -1; }