X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_ctrl_regs.c;h=1a287cd9e88a43f5db46e9257c8ae9828df32d17;hb=8f73ff87ab96b79b87854a2135c16b81cff879a3;hp=94a8d8589eaacbb53272aa8c0767c0e74c944d3a;hpb=9029ed7acfdc4bb51342173384e1861621044d12;p=palacios.git diff --git a/palacios/src/palacios/vmm_ctrl_regs.c b/palacios/src/palacios/vmm_ctrl_regs.c index 94a8d85..1a287cd 100644 --- a/palacios/src/palacios/vmm_ctrl_regs.c +++ b/palacios/src/palacios/vmm_ctrl_regs.c @@ -120,7 +120,7 @@ int v3_handle_cr0_write(struct guest_info * info) { if (v3_get_mem_mode(info) == VIRTUAL_MEM) { struct cr3_32 * shadow_cr3 = (struct cr3_32 *)&(info->shdw_pg_state.shadow_cr3); - + PrintDebug("Setting up Shadow Page Table\n"); info->ctrl_regs.cr3 = *(addr_t*)shadow_cr3; } else { info->ctrl_regs.cr3 = *(addr_t*)&(info->direct_map_pt); @@ -261,8 +261,9 @@ int v3_handle_cr3_write(struct guest_info * info) { *(uint_t*)shadow_cr3, *(uint_t*)guest_cr3); - cached = v3_cache_page_tables32(info, V3_PAddr((addr_t)CR3_TO_PDE32((void *)*(addr_t *)new_cr3))); + cached = v3_cache_page_tables32(info, (addr_t)V3_PAddr((void *)(addr_t)CR3_TO_PDE32((void *)*(addr_t *)new_cr3))); + if (cached == -1) { PrintError("CR3 Cache failed\n"); return -1; @@ -280,6 +281,7 @@ int v3_handle_cr3_write(struct guest_info * info) { PrintDebug("Reusing cached shadow Page table\n"); } + shadow_cr3->pwt = new_cr3->pwt; shadow_cr3->pcd = new_cr3->pcd;