X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fmmu%2Fvmm_shdw_pg_kvm.c;h=72e63af8dd571bea9f2d7ef61e2e3e890b351771;hb=a0bff8bd6b7f6dcfc840b41aa428904f251fba7e;hp=decf6b91b53e2b1b1b9e6236c2e0ff1246395801;hpb=a09147e0a8dad8403a661d9e0fc06b18e8c4b4e3;p=palacios.git diff --git a/palacios/src/palacios/mmu/vmm_shdw_pg_kvm.c b/palacios/src/palacios/mmu/vmm_shdw_pg_kvm.c index decf6b9..72e63af 100644 --- a/palacios/src/palacios/mmu/vmm_shdw_pg_kvm.c +++ b/palacios/src/palacios/mmu/vmm_shdw_pg_kvm.c @@ -12,12 +12,12 @@ #include -#ifndef CONFIG_DEBUG_SHDW_CACHE +#ifndef V3_CONFIG_DEBUG_SHDW_CACHE #undef PrintDebug #define PrintDebug(fmt, ...) #endif -#ifdef CONFIG_SHADOW_CACHE +#ifdef V3_CONFIG_SHADOW_CACHE struct pde_chain { addr_t shadow_pdes[NR_PTE_CHAIN_ENTRIES]; @@ -116,8 +116,13 @@ static void shadow_free_page (struct guest_info * core, struct shadow_page_cache { list_del(&page->link); - V3_FreePage((void *)page->page_pa); + V3_FreePages((void *)page->page_pa, 1); page->page_pa=(addr_t)V3_AllocPages(1); + + if (!page->page_pa) { + PrintError("Freeing shadow page failed on allocation\n"); + return; + } list_add(&page->link,&core->free_pages); ++core->n_free_shadow_pages; @@ -163,7 +168,7 @@ static void free_shadow_pages(struct guest_info * core) while (!list_empty(&core->free_pages)) { page = list_entry(core->free_pages.next, struct shadow_page_cache_data, link); list_del(&page->link); - V3_FreePage((void *)page->page_pa); + V3_FreePages((void *)page->page_pa, 1); page->page_pa = ~(addr_t)0; //invalid address } } @@ -178,6 +183,7 @@ static int alloc_shadow_pages(struct guest_info * core) INIT_LIST_HEAD(&page_header->link); if (!(page_header->page_pa = (addr_t)V3_AllocPages(1))) { + PrintError("Allocation failed in allocating shadow page\n"); goto error_1; } addr_t shdw_page = (addr_t)V3_VAddr((void *)(page_header->page_pa)); @@ -619,7 +625,7 @@ static void shadow_zap_page(struct guest_info * core, struct shadow_page_cache_d } shadow_page_put_page(core, page, shadow_pde); PrintDebug("zap_parent: pde: shadow %p\n",(void *)*((addr_t *)shadow_pde)); - memset((void *)shadow_pde, 0, sizeof(struct pde32)); + memset((void *)shadow_pde, 0, sizeof(uint32_t)); } shadow_page_unlink_children(core, page); @@ -675,7 +681,7 @@ int shadow_zap_hierarchy_32(struct guest_info * core, struct shadow_page_cache_d guest_pde = (pde32_t*)&(guest_pd[i]); present = shadow_pde->present; if (shadow_pde->present) PrintDebug("ulink_child: pde shadow %x\n", *((uint32_t*)shadow_pde)); - memset((void*)shadow_pde, 0, sizeof(struct pde32)); + memset((void*)shadow_pde, 0, sizeof(uint32_t)); if (present != 1) continue; struct shadow_page_cache_data *shdw_page;