Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Cleanup and sanity-checking of integer overflow, null comparisons, dead code (Coverit...
[palacios.git] / palacios / src / palacios / svm_npt.h
1 #ifndef V3_CONFIG_SVM
2
3
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) 
6 {
7     PrintError(info->vm_info, info, "Cannot do nested page fault as SVM is not enabled.\n");
8     return -1;
9 }
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) 
12 {
13     PrintError(info->vm_info, info, "Cannot do invalidate nested addr as SVM is not enabled.\n");
14     return -1;
15 }
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) 
19 {
20     PrintError(info->vm_info, info, "Cannot do invalidate nested addr range as SVM is not enabled.\n");
21     return -1;
22 }
23
24 #else
25
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) 
28 {
29     pf_error_t error_code = *((pf_error_t *) pfinfo);
30     v3_cpu_mode_t mode = v3_get_host_cpu_mode();
31
32
33     PrintDebug(info->vm_info, info, "Nested PageFault: fault_addr=%p, error_code=%u\n", (void *)fault_addr, *(uint_t *)&error_code);
34
35     switch(mode) {
36         case REAL:
37         case PROTECTED:
38           return handle_passthrough_pagefault_32(info, fault_addr, error_code, actual_start, actual_end);
39             
40         case PROTECTED_PAE:
41           return handle_passthrough_pagefault_32pae(info, fault_addr, error_code, actual_start, actual_end);
42             
43         case LONG:
44         case LONG_32_COMPAT:
45           return handle_passthrough_pagefault_64(info, fault_addr, error_code, actual_start, actual_end);   
46             
47         default:
48             PrintError(info->vm_info, info, "Unknown CPU Mode\n");
49             break;
50     }
51     return -1;
52 }
53
54
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) {
57
58 #ifdef __V3_64BIT__
59     v3_cpu_mode_t mode = LONG;
60 #else 
61 #error Compilation for 32 bit target detected
62     v3_cpu_mode_t mode = PROTECTED;
63 #endif
64
65     switch(mode) {
66         // Note that the dead code here (for other than LONG and PROTECTED
67         // is kept here for clarity and parallelism with other impls
68         case REAL:
69         case PROTECTED:
70           return invalidate_addr_32(info, inv_addr, actual_start, actual_end);
71
72         case PROTECTED_PAE:
73           return invalidate_addr_32pae(info, inv_addr, actual_start, actual_end);
74
75         case LONG:
76         case LONG_32_COMPAT:
77           return invalidate_addr_64(info, inv_addr, actual_start, actual_end);      
78         
79         default:
80             PrintError(info->vm_info, info, "Unknown CPU Mode\n");
81             break;
82     }
83
84     return -1;
85 }
86
87 static int handle_svm_invalidate_nested_addr_range(struct guest_info * info, 
88                                                    addr_t inv_addr_start, addr_t inv_addr_end,
89                                                    addr_t *actual_start, addr_t *actual_end) 
90 {
91     
92 #ifdef __V3_64BIT__
93     v3_cpu_mode_t mode = LONG;
94 #else 
95 #error Compilation for 32 bit target detected
96     v3_cpu_mode_t mode = PROTECTED;
97 #endif
98
99     switch(mode) {
100         // dead code except for LONG and PROTECTED cases
101         // this is kept for clarity and parallelism with other implementations
102         case REAL:
103         case PROTECTED:
104           return invalidate_addr_32_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);
105
106         case PROTECTED_PAE:
107           return invalidate_addr_32pae_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);
108
109         case LONG:
110         case LONG_32_COMPAT:
111           return invalidate_addr_64_range(info, inv_addr_start, inv_addr_end, actual_start, actual_end);  
112         
113         default:
114             PrintError(info->vm_info, info, "Unknown CPU Mode\n");
115             break;
116     }
117
118     return -1;
119 }
120
121 #endif