X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_paging.c;h=417c2f93515dea880cd57b1b2c2209dd56e7eca7;hb=1b9bba809bf9c1d6ada56c7e4f8910e7afb82557;hp=1030fe229d856e3092081945e8cb726c03ad5235;hpb=14fa18cc54571eaa7aaa0f7d55677bdb4dad81a6;p=palacios.git diff --git a/palacios/src/palacios/vmm_paging.c b/palacios/src/palacios/vmm_paging.c index 1030fe2..417c2f9 100644 --- a/palacios/src/palacios/vmm_paging.c +++ b/palacios/src/palacios/vmm_paging.c @@ -46,7 +46,7 @@ static pt_entry_type_t pte64_lookup(pte64_t * pt, addr_t addr, addr_t * entry); -#ifndef CONFIG_DEBUG_SHADOW_PAGING +#ifndef V3_CONFIG_DEBUG_SHADOW_PAGING #undef PrintDebug #define PrintDebug(fmt, args...) #endif @@ -67,11 +67,11 @@ void delete_page_tables_32(pde32_t * pde) { // We double cast, first to an addr_t to handle 64 bit issues, then to the pointer PrintDebug("Deleting PT Page %d (%p)\n", i, (void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[i].pt_base_addr)); - V3_FreePage((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[i].pt_base_addr)); + V3_FreePages((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[i].pt_base_addr), 1); } } - V3_FreePage(V3_PAddr(pde)); + V3_FreePages(V3_PAddr(pde), 1); } void delete_page_tables_32pae(pdpe32pae_t * pdpe) { @@ -96,13 +96,13 @@ void delete_page_tables_32pae(pdpe32pae_t * pdpe) { continue; } - V3_FreePage((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[j].pt_base_addr)); + V3_FreePages((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[j].pt_base_addr), 1); } - V3_FreePage(V3_PAddr(pde)); + V3_FreePages(V3_PAddr(pde), 1); } - V3_FreePage(V3_PAddr(pdpe)); + V3_FreePages(V3_PAddr(pdpe), 1); } void delete_page_tables_64(pml4e64_t * pml4) { @@ -133,16 +133,16 @@ void delete_page_tables_64(pml4e64_t * pml4) { continue; } - V3_FreePage((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[k].pt_base_addr)); + V3_FreePages((void *)(addr_t)BASE_TO_PAGE_ADDR_4KB(pde[k].pt_base_addr), 1); } - V3_FreePage(V3_PAddr(pde)); + V3_FreePages(V3_PAddr(pde), 1); } - V3_FreePage(V3_PAddr(pdpe)); + V3_FreePages(V3_PAddr(pdpe), 1); } - V3_FreePage(V3_PAddr(pml4)); + V3_FreePages(V3_PAddr(pml4), 1); } @@ -656,9 +656,11 @@ static pt_entry_type_t pdpe64_lookup(pdpe64_t * pdp, addr_t addr, addr_t * entry *entry = 0; return PT_ENTRY_NOT_PRESENT; } else if (pdpe_entry->large_page) { - PrintError("1 Gigabyte pages not supported\n"); - V3_ASSERT(0); - return -1; + pdpe64_1GB_t * large_pdp = (pdpe64_1GB_t *)pdpe_entry; + + *entry = BASE_TO_PAGE_ADDR_1GB(large_pdp->page_base_addr); + + return PT_ENTRY_LARGE_PAGE; } else { *entry = BASE_TO_PAGE_ADDR(pdpe_entry->pd_base_addr); return PT_ENTRY_PAGE; @@ -971,9 +973,7 @@ int v3_drill_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t va addr_t large_page_va = 0; if (v3_gpa_to_hva(info, large_page_pa, &large_page_va) == -1) { - PrintError("Could not get virtual address of Guest Page 4MB (PA=%p)\n", - (void *)large_page_va); - return -1; + large_page_va = 0 ; } @@ -1003,9 +1003,7 @@ int v3_drill_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t va addr_t page_va; if (v3_gpa_to_hva(info, page_pa, &page_va) == -1) { - PrintError("Could not get virtual address of Guest Page 4KB (PA=%p)\n", - (void *)page_pa); - return -1; + page_va = 0; } if ((ret = callback(info, PAGE_4KB, vaddr, page_va, page_pa, private_data)) != 0) { @@ -1070,9 +1068,7 @@ int v3_drill_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t addr_t large_page_va = 0; if (v3_gpa_to_hva(info, large_page_pa, &large_page_va) == -1) { - PrintDebug("Could not get virtual address of Guest Page 2MB (PA=%p)\n", - (void *)large_page_va); - + large_page_va = 0; } if ((ret == callback(info, PAGE_2MB, vaddr, large_page_va, large_page_pa, private_data)) != 0) { @@ -1101,9 +1097,7 @@ int v3_drill_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t addr_t page_va; if (v3_gpa_to_hva(info, page_pa, &page_va) == -1) { - PrintError("Could not get virtual address of Guest Page 4KB (PA=%p)\n", - (void *)page_pa); - return -1; + page_va = 0; } if ((ret = callback(info, PAGE_4KB, vaddr, page_va, page_pa, private_data)) != 0) { @@ -1169,9 +1163,7 @@ int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t va addr_t large_page_va = 0; if (v3_gpa_to_hva(info, large_page_pa, &large_page_va) == -1) { - PrintDebug("Could not get virtual address of Guest Page 1GB (PA=%p)\n", - (void *)large_page_va); - + large_page_va = 0; } if ((ret == callback(info, PAGE_1GB, vaddr, large_page_va, large_page_pa, private_data)) != 0) { @@ -1204,9 +1196,7 @@ int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t va addr_t large_page_va = 0; if (v3_gpa_to_hva(info, large_page_pa, &large_page_va) == -1) { - PrintDebug("Could not get virtual address of Guest Page 2MB (PA=%p)\n", - (void *)large_page_va); - + large_page_va = 0; } if ((ret == callback(info, PAGE_2MB, vaddr, large_page_va, large_page_pa, private_data)) != 0) { @@ -1235,9 +1225,7 @@ int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t va addr_t page_va; if (v3_gpa_to_hva(info, page_pa, &page_va) == -1) { - PrintError("Could not get virtual address of Guest Page 4KB (PA=%p)\n", - (void *)page_pa); - return -1; + page_va = 0; } if ((ret = callback(info, PAGE_4KB, vaddr, page_va, page_pa, private_data)) != 0) {