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=821d7b369159ca09024fdf7a88f28077f5ad94d7;hp=783f6965aa8e3f2add8b09b6ca43cca5f374e3b2;hb=1fe82881720f7f9f64f789871f763aca93b47a7e;hpb=61d51be2ae5c4ba6d6824204d5a7136f21dd7d38 diff --git a/palacios/src/palacios/vmm_direct_paging.c b/palacios/src/palacios/vmm_direct_paging.c index 783f696..821d7b3 100644 --- a/palacios/src/palacios/vmm_direct_paging.c +++ b/palacios/src/palacios/vmm_direct_paging.c @@ -44,7 +44,7 @@ addr_t v3_create_direct_passthrough_pts(struct guest_info * info) { int v3_handle_passthrough_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { v3_vm_cpu_mode_t mode = v3_get_cpu_mode(info); - + switch(mode) { case REAL: case PROTECTED: @@ -62,3 +62,29 @@ int v3_handle_passthrough_pagefault(struct guest_info * info, addr_t fault_addr, } return -1; } + + + +int v3_handle_nested_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) { + // THIS IS VERY BAD + v3_vm_cpu_mode_t mode = LONG; + + switch(mode) { + case REAL: + case PROTECTED: + return handle_passthrough_pagefault_32(info, fault_addr, error_code); + + case PROTECTED_PAE: + return handle_passthrough_pagefault_32pae(info, fault_addr, error_code); + + case LONG: + case LONG_32_COMPAT: + return handle_passthrough_pagefault_64(info, fault_addr, error_code); + + default: + PrintError("Unknown CPU Mode\n"); + break; + } + return -1; +} +