X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_direct_paging.c;h=1f2c6e678daac540c9f184954ab7632de1bd082f;hp=2e86dbe2dcce0987c44ea59ead044565eb6342fd;hb=b06d0d0e5e57f5c4163a69efcabe6f96594ad814;hpb=defcfbf9d03f49b7895ba23ca510782477a3425c diff --git a/palacios/src/palacios/vmm_direct_paging.c b/palacios/src/palacios/vmm_direct_paging.c index 2e86dbe..1f2c6e6 100644 --- a/palacios/src/palacios/vmm_direct_paging.c +++ b/palacios/src/palacios/vmm_direct_paging.c @@ -137,6 +137,46 @@ int v3_handle_nested_pagefault(struct guest_info * info, addr_t fault_addr, pf_e } int v3_invalidate_passthrough_addr(struct guest_info * info, addr_t inv_addr) { + v3_vm_cpu_mode_t mode = v3_get_cpu_mode(info); + + switch(mode) { + case REAL: + case PROTECTED: + return invalidate_addr_32(info, inv_addr); + + case PROTECTED_PAE: + case LONG: + case LONG_32_COMPAT: + // Long mode will only use 32PAE page tables... + return invalidate_addr_32pae(info, inv_addr); + + default: + PrintError("Unknown CPU Mode\n"); + break; + } + return -1; +} + + +int v3_invalidate_nested_addr(struct guest_info * info, addr_t inv_addr) { + v3_vm_cpu_mode_t mode = LONG; + + switch(mode) { + case REAL: + case PROTECTED: + return invalidate_addr_32(info, inv_addr); + + case PROTECTED_PAE: + return invalidate_addr_32pae(info, inv_addr); + + case LONG: + case LONG_32_COMPAT: + return invalidate_addr_64(info, inv_addr); + + default: + PrintError("Unknown CPU Mode\n"); + break; + } return -1; }