static addr_t create_ept_page() {
+ void * temp;
void * page = 0;
- page = V3_VAddr(V3_AllocPages(1));
+
+ temp = V3_AllocPages(1);
+ if (!temp) {
+ PrintError("Cannot allocate EPT page\n");
+ return 0;
+ }
+ page = V3_VAddr(temp);
memset(page, 0, PAGE_SIZE);
return (addr_t)page;
int pde_index = PDE64_INDEX(fault_addr);
int pte_index = PTE64_INDEX(fault_addr);
- struct v3_mem_region * region = v3_get_mem_region(core->vm_info, core->cpu_id, fault_addr);
+ struct v3_mem_region * region = v3_get_mem_region(core->vm_info, core->vcpu_id, fault_addr);
int page_size = PAGE_SIZE_4KB;
// 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 {
// 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;