4 static int handle_svm_nested_pagefault(struct guest_info * info, addr_t fault_addr, void *pfinfo,
5 addr_t *actual_start, addr_t *actual_end)
7 PrintError(info->vm_info, info, "Cannot do nested page fault as SVM is not enabled.\n");
10 static int handle_svm_invalidate_nested_addr(struct guest_info * info, addr_t inv_addr,
11 addr_t *actual_start, addr_t *actual_end)
13 PrintError(info->vm_info, info, "Cannot do invalidate nested addr as SVM is not enabled.\n");
16 static int handle_svm_invalidate_nested_addr_range(struct guest_info * info,
17 addr_t inv_addr_start, addr_t inv_addr_end,
18 addr_t *actual_start, addr_t *actual_end)
20 PrintError(info->vm_info, info, "Cannot do invalidate nested addr range as SVM is not enabled.\n");
26 static int handle_svm_nested_pagefault(struct guest_info * info, addr_t fault_addr, void *pfinfo,
27 addr_t *actual_start, addr_t *actual_end)
29 pf_error_t error_code = *((pf_error_t *) pfinfo);
30 v3_cpu_mode_t mode = v3_get_host_cpu_mode();
33 PrintDebug(info->vm_info, info, "Nested PageFault: fault_addr=%p, error_code=%u\n", (void *)fault_addr, *(uint_t *)&error_code);
38 return handle_passthrough_pagefault_32(info, fault_addr, error_code, actual_start, actual_end);
41 return handle_passthrough_pagefault_32pae(info, fault_addr, error_code, actual_start, actual_end);
45 return handle_passthrough_pagefault_64(info, fault_addr, error_code, actual_start, actual_end);
48 PrintError(info->vm_info, info, "Unknown CPU Mode\n");
55 static int handle_svm_invalidate_nested_addr(struct guest_info * info, addr_t inv_addr,
56 addr_t *actual_start, addr_t *actual_end) {
59 v3_cpu_mode_t mode = LONG;
61 #error Compilation for 32 bit target detected
62 v3_cpu_mode_t mode = PROTECTED;
68 return invalidate_addr_32(info, inv_addr, actual_start, actual_end);
71 return invalidate_addr_32pae(info, inv_addr, actual_start, actual_end);
75 return invalidate_addr_64(info, inv_addr, actual_start, actual_end);
78 PrintError(info->vm_info, info, "Unknown CPU Mode\n");
85 static int handle_svm_invalidate_nested_addr_range(struct guest_info * info,
86 addr_t inv_addr_start, addr_t inv_addr_end,
87 addr_t *actual_start, addr_t *actual_end)
91 v3_cpu_mode_t mode = LONG;
93 #error Compilation for 32 bit target detected
94 v3_cpu_mode_t mode = PROTECTED;
100 return invalidate_addr_32_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);
103 return invalidate_addr_32pae_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);
107 return invalidate_addr_64_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);
110 PrintError(info->vm_info, info, "Unknown CPU Mode\n");