X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_shadow_paging_32.h;h=755c9a685f3dbb71c34329bf4a16a31d1cdf1cc9;hb=058a3adde5893927ae056a1d8fbccd5191d2446f;hp=4e2201125689431150e7fa53ac137b80c8ade3d6;hpb=266af4b5b19da7bee8e7445288c7c1cb3ee194c7;p=palacios.git diff --git a/palacios/src/palacios/vmm_shadow_paging_32.h b/palacios/src/palacios/vmm_shadow_paging_32.h index 4e22011..755c9a6 100644 --- a/palacios/src/palacios/vmm_shadow_paging_32.h +++ b/palacios/src/palacios/vmm_shadow_paging_32.h @@ -162,9 +162,9 @@ static inline int handle_shadow_pagefault_32(struct guest_info * info, addr_t fa // VMM Specific options - shadow_pde->write_through = 0; - shadow_pde->cache_disable = 0; - shadow_pde->global_page = 0; + shadow_pde->write_through = guest_pde->write_through; + shadow_pde->cache_disable = guest_pde->cache_disable; + shadow_pde->global_page = guest_pde->global_page; // guest_pde->accessed = 1; @@ -287,8 +287,7 @@ static int handle_large_pagefault_32(struct guest_info * info, struct v3_shadow_region * shdw_reg = v3_get_shadow_region(info, guest_fault_pa); - if ((shdw_reg == NULL) || - (shdw_reg->host_type == SHDW_REGION_INVALID)) { + if (shdw_reg == NULL) { // Inject a machine check in the guest PrintDebug("Invalid Guest Address in page table (0x%p)\n", (void *)guest_fault_pa); v3_raise_exception(info, MC_EXCEPTION); @@ -332,9 +331,9 @@ static int handle_large_pagefault_32(struct guest_info * info, } //set according to VMM policy - shadow_pte->write_through = 0; - shadow_pte->cache_disable = 0; - shadow_pte->global_page = 0; + shadow_pte->write_through = large_guest_pde->write_through; + shadow_pte->cache_disable = large_guest_pde->cache_disable; + shadow_pte->global_page = large_guest_pde->global_page; // } else { @@ -395,8 +394,7 @@ static int handle_shadow_pte32_fault(struct guest_info * info, struct v3_shadow_region * shdw_reg = v3_get_shadow_region(info, guest_pa); - if ((shdw_reg == NULL) || - (shdw_reg->host_type == SHDW_REGION_INVALID)) { + if (shdw_reg == NULL) { // Inject a machine check in the guest PrintDebug("Invalid Guest Address in page table (0x%p)\n", (void *)guest_pa); v3_raise_exception(info, MC_EXCEPTION); @@ -448,9 +446,9 @@ static int handle_shadow_pte32_fault(struct guest_info * info, shadow_pte->user_page = guest_pte->user_page; //set according to VMM policy - shadow_pte->write_through = 0; - shadow_pte->cache_disable = 0; - shadow_pte->global_page = 0; + shadow_pte->write_through = guest_pte->write_through; + shadow_pte->cache_disable = guest_pte->cache_disable; + shadow_pte->global_page = guest_pte->global_page; // guest_pte->accessed = 1;