X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_shadow_paging.h;h=bdf01140425c611476dca5b4f9f0fe969b0733ac;hb=41d6dcb0a638ebdc01b89a9edf427c75975b2003;hp=7799e0650916f39d1bb4db68d538afcfbfe66d61;hpb=a109eb919a162bd7de58d62020801bc2e633be50;p=palacios.git diff --git a/palacios/include/palacios/vmm_shadow_paging.h b/palacios/include/palacios/vmm_shadow_paging.h index 7799e06..bdf0114 100644 --- a/palacios/include/palacios/vmm_shadow_paging.h +++ b/palacios/include/palacios/vmm_shadow_paging.h @@ -4,9 +4,6 @@ #include - - - #include struct shadow_page_state { @@ -14,34 +11,50 @@ struct shadow_page_state { // these two reflect the top-level page directory // of the guest page table paging_mode_t guest_mode; - reg_ex_t guest_cr3; // points to guest's current page table + ullong_t guest_cr3; // points to guest's current page table // Should this be here?? reg_ex_t guest_cr0; // these two reflect the top-level page directory - // the shadow page table + // of the shadow page table paging_mode_t shadow_mode; - reg_ex_t shadow_cr3; + ullong_t shadow_cr3; }; +struct guest_info; + + +int init_shadow_page_state(struct shadow_page_state * state); +addr_t create_new_shadow_pt32(struct guest_info * info); -struct guest_info; +addr_t setup_shadow_pt32(struct guest_info * info, addr_t virt_cr3); +addr_t setup_shadow_pte32(struct guest_info * info, addr_t pt_host_addr); +int handle_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code); +int handle_shadow_pagefault32(struct guest_info * info, addr_t fault_addr, pf_error_t error_code); + +int handle_shadow_pde32_fault(struct guest_info * info, + addr_t fault_addr, + pf_error_t error_code, + pde32_t * shadow_pde, + pde32_t * guest_pde); -int init_shadow_page_state(struct shadow_page_state * state); -// This function will cause the shadow page table to be deleted -// and rewritten to reflect the guest page table and the shadow map -int wholesale_update_shadow_page_state(struct guest_info * guest_info); +int handle_shadow_pte32_fault(struct guest_info* info, + addr_t fault_addr, + pf_error_t error_code, + pte32_t * shadow_pte, + pte32_t * guest_pte); +int handle_shadow_invlpg(struct guest_info * info); #endif