X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_shadow_paging_64.h;h=5ed98b03e926cc8b3391a04e136039569fab1fa0;hb=bce4e326ef3e3e9f9a0bd2fd06254c0d8edb8437;hp=fbd3f3feb8fc430c076130f52f6ad6dba44662bb;hpb=2222a18071be7f4f665206a1bfa274b8f27f4fcc;p=palacios-OLD.git diff --git a/palacios/src/palacios/vmm_shadow_paging_64.h b/palacios/src/palacios/vmm_shadow_paging_64.h index fbd3f3f..5ed98b0 100644 --- a/palacios/src/palacios/vmm_shadow_paging_64.h +++ b/palacios/src/palacios/vmm_shadow_paging_64.h @@ -1,8 +1,19 @@ static inline int activate_shadow_pt_64(struct guest_info * info) { - // struct cr3_64 * shadow_cr3 = (struct cr3_64 *)&(info->ctrl_regs.cr3); - - return -1; + struct cr3_64 * shadow_cr3 = (struct cr3_64 *)&(info->ctrl_regs.cr3); + struct cr3_64 * guest_cr3 = (struct cr3_64 *)&(info->shdw_pg_state.guest_cr3); + addr_t shadow_pt = 0; + + shadow_pt = create_new_shadow_pt(info); + + shadow_cr3->pml4t_base_addr = (addr_t)V3_PAddr((void *)(addr_t)PAGE_BASE_ADDR_4KB(shadow_pt)); + PrintDebug("Creating new 64 bit shadow page table %p\n", (void *)BASE_TO_PAGE_ADDR(shadow_cr3->pml4t_base_addr)) + + + shadow_cr3->pwt = guest_cr3->pwt; + shadow_cr3->pcd = guest_cr3->pcd; + + return 0; } @@ -17,20 +28,30 @@ static inline int activate_shadow_pt_64(struct guest_info * info) { * * * * */ +/* +static int handle_2MB_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code, + pte64_t * shadow_pt, pde64_2MB_t * large_guest_pde); -static inline int handle_shadow_pagefault_64(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { - pt_access_status_t guest_access; - pt_access_status_t shadow_access; - int ret; - PrintDebug("64 bit shadow page fault\n"); - - ret = v3_check_guest_pt_32(info, info->shdw_pg_state.guest_cr3, fault_addr, error_code, &guest_access); +static int handle_pte_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code, + pte64_t * shadow_pt, pte64_t * guest_pt); - PrintDebug("Guest Access Check: %d (access=%d)\n", ret, guest_access); +static int handle_pde_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code, + pde64_t * shadow_pd, pde64_t * guest_pd); - ret = v3_check_host_pt_32(info->ctrl_regs.cr3, fault_addr, error_code, &shadow_access); +static int handle_pdpe_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code, + pdpe64_t * shadow_pdp, pdpe64_t * guest_pdp); +*/ - PrintDebug("Shadow Access Check: %d (access=%d)\n", ret, shadow_access); +static inline int handle_shadow_pagefault_64(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { + /* pml4e64_t * guest_pml = NULL; + pml4e64_t * shadow_pml = CR3_TO_PML4E64_VA(info->ctrl_regs.cr3); + addr_t guest_cr3 = CR3_TO_PML4E64_PA(info->shdw_pg_state.guest_cr3); + pt_access_status_t guest_pml_access; + pt_access_status_t shadow_pml_access; + pml4e64_t * guest_pmle = NULL; + // pml4e64_t * shadow_pmle = ; + */ + PrintError("64 bit shadow paging not implemented\n");