Changeset 61414 in vbox for trunk/src/VBox/VMM/VMMR3/HM.cpp
- Timestamp:
- Jun 2, 2016 3:30:09 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/HM.cpp
r61155 r61414 23 23 * {summary of what HM does} 24 24 * 25 * Hardware assi ted virtualization manager was origianlly abriviated HWACCM,25 * Hardware assisted virtualization manager was originally abbreviated HWACCM, 26 26 * however that was cumbersome to write and parse for such a central component, 27 * so it was shorte d to HM when refactoring the code in the 4.3 development27 * so it was shortened to HM when refactoring the code in the 4.3 development 28 28 * cycle. 29 29 * … … 77 77 static const char * const g_apszVTxExitReasons[MAX_EXITREASON_STAT] = 78 78 { 79 EXIT_REASON(VMX_EXIT_XCPT_OR_NMI ,0, "Exception or non-maskable interrupt (NMI)."),80 EXIT_REASON(VMX_EXIT_EXT_INT ,1, "External interrupt."),81 EXIT_REASON(VMX_EXIT_TRIPLE_FAULT ,2, "Triple fault."),82 EXIT_REASON(VMX_EXIT_INIT_SIGNAL ,3, "INIT signal."),83 EXIT_REASON(VMX_EXIT_SIPI ,4, "Start-up IPI (SIPI)."),84 EXIT_REASON(VMX_EXIT_IO_SMI_IRQ ,5, "I/O system-management interrupt (SMI)."),85 EXIT_REASON(VMX_EXIT_SMI_IRQ ,6, "Other SMI."),86 EXIT_REASON(VMX_EXIT_INT_WINDOW ,7, "Interrupt window."),87 EXIT_REASON(VMX_EXIT_NMI_WINDOW ,8, "NMI window."),88 EXIT_REASON(VMX_EXIT_TASK_SWITCH ,9, "Task switch."),89 EXIT_REASON(VMX_EXIT_CPUID ,10, "CPUID instruction."),79 EXIT_REASON(VMX_EXIT_XCPT_OR_NMI , 0, "Exception or non-maskable interrupt (NMI)."), 80 EXIT_REASON(VMX_EXIT_EXT_INT , 1, "External interrupt."), 81 EXIT_REASON(VMX_EXIT_TRIPLE_FAULT , 2, "Triple fault."), 82 EXIT_REASON(VMX_EXIT_INIT_SIGNAL , 3, "INIT signal."), 83 EXIT_REASON(VMX_EXIT_SIPI , 4, "Start-up IPI (SIPI)."), 84 EXIT_REASON(VMX_EXIT_IO_SMI_IRQ , 5, "I/O system-management interrupt (SMI)."), 85 EXIT_REASON(VMX_EXIT_SMI_IRQ , 6, "Other SMI."), 86 EXIT_REASON(VMX_EXIT_INT_WINDOW , 7, "Interrupt window."), 87 EXIT_REASON(VMX_EXIT_NMI_WINDOW , 8, "NMI window."), 88 EXIT_REASON(VMX_EXIT_TASK_SWITCH , 9, "Task switch."), 89 EXIT_REASON(VMX_EXIT_CPUID , 10, "CPUID instruction."), 90 90 EXIT_REASON_NIL(), 91 EXIT_REASON(VMX_EXIT_HLT ,12, "HLT instruction."),92 EXIT_REASON(VMX_EXIT_INVD ,13, "INVD instruction."),93 EXIT_REASON(VMX_EXIT_INVLPG ,14, "INVLPG instruction."),94 EXIT_REASON(VMX_EXIT_RDPMC ,15, "RDPMCinstruction."),95 EXIT_REASON(VMX_EXIT_RDTSC ,16, "RDTSC instruction."),96 EXIT_REASON(VMX_EXIT_RSM ,17, "RSM instruction in SMM."),97 EXIT_REASON(VMX_EXIT_VMCALL ,18, "VMCALL instruction."),98 EXIT_REASON(VMX_EXIT_VMCLEAR ,19, "VMCLEAR instruction."),99 EXIT_REASON(VMX_EXIT_VMLAUNCH ,20, "VMLAUNCH instruction."),100 EXIT_REASON(VMX_EXIT_VMPTRLD ,21, "VMPTRLD instruction."),101 EXIT_REASON(VMX_EXIT_VMPTRST ,22, "VMPTRST instruction."),102 EXIT_REASON(VMX_EXIT_VMREAD ,23, "VMREAD instruction."),103 EXIT_REASON(VMX_EXIT_VMRESUME ,24, "VMRESUME instruction."),104 EXIT_REASON(VMX_EXIT_VMWRITE ,25, "VMWRITE instruction."),105 EXIT_REASON(VMX_EXIT_VMXOFF ,26, "VMXOFF instruction."),106 EXIT_REASON(VMX_EXIT_VMXON ,27, "VMXON instruction."),107 EXIT_REASON(VMX_EXIT_MOV_CRX ,28, "Control-register accesses."),108 EXIT_REASON(VMX_EXIT_MOV_DRX ,29, "Debug-register accesses."),109 EXIT_REASON(VMX_EXIT_PORT_IO ,30, "I/O instruction."),110 EXIT_REASON(VMX_EXIT_RDMSR ,31, "RDMSR instruction."),111 EXIT_REASON(VMX_EXIT_WRMSR ,32, "WRMSR instruction."),91 EXIT_REASON(VMX_EXIT_HLT , 12, "HLT instruction."), 92 EXIT_REASON(VMX_EXIT_INVD , 13, "INVD instruction."), 93 EXIT_REASON(VMX_EXIT_INVLPG , 14, "INVLPG instruction."), 94 EXIT_REASON(VMX_EXIT_RDPMC , 15, "RDPMCinstruction."), 95 EXIT_REASON(VMX_EXIT_RDTSC , 16, "RDTSC instruction."), 96 EXIT_REASON(VMX_EXIT_RSM , 17, "RSM instruction in SMM."), 97 EXIT_REASON(VMX_EXIT_VMCALL , 18, "VMCALL instruction."), 98 EXIT_REASON(VMX_EXIT_VMCLEAR , 19, "VMCLEAR instruction."), 99 EXIT_REASON(VMX_EXIT_VMLAUNCH , 20, "VMLAUNCH instruction."), 100 EXIT_REASON(VMX_EXIT_VMPTRLD , 21, "VMPTRLD instruction."), 101 EXIT_REASON(VMX_EXIT_VMPTRST , 22, "VMPTRST instruction."), 102 EXIT_REASON(VMX_EXIT_VMREAD , 23, "VMREAD instruction."), 103 EXIT_REASON(VMX_EXIT_VMRESUME , 24, "VMRESUME instruction."), 104 EXIT_REASON(VMX_EXIT_VMWRITE , 25, "VMWRITE instruction."), 105 EXIT_REASON(VMX_EXIT_VMXOFF , 26, "VMXOFF instruction."), 106 EXIT_REASON(VMX_EXIT_VMXON , 27, "VMXON instruction."), 107 EXIT_REASON(VMX_EXIT_MOV_CRX , 28, "Control-register accesses."), 108 EXIT_REASON(VMX_EXIT_MOV_DRX , 29, "Debug-register accesses."), 109 EXIT_REASON(VMX_EXIT_PORT_IO , 30, "I/O instruction."), 110 EXIT_REASON(VMX_EXIT_RDMSR , 31, "RDMSR instruction."), 111 EXIT_REASON(VMX_EXIT_WRMSR , 32, "WRMSR instruction."), 112 112 EXIT_REASON(VMX_EXIT_ERR_INVALID_GUEST_STATE, 33, "VM-entry failure due to invalid guest state."), 113 EXIT_REASON(VMX_EXIT_ERR_MSR_LOAD , 34, "VM-entry failure due to MSR loading."), 113 EXIT_REASON(VMX_EXIT_ERR_MSR_LOAD , 34, "VM-entry failure due to MSR loading."), 114 EXIT_REASON(VMX_EXIT_MWAIT , 36, "MWAIT instruction."), 115 EXIT_REASON(VMX_EXIT_MTF , 37, "Monitor Trap Flag."), 116 EXIT_REASON(VMX_EXIT_MONITOR , 39, "MONITOR instruction."), 117 EXIT_REASON(VMX_EXIT_PAUSE , 40, "PAUSE instruction."), 118 EXIT_REASON(VMX_EXIT_ERR_MACHINE_CHECK , 41, "VM-entry failure due to machine-check."), 114 119 EXIT_REASON_NIL(), 115 EXIT_REASON(VMX_EXIT_MWAIT , 36, "MWAIT instruction."), 116 EXIT_REASON(VMX_EXIT_MTF , 37, "Monitor Trap Flag."), 120 EXIT_REASON(VMX_EXIT_TPR_BELOW_THRESHOLD , 43, "TPR below threshold (MOV to CR8)."), 121 EXIT_REASON(VMX_EXIT_APIC_ACCESS , 44, "APIC access."), 122 EXIT_REASON(VMX_EXIT_XDTR_ACCESS , 46, "Access to GDTR or IDTR using LGDT, LIDT, SGDT, or SIDT."), 123 EXIT_REASON(VMX_EXIT_TR_ACCESS , 47, "Access to LDTR or TR using LLDT, LTR, SLDT, or STR."), 124 EXIT_REASON(VMX_EXIT_EPT_VIOLATION , 48, "EPT violation."), 125 EXIT_REASON(VMX_EXIT_EPT_MISCONFIG , 49, "EPT misconfiguration."), 126 EXIT_REASON(VMX_EXIT_INVEPT , 50, "INVEPT instruction."), 127 EXIT_REASON(VMX_EXIT_RDTSCP , 51, "RDTSCP instruction."), 128 EXIT_REASON(VMX_EXIT_PREEMPT_TIMER , 52, "VMX-preemption timer expired."), 129 EXIT_REASON(VMX_EXIT_INVVPID , 53, "INVVPID instruction."), 130 EXIT_REASON(VMX_EXIT_WBINVD , 54, "WBINVD instruction."), 131 EXIT_REASON(VMX_EXIT_XSETBV , 55, "XSETBV instruction."), 132 EXIT_REASON(VMX_EXIT_RDRAND , 57, "RDRAND instruction."), 133 EXIT_REASON(VMX_EXIT_INVPCID , 58, "INVPCID instruction."), 134 EXIT_REASON(VMX_EXIT_VMFUNC , 59, "VMFUNC instruction."), 117 135 EXIT_REASON_NIL(), 118 EXIT_REASON(VMX_EXIT_MONITOR , 39, "MONITOR instruction."), 119 EXIT_REASON(VMX_EXIT_PAUSE , 40, "PAUSE instruction."), 120 EXIT_REASON(VMX_EXIT_ERR_MACHINE_CHECK , 41, "VM-entry failure due to machine-check."), 136 EXIT_REASON(VMX_EXIT_RDSEED , 61, "RDSEED instruction."), 121 137 EXIT_REASON_NIL(), 122 EXIT_REASON(VMX_EXIT_TPR_BELOW_THRESHOLD, 43, "TPR below threshold (MOV to CR8)."), 123 EXIT_REASON(VMX_EXIT_APIC_ACCESS , 44, "APIC access."), 124 EXIT_REASON_NIL(), 125 EXIT_REASON(VMX_EXIT_XDTR_ACCESS , 46, "Access to GDTR or IDTR using LGDT, LIDT, SGDT, or SIDT."), 126 EXIT_REASON(VMX_EXIT_TR_ACCESS , 47, "Access to LDTR or TR using LLDT, LTR, SLDT, or STR."), 127 EXIT_REASON(VMX_EXIT_EPT_VIOLATION , 48, "EPT violation."), 128 EXIT_REASON(VMX_EXIT_EPT_MISCONFIG , 49, "EPT misconfiguration."), 129 EXIT_REASON(VMX_EXIT_INVEPT , 50, "INVEPT instruction."), 130 EXIT_REASON(VMX_EXIT_RDTSCP , 51, "RDTSCP instruction."), 131 EXIT_REASON(VMX_EXIT_PREEMPT_TIMER , 52, "VMX-preemption timer expired."), 132 EXIT_REASON(VMX_EXIT_INVVPID , 53, "INVVPID instruction."), 133 EXIT_REASON(VMX_EXIT_WBINVD , 54, "WBINVD instruction."), 134 EXIT_REASON(VMX_EXIT_XSETBV , 55, "XSETBV instruction."), 135 EXIT_REASON_NIL(), 136 EXIT_REASON(VMX_EXIT_RDRAND , 57, "RDRAND instruction."), 137 EXIT_REASON(VMX_EXIT_INVPCID , 58, "INVPCID instruction."), 138 EXIT_REASON(VMX_EXIT_VMFUNC , 59, "VMFUNC instruction."), 139 EXIT_REASON_NIL(), 140 EXIT_REASON(VMX_EXIT_RDSEED , 61, "RDSEED instruction."), 141 EXIT_REASON_NIL(), 142 EXIT_REASON(VMX_EXIT_XSAVES , 61, "XSAVES instruction."), 143 EXIT_REASON(VMX_EXIT_XRSTORS , 62, "XRSTORS instruction.") 138 EXIT_REASON(VMX_EXIT_XSAVES , 63, "XSAVES instruction."), 139 EXIT_REASON(VMX_EXIT_XRSTORS , 64, "XRSTORS instruction.") 144 140 }; 145 /** Exit reason descriptions for AMD-V, used to describe statistics. */ 141 /** Array index of the last valid VT-x exit reason. */ 142 #define MAX_EXITREASON_VTX 64 143 144 /** A partial list of Exit reason descriptions for AMD-V, used to describe 145 * statistics. 146 * 147 * @note AMD-V have annoyingly large gaps (e.g. \#NPF VMEXIT comes at 1024), 148 * this array doesn't contain the entire set of exit reasons. */ 146 149 static const char * const g_apszAmdVExitReasons[MAX_EXITREASON_STAT] = 147 150 { 148 EXIT_REASON(SVM_EXIT_READ_CR0 , 0, "Read CR0."), 149 EXIT_REASON(SVM_EXIT_READ_CR1 , 1, "Read CR1."), 150 EXIT_REASON(SVM_EXIT_READ_CR2 , 2, "Read CR2."), 151 EXIT_REASON(SVM_EXIT_READ_CR3 , 3, "Read CR3."), 152 EXIT_REASON(SVM_EXIT_READ_CR4 , 4, "Read CR4."), 153 EXIT_REASON(SVM_EXIT_READ_CR5 , 5, "Read CR5."), 154 EXIT_REASON(SVM_EXIT_READ_CR6 , 6, "Read CR6."), 155 EXIT_REASON(SVM_EXIT_READ_CR7 , 7, "Read CR7."), 156 EXIT_REASON(SVM_EXIT_READ_CR8 , 8, "Read CR8."), 157 EXIT_REASON(SVM_EXIT_READ_CR9 , 9, "Read CR9."), 158 EXIT_REASON(SVM_EXIT_READ_CR10 , 10, "Read CR10."), 159 EXIT_REASON(SVM_EXIT_READ_CR11 , 11, "Read CR11."), 160 EXIT_REASON(SVM_EXIT_READ_CR12 , 12, "Read CR12."), 161 EXIT_REASON(SVM_EXIT_READ_CR13 , 13, "Read CR13."), 162 EXIT_REASON(SVM_EXIT_READ_CR14 , 14, "Read CR14."), 163 EXIT_REASON(SVM_EXIT_READ_CR15 , 15, "Read CR15."), 164 EXIT_REASON(SVM_EXIT_WRITE_CR0 , 16, "Write CR0."), 165 EXIT_REASON(SVM_EXIT_WRITE_CR1 , 17, "Write CR1."), 166 EXIT_REASON(SVM_EXIT_WRITE_CR2 , 18, "Write CR2."), 167 EXIT_REASON(SVM_EXIT_WRITE_CR3 , 19, "Write CR3."), 168 EXIT_REASON(SVM_EXIT_WRITE_CR4 , 20, "Write CR4."), 169 EXIT_REASON(SVM_EXIT_WRITE_CR5 , 21, "Write CR5."), 170 EXIT_REASON(SVM_EXIT_WRITE_CR6 , 22, "Write CR6."), 171 EXIT_REASON(SVM_EXIT_WRITE_CR7 , 23, "Write CR7."), 172 EXIT_REASON(SVM_EXIT_WRITE_CR8 , 24, "Write CR8."), 173 EXIT_REASON(SVM_EXIT_WRITE_CR9 , 25, "Write CR9."), 174 EXIT_REASON(SVM_EXIT_WRITE_CR10 , 26, "Write CR10."), 175 EXIT_REASON(SVM_EXIT_WRITE_CR11 , 27, "Write CR11."), 176 EXIT_REASON(SVM_EXIT_WRITE_CR12 , 28, "Write CR12."), 177 EXIT_REASON(SVM_EXIT_WRITE_CR13 , 29, "Write CR13."), 178 EXIT_REASON(SVM_EXIT_WRITE_CR14 , 30, "Write CR14."), 179 EXIT_REASON(SVM_EXIT_WRITE_CR15 , 31, "Write CR15."), 180 EXIT_REASON(SVM_EXIT_READ_DR0 , 32, "Read DR0."), 181 EXIT_REASON(SVM_EXIT_READ_DR1 , 33, "Read DR1."), 182 EXIT_REASON(SVM_EXIT_READ_DR2 , 34, "Read DR2."), 183 EXIT_REASON(SVM_EXIT_READ_DR3 , 35, "Read DR3."), 184 EXIT_REASON(SVM_EXIT_READ_DR4 , 36, "Read DR4."), 185 EXIT_REASON(SVM_EXIT_READ_DR5 , 37, "Read DR5."), 186 EXIT_REASON(SVM_EXIT_READ_DR6 , 38, "Read DR6."), 187 EXIT_REASON(SVM_EXIT_READ_DR7 , 39, "Read DR7."), 188 EXIT_REASON(SVM_EXIT_READ_DR8 , 40, "Read DR8."), 189 EXIT_REASON(SVM_EXIT_READ_DR9 , 41, "Read DR9."), 190 EXIT_REASON(SVM_EXIT_READ_DR10 , 42, "Read DR10."), 191 EXIT_REASON(SVM_EXIT_READ_DR11 , 43, "Read DR11"), 192 EXIT_REASON(SVM_EXIT_READ_DR12 , 44, "Read DR12."), 193 EXIT_REASON(SVM_EXIT_READ_DR13 , 45, "Read DR13."), 194 EXIT_REASON(SVM_EXIT_READ_DR14 , 46, "Read DR14."), 195 EXIT_REASON(SVM_EXIT_READ_DR15 , 47, "Read DR15."), 196 EXIT_REASON(SVM_EXIT_WRITE_DR0 , 48, "Write DR0."), 197 EXIT_REASON(SVM_EXIT_WRITE_DR1 , 49, "Write DR1."), 198 EXIT_REASON(SVM_EXIT_WRITE_DR2 , 50, "Write DR2."), 199 EXIT_REASON(SVM_EXIT_WRITE_DR3 , 51, "Write DR3."), 200 EXIT_REASON(SVM_EXIT_WRITE_DR4 , 52, "Write DR4."), 201 EXIT_REASON(SVM_EXIT_WRITE_DR5 , 53, "Write DR5."), 202 EXIT_REASON(SVM_EXIT_WRITE_DR6 , 54, "Write DR6."), 203 EXIT_REASON(SVM_EXIT_WRITE_DR7 , 55, "Write DR7."), 204 EXIT_REASON(SVM_EXIT_WRITE_DR8 , 56, "Write DR8."), 205 EXIT_REASON(SVM_EXIT_WRITE_DR9 , 57, "Write DR9."), 206 EXIT_REASON(SVM_EXIT_WRITE_DR10 , 58, "Write DR10."), 207 EXIT_REASON(SVM_EXIT_WRITE_DR11 , 59, "Write DR11."), 208 EXIT_REASON(SVM_EXIT_WRITE_DR12 , 60, "Write DR12."), 209 EXIT_REASON(SVM_EXIT_WRITE_DR13 , 61, "Write DR13."), 210 EXIT_REASON(SVM_EXIT_WRITE_DR14 , 62, "Write DR14."), 211 EXIT_REASON(SVM_EXIT_WRITE_DR15 , 63, "Write DR15."), 212 EXIT_REASON(SVM_EXIT_EXCEPTION_0 , 64, "Exception Vector 0 (#DE)."), 213 EXIT_REASON(SVM_EXIT_EXCEPTION_1 , 65, "Exception Vector 1 (#DB)."), 214 EXIT_REASON(SVM_EXIT_EXCEPTION_2 , 66, "Exception Vector 2 (#NMI)."), 215 EXIT_REASON(SVM_EXIT_EXCEPTION_3 , 67, "Exception Vector 3 (#BP)."), 216 EXIT_REASON(SVM_EXIT_EXCEPTION_4 , 68, "Exception Vector 4 (#OF)."), 217 EXIT_REASON(SVM_EXIT_EXCEPTION_5 , 69, "Exception Vector 5 (#BR)."), 218 EXIT_REASON(SVM_EXIT_EXCEPTION_6 , 70, "Exception Vector 6 (#UD)."), 219 EXIT_REASON(SVM_EXIT_EXCEPTION_7 , 71, "Exception Vector 7 (#NM)."), 220 EXIT_REASON(SVM_EXIT_EXCEPTION_8 , 72, "Exception Vector 8 (#DF)."), 221 EXIT_REASON(SVM_EXIT_EXCEPTION_9 , 73, "Exception Vector 9 (#CO_SEG_OVERRUN)."), 222 EXIT_REASON(SVM_EXIT_EXCEPTION_A , 74, "Exception Vector 10 (#TS)."), 223 EXIT_REASON(SVM_EXIT_EXCEPTION_B , 75, "Exception Vector 11 (#NP)."), 224 EXIT_REASON(SVM_EXIT_EXCEPTION_C , 76, "Exception Vector 12 (#SS)."), 225 EXIT_REASON(SVM_EXIT_EXCEPTION_D , 77, "Exception Vector 13 (#GP)."), 226 EXIT_REASON(SVM_EXIT_EXCEPTION_E , 78, "Exception Vector 14 (#PF)."), 227 EXIT_REASON(SVM_EXIT_EXCEPTION_F , 79, "Exception Vector 15 (0x0f)."), 228 EXIT_REASON(SVM_EXIT_EXCEPTION_10 , 80, "Exception Vector 16 (#MF)."), 229 EXIT_REASON(SVM_EXIT_EXCEPTION_11 , 81, "Exception Vector 17 (#AC)."), 230 EXIT_REASON(SVM_EXIT_EXCEPTION_12 , 82, "Exception Vector 18 (#MC)."), 231 EXIT_REASON(SVM_EXIT_EXCEPTION_13 , 83, "Exception Vector 19 (#XF)."), 232 EXIT_REASON(SVM_EXIT_EXCEPTION_14 , 84, "Exception Vector 20 (0x14)."), 233 EXIT_REASON(SVM_EXIT_EXCEPTION_15 , 85, "Exception Vector 22 (0x15)."), 234 EXIT_REASON(SVM_EXIT_EXCEPTION_16 , 86, "Exception Vector 22 (0x16)."), 235 EXIT_REASON(SVM_EXIT_EXCEPTION_17 , 87, "Exception Vector 23 (0x17)."), 236 EXIT_REASON(SVM_EXIT_EXCEPTION_18 , 88, "Exception Vector 24 (0x18)."), 237 EXIT_REASON(SVM_EXIT_EXCEPTION_19 , 89, "Exception Vector 25 (0x19)."), 238 EXIT_REASON(SVM_EXIT_EXCEPTION_1A , 90, "Exception Vector 26 (0x1A)."), 239 EXIT_REASON(SVM_EXIT_EXCEPTION_1B , 91, "Exception Vector 27 (0x1B)."), 240 EXIT_REASON(SVM_EXIT_EXCEPTION_1C , 92, "Exception Vector 28 (0x1C)."), 241 EXIT_REASON(SVM_EXIT_EXCEPTION_1D , 93, "Exception Vector 29 (0x1D)."), 242 EXIT_REASON(SVM_EXIT_EXCEPTION_1E , 94, "Exception Vector 30 (0x1E)."), 243 EXIT_REASON(SVM_EXIT_EXCEPTION_1F , 95, "Exception Vector 31 (0x1F)."), 244 EXIT_REASON(SVM_EXIT_INTR , 96, "Physical maskable interrupt (host)."), 245 EXIT_REASON(SVM_EXIT_NMI , 97, "Physical non-maskable interrupt (host)."), 246 EXIT_REASON(SVM_EXIT_SMI , 98, "System management interrupt (host)."), 247 EXIT_REASON(SVM_EXIT_INIT , 99, "Physical INIT signal (host)."), 248 EXIT_REASON(SVM_EXIT_VINTR ,100, "Virtual interrupt-window exit."), 249 EXIT_REASON(SVM_EXIT_CR0_SEL_WRITE ,101, "Write to CR0 that changed any bits other than CR0.TS or CR0.MP."), 250 EXIT_REASON(SVM_EXIT_IDTR_READ ,102, "Read IDTR"), 251 EXIT_REASON(SVM_EXIT_GDTR_READ ,103, "Read GDTR"), 252 EXIT_REASON(SVM_EXIT_LDTR_READ ,104, "Read LDTR."), 253 EXIT_REASON(SVM_EXIT_TR_READ ,105, "Read TR."), 254 EXIT_REASON(SVM_EXIT_IDTR_WRITE ,106, "Write IDTR."), 255 EXIT_REASON(SVM_EXIT_GDTR_WRITE ,107, "Write GDTR."), 256 EXIT_REASON(SVM_EXIT_LDTR_WRITE ,108, "Write LDTR."), 257 EXIT_REASON(SVM_EXIT_TR_WRITE ,109, "Write TR."), 258 EXIT_REASON(SVM_EXIT_RDTSC ,110, "RDTSC instruction."), 259 EXIT_REASON(SVM_EXIT_RDPMC ,111, "RDPMC instruction."), 260 EXIT_REASON(SVM_EXIT_PUSHF ,112, "PUSHF instruction."), 261 EXIT_REASON(SVM_EXIT_POPF ,113, "POPF instruction."), 262 EXIT_REASON(SVM_EXIT_CPUID ,114, "CPUID instruction."), 263 EXIT_REASON(SVM_EXIT_RSM ,115, "RSM instruction."), 264 EXIT_REASON(SVM_EXIT_IRET ,116, "IRET instruction."), 265 EXIT_REASON(SVM_EXIT_SWINT ,117, "Software interrupt (INTn instructions)."), 266 EXIT_REASON(SVM_EXIT_INVD ,118, "INVD instruction."), 267 EXIT_REASON(SVM_EXIT_PAUSE ,119, "PAUSE instruction."), 268 EXIT_REASON(SVM_EXIT_HLT ,120, "HLT instruction."), 269 EXIT_REASON(SVM_EXIT_INVLPG ,121, "INVLPG instruction."), 270 EXIT_REASON(SVM_EXIT_INVLPGA ,122, "INVLPGA instruction."), 271 EXIT_REASON(SVM_EXIT_IOIO ,123, "IN/OUT accessing protected port."), 272 EXIT_REASON(SVM_EXIT_MSR ,124, "RDMSR or WRMSR access to protected MSR."), 273 EXIT_REASON(SVM_EXIT_TASK_SWITCH ,125, "Task switch."), 274 EXIT_REASON(SVM_EXIT_FERR_FREEZE ,126, "Legacy FPU handling enabled; processor is frozen in an x87/mmx instruction waiting for an interrupt"), 275 EXIT_REASON(SVM_EXIT_SHUTDOWN ,127, "Shutdown."), 276 EXIT_REASON(SVM_EXIT_VMRUN ,128, "VMRUN instruction."), 277 EXIT_REASON(SVM_EXIT_VMMCALL ,129, "VMCALL instruction."), 278 EXIT_REASON(SVM_EXIT_VMLOAD ,130, "VMLOAD instruction."), 279 EXIT_REASON(SVM_EXIT_VMSAVE ,131, "VMSAVE instruction."), 280 EXIT_REASON(SVM_EXIT_STGI ,132, "STGI instruction."), 281 EXIT_REASON(SVM_EXIT_CLGI ,133, "CLGI instruction."), 282 EXIT_REASON(SVM_EXIT_SKINIT ,134, "SKINIT instruction."), 283 EXIT_REASON(SVM_EXIT_RDTSCP ,135, "RDTSCP instruction."), 284 EXIT_REASON(SVM_EXIT_ICEBP ,136, "ICEBP instruction."), 285 EXIT_REASON(SVM_EXIT_WBINVD ,137, "WBINVD instruction."), 286 EXIT_REASON(SVM_EXIT_MONITOR ,138, "MONITOR instruction."), 287 EXIT_REASON(SVM_EXIT_MWAIT ,139, "MWAIT instruction."), 288 EXIT_REASON(SVM_EXIT_MWAIT_ARMED ,140, "MWAIT instruction when armed."), 289 EXIT_REASON(SVM_EXIT_XSETBV ,141, "XSETBV instruction."), 290 EXIT_REASON(SVM_EXIT_NPF ,1024, "Nested paging fault."), 291 EXIT_REASON(SVM_EXIT_AVIC_INCOMPLETE_IPI,1025, "AVIC incomplete IPI delivery."), 292 EXIT_REASON(SVM_EXIT_AVIC_NOACCEL ,1026, "AVIC unaccelerated register."), 293 EXIT_REASON_NIL() 151 EXIT_REASON(SVM_EXIT_READ_CR0 , 0, "Read CR0."), 152 EXIT_REASON(SVM_EXIT_READ_CR1 , 1, "Read CR1."), 153 EXIT_REASON(SVM_EXIT_READ_CR2 , 2, "Read CR2."), 154 EXIT_REASON(SVM_EXIT_READ_CR3 , 3, "Read CR3."), 155 EXIT_REASON(SVM_EXIT_READ_CR4 , 4, "Read CR4."), 156 EXIT_REASON(SVM_EXIT_READ_CR5 , 5, "Read CR5."), 157 EXIT_REASON(SVM_EXIT_READ_CR6 , 6, "Read CR6."), 158 EXIT_REASON(SVM_EXIT_READ_CR7 , 7, "Read CR7."), 159 EXIT_REASON(SVM_EXIT_READ_CR8 , 8, "Read CR8."), 160 EXIT_REASON(SVM_EXIT_READ_CR9 , 9, "Read CR9."), 161 EXIT_REASON(SVM_EXIT_READ_CR10 , 10, "Read CR10."), 162 EXIT_REASON(SVM_EXIT_READ_CR11 , 11, "Read CR11."), 163 EXIT_REASON(SVM_EXIT_READ_CR12 , 12, "Read CR12."), 164 EXIT_REASON(SVM_EXIT_READ_CR13 , 13, "Read CR13."), 165 EXIT_REASON(SVM_EXIT_READ_CR14 , 14, "Read CR14."), 166 EXIT_REASON(SVM_EXIT_READ_CR15 , 15, "Read CR15."), 167 EXIT_REASON(SVM_EXIT_WRITE_CR0 , 16, "Write CR0."), 168 EXIT_REASON(SVM_EXIT_WRITE_CR1 , 17, "Write CR1."), 169 EXIT_REASON(SVM_EXIT_WRITE_CR2 , 18, "Write CR2."), 170 EXIT_REASON(SVM_EXIT_WRITE_CR3 , 19, "Write CR3."), 171 EXIT_REASON(SVM_EXIT_WRITE_CR4 , 20, "Write CR4."), 172 EXIT_REASON(SVM_EXIT_WRITE_CR5 , 21, "Write CR5."), 173 EXIT_REASON(SVM_EXIT_WRITE_CR6 , 22, "Write CR6."), 174 EXIT_REASON(SVM_EXIT_WRITE_CR7 , 23, "Write CR7."), 175 EXIT_REASON(SVM_EXIT_WRITE_CR8 , 24, "Write CR8."), 176 EXIT_REASON(SVM_EXIT_WRITE_CR9 , 25, "Write CR9."), 177 EXIT_REASON(SVM_EXIT_WRITE_CR10 , 26, "Write CR10."), 178 EXIT_REASON(SVM_EXIT_WRITE_CR11 , 27, "Write CR11."), 179 EXIT_REASON(SVM_EXIT_WRITE_CR12 , 28, "Write CR12."), 180 EXIT_REASON(SVM_EXIT_WRITE_CR13 , 29, "Write CR13."), 181 EXIT_REASON(SVM_EXIT_WRITE_CR14 , 30, "Write CR14."), 182 EXIT_REASON(SVM_EXIT_WRITE_CR15 , 31, "Write CR15."), 183 EXIT_REASON(SVM_EXIT_READ_DR0 , 32, "Read DR0."), 184 EXIT_REASON(SVM_EXIT_READ_DR1 , 33, "Read DR1."), 185 EXIT_REASON(SVM_EXIT_READ_DR2 , 34, "Read DR2."), 186 EXIT_REASON(SVM_EXIT_READ_DR3 , 35, "Read DR3."), 187 EXIT_REASON(SVM_EXIT_READ_DR4 , 36, "Read DR4."), 188 EXIT_REASON(SVM_EXIT_READ_DR5 , 37, "Read DR5."), 189 EXIT_REASON(SVM_EXIT_READ_DR6 , 38, "Read DR6."), 190 EXIT_REASON(SVM_EXIT_READ_DR7 , 39, "Read DR7."), 191 EXIT_REASON(SVM_EXIT_READ_DR8 , 40, "Read DR8."), 192 EXIT_REASON(SVM_EXIT_READ_DR9 , 41, "Read DR9."), 193 EXIT_REASON(SVM_EXIT_READ_DR10 , 42, "Read DR10."), 194 EXIT_REASON(SVM_EXIT_READ_DR11 , 43, "Read DR11"), 195 EXIT_REASON(SVM_EXIT_READ_DR12 , 44, "Read DR12."), 196 EXIT_REASON(SVM_EXIT_READ_DR13 , 45, "Read DR13."), 197 EXIT_REASON(SVM_EXIT_READ_DR14 , 46, "Read DR14."), 198 EXIT_REASON(SVM_EXIT_READ_DR15 , 47, "Read DR15."), 199 EXIT_REASON(SVM_EXIT_WRITE_DR0 , 48, "Write DR0."), 200 EXIT_REASON(SVM_EXIT_WRITE_DR1 , 49, "Write DR1."), 201 EXIT_REASON(SVM_EXIT_WRITE_DR2 , 50, "Write DR2."), 202 EXIT_REASON(SVM_EXIT_WRITE_DR3 , 51, "Write DR3."), 203 EXIT_REASON(SVM_EXIT_WRITE_DR4 , 52, "Write DR4."), 204 EXIT_REASON(SVM_EXIT_WRITE_DR5 , 53, "Write DR5."), 205 EXIT_REASON(SVM_EXIT_WRITE_DR6 , 54, "Write DR6."), 206 EXIT_REASON(SVM_EXIT_WRITE_DR7 , 55, "Write DR7."), 207 EXIT_REASON(SVM_EXIT_WRITE_DR8 , 56, "Write DR8."), 208 EXIT_REASON(SVM_EXIT_WRITE_DR9 , 57, "Write DR9."), 209 EXIT_REASON(SVM_EXIT_WRITE_DR10 , 58, "Write DR10."), 210 EXIT_REASON(SVM_EXIT_WRITE_DR11 , 59, "Write DR11."), 211 EXIT_REASON(SVM_EXIT_WRITE_DR12 , 60, "Write DR12."), 212 EXIT_REASON(SVM_EXIT_WRITE_DR13 , 61, "Write DR13."), 213 EXIT_REASON(SVM_EXIT_WRITE_DR14 , 62, "Write DR14."), 214 EXIT_REASON(SVM_EXIT_WRITE_DR15 , 63, "Write DR15."), 215 EXIT_REASON(SVM_EXIT_EXCEPTION_0 , 64, "Exception Vector 0 (#DE)."), 216 EXIT_REASON(SVM_EXIT_EXCEPTION_1 , 65, "Exception Vector 1 (#DB)."), 217 EXIT_REASON(SVM_EXIT_EXCEPTION_2 , 66, "Exception Vector 2 (#NMI)."), 218 EXIT_REASON(SVM_EXIT_EXCEPTION_3 , 67, "Exception Vector 3 (#BP)."), 219 EXIT_REASON(SVM_EXIT_EXCEPTION_4 , 68, "Exception Vector 4 (#OF)."), 220 EXIT_REASON(SVM_EXIT_EXCEPTION_5 , 69, "Exception Vector 5 (#BR)."), 221 EXIT_REASON(SVM_EXIT_EXCEPTION_6 , 70, "Exception Vector 6 (#UD)."), 222 EXIT_REASON(SVM_EXIT_EXCEPTION_7 , 71, "Exception Vector 7 (#NM)."), 223 EXIT_REASON(SVM_EXIT_EXCEPTION_8 , 72, "Exception Vector 8 (#DF)."), 224 EXIT_REASON(SVM_EXIT_EXCEPTION_9 , 73, "Exception Vector 9 (#CO_SEG_OVERRUN)."), 225 EXIT_REASON(SVM_EXIT_EXCEPTION_A , 74, "Exception Vector 10 (#TS)."), 226 EXIT_REASON(SVM_EXIT_EXCEPTION_B , 75, "Exception Vector 11 (#NP)."), 227 EXIT_REASON(SVM_EXIT_EXCEPTION_C , 76, "Exception Vector 12 (#SS)."), 228 EXIT_REASON(SVM_EXIT_EXCEPTION_D , 77, "Exception Vector 13 (#GP)."), 229 EXIT_REASON(SVM_EXIT_EXCEPTION_E , 78, "Exception Vector 14 (#PF)."), 230 EXIT_REASON(SVM_EXIT_EXCEPTION_F , 79, "Exception Vector 15 (0x0f)."), 231 EXIT_REASON(SVM_EXIT_EXCEPTION_10 , 80, "Exception Vector 16 (#MF)."), 232 EXIT_REASON(SVM_EXIT_EXCEPTION_11 , 81, "Exception Vector 17 (#AC)."), 233 EXIT_REASON(SVM_EXIT_EXCEPTION_12 , 82, "Exception Vector 18 (#MC)."), 234 EXIT_REASON(SVM_EXIT_EXCEPTION_13 , 83, "Exception Vector 19 (#XF)."), 235 EXIT_REASON(SVM_EXIT_EXCEPTION_14 , 84, "Exception Vector 20 (0x14)."), 236 EXIT_REASON(SVM_EXIT_EXCEPTION_15 , 85, "Exception Vector 22 (0x15)."), 237 EXIT_REASON(SVM_EXIT_EXCEPTION_16 , 86, "Exception Vector 22 (0x16)."), 238 EXIT_REASON(SVM_EXIT_EXCEPTION_17 , 87, "Exception Vector 23 (0x17)."), 239 EXIT_REASON(SVM_EXIT_EXCEPTION_18 , 88, "Exception Vector 24 (0x18)."), 240 EXIT_REASON(SVM_EXIT_EXCEPTION_19 , 89, "Exception Vector 25 (0x19)."), 241 EXIT_REASON(SVM_EXIT_EXCEPTION_1A , 90, "Exception Vector 26 (0x1A)."), 242 EXIT_REASON(SVM_EXIT_EXCEPTION_1B , 91, "Exception Vector 27 (0x1B)."), 243 EXIT_REASON(SVM_EXIT_EXCEPTION_1C , 92, "Exception Vector 28 (0x1C)."), 244 EXIT_REASON(SVM_EXIT_EXCEPTION_1D , 93, "Exception Vector 29 (0x1D)."), 245 EXIT_REASON(SVM_EXIT_EXCEPTION_1E , 94, "Exception Vector 30 (0x1E)."), 246 EXIT_REASON(SVM_EXIT_EXCEPTION_1F , 95, "Exception Vector 31 (0x1F)."), 247 EXIT_REASON(SVM_EXIT_INTR , 96, "Physical maskable interrupt (host)."), 248 EXIT_REASON(SVM_EXIT_NMI , 97, "Physical non-maskable interrupt (host)."), 249 EXIT_REASON(SVM_EXIT_SMI , 98, "System management interrupt (host)."), 250 EXIT_REASON(SVM_EXIT_INIT , 99, "Physical INIT signal (host)."), 251 EXIT_REASON(SVM_EXIT_VINTR , 100, "Virtual interrupt-window exit."), 252 EXIT_REASON(SVM_EXIT_CR0_SEL_WRITE , 101, "Write to CR0 that changed any bits other than CR0.TS or CR0.MP."), 253 EXIT_REASON(SVM_EXIT_IDTR_READ , 102, "Read IDTR"), 254 EXIT_REASON(SVM_EXIT_GDTR_READ , 103, "Read GDTR"), 255 EXIT_REASON(SVM_EXIT_LDTR_READ , 104, "Read LDTR."), 256 EXIT_REASON(SVM_EXIT_TR_READ , 105, "Read TR."), 257 EXIT_REASON(SVM_EXIT_IDTR_WRITE , 106, "Write IDTR."), 258 EXIT_REASON(SVM_EXIT_GDTR_WRITE , 107, "Write GDTR."), 259 EXIT_REASON(SVM_EXIT_LDTR_WRITE , 108, "Write LDTR."), 260 EXIT_REASON(SVM_EXIT_TR_WRITE , 109, "Write TR."), 261 EXIT_REASON(SVM_EXIT_RDTSC , 110, "RDTSC instruction."), 262 EXIT_REASON(SVM_EXIT_RDPMC , 111, "RDPMC instruction."), 263 EXIT_REASON(SVM_EXIT_PUSHF , 112, "PUSHF instruction."), 264 EXIT_REASON(SVM_EXIT_POPF , 113, "POPF instruction."), 265 EXIT_REASON(SVM_EXIT_CPUID , 114, "CPUID instruction."), 266 EXIT_REASON(SVM_EXIT_RSM , 115, "RSM instruction."), 267 EXIT_REASON(SVM_EXIT_IRET , 116, "IRET instruction."), 268 EXIT_REASON(SVM_EXIT_SWINT , 117, "Software interrupt (INTn instructions)."), 269 EXIT_REASON(SVM_EXIT_INVD , 118, "INVD instruction."), 270 EXIT_REASON(SVM_EXIT_PAUSE , 119, "PAUSE instruction."), 271 EXIT_REASON(SVM_EXIT_HLT , 120, "HLT instruction."), 272 EXIT_REASON(SVM_EXIT_INVLPG , 121, "INVLPG instruction."), 273 EXIT_REASON(SVM_EXIT_INVLPGA , 122, "INVLPGA instruction."), 274 EXIT_REASON(SVM_EXIT_IOIO , 123, "IN/OUT accessing protected port."), 275 EXIT_REASON(SVM_EXIT_MSR , 124, "RDMSR or WRMSR access to protected MSR."), 276 EXIT_REASON(SVM_EXIT_TASK_SWITCH , 125, "Task switch."), 277 EXIT_REASON(SVM_EXIT_FERR_FREEZE , 126, "Legacy FPU handling enabled; CPU frozen in an x87/mmx instr. waiting for interrupt"), 278 EXIT_REASON(SVM_EXIT_SHUTDOWN , 127, "Shutdown."), 279 EXIT_REASON(SVM_EXIT_VMRUN , 128, "VMRUN instruction."), 280 EXIT_REASON(SVM_EXIT_VMMCALL , 129, "VMCALL instruction."), 281 EXIT_REASON(SVM_EXIT_VMLOAD , 130, "VMLOAD instruction."), 282 EXIT_REASON(SVM_EXIT_VMSAVE , 131, "VMSAVE instruction."), 283 EXIT_REASON(SVM_EXIT_STGI , 132, "STGI instruction."), 284 EXIT_REASON(SVM_EXIT_CLGI , 133, "CLGI instruction."), 285 EXIT_REASON(SVM_EXIT_SKINIT , 134, "SKINIT instruction."), 286 EXIT_REASON(SVM_EXIT_RDTSCP , 135, "RDTSCP instruction."), 287 EXIT_REASON(SVM_EXIT_ICEBP , 136, "ICEBP instruction."), 288 EXIT_REASON(SVM_EXIT_WBINVD , 137, "WBINVD instruction."), 289 EXIT_REASON(SVM_EXIT_MONITOR , 138, "MONITOR instruction."), 290 EXIT_REASON(SVM_EXIT_MWAIT , 139, "MWAIT instruction."), 291 EXIT_REASON(SVM_EXIT_MWAIT_ARMED , 140, "MWAIT instruction when armed."), 292 EXIT_REASON(SVM_EXIT_XSETBV , 141, "XSETBV instruction."), 294 293 }; 295 # undef EXIT_REASON 294 /** Array index of the last valid AMD-V exit reason. */ 295 #define MAX_EXITREASON_AMDV 141 296 #define SVM_EXIT_REASON_NPF EXIT_REASON(SVM_EXIT_NPF, 1024, "Nested Page Fault.") 297 296 298 # undef EXIT_REASON_NIL 297 299 #endif /* VBOX_WITH_STATISTICS */ … … 328 330 * Internal Functions * 329 331 *********************************************************************************************************************************/ 330 static DECLCALLBACK(int) hmR3Save(PVM pVM, PSSMHANDLE pSSM); 331 static DECLCALLBACK(int) hmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass); 332 static int hmR3InitCPU(PVM pVM); 333 static int hmR3InitFinalizeR0(PVM pVM); 334 static int hmR3InitFinalizeR0Intel(PVM pVM); 335 static int hmR3InitFinalizeR0Amd(PVM pVM); 336 static int hmR3TermCPU(PVM pVM); 332 static DECLCALLBACK(int) hmR3Save(PVM pVM, PSSMHANDLE pSSM); 333 static DECLCALLBACK(int) hmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass); 334 static DECLCALLBACK(void) hmR3InfoExitHistory(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); 335 static int hmR3InitCPU(PVM pVM); 336 static int hmR3InitFinalizeR0(PVM pVM); 337 static int hmR3InitFinalizeR0Intel(PVM pVM); 338 static int hmR3InitFinalizeR0Amd(PVM pVM); 339 static int hmR3TermCPU(PVM pVM); 337 340 338 341 … … 374 377 if (RT_FAILURE(rc)) 375 378 return rc; 379 380 /* 381 * Register info handlers. 382 */ 383 rc = DBGFR3InfoRegisterInternalEx(pVM, "exithistory", "Dumps the HM VM-exit history.", hmR3InfoExitHistory, 384 DBGFINFO_FLAGS_RUN_ON_EMT); 385 AssertRCReturn(rc, rc); 376 386 377 387 /* … … 1386 1396 } 1387 1397 1388 /* We convert it here every time as pciregions could be reconfigured. */1398 /* We convert it here every time as PCI regions could be reconfigured. */ 1389 1399 if (PDMVmmDevHeapIsEnabled(pVM)) 1390 1400 { … … 3447 3457 } 3448 3458 3459 3460 /** 3461 * Displays the guest VM-exit history. 3462 * 3463 * @param pVM The cross context VM structure. 3464 * @param pHlp The info helper functions. 3465 * @param pszArgs Arguments, ignored. 3466 */ 3467 static DECLCALLBACK(void) hmR3InfoExitHistory(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs) 3468 { 3469 PVMCPU pVCpu = VMMGetCpu(pVM); 3470 Assert(pVCpu); 3471 3472 if (HMIsEnabled(pVM)) 3473 { 3474 bool const fIsVtx = pVM->hm.s.vmx.fSupported; 3475 const char * const *papszDesc; 3476 unsigned cMaxExitDesc; 3477 if (fIsVtx) 3478 { 3479 cMaxExitDesc = MAX_EXITREASON_VTX; 3480 papszDesc = &g_apszVTxExitReasons[0]; 3481 pHlp->pfnPrintf(pHlp, "CPU[%u]: VT-x VM-exit history:\n", pVCpu->idCpu); 3482 } 3483 else 3484 { 3485 cMaxExitDesc = MAX_EXITREASON_AMDV; 3486 papszDesc = &g_apszAmdVExitReasons[0]; 3487 pHlp->pfnPrintf(pHlp, "CPU[%u]: AMD-V #VMEXIT history:\n", pVCpu->idCpu); 3488 } 3489 3490 pHlp->pfnPrintf(pHlp, " idxExitHistoryFree = %u\n", pVCpu->hm.s.idxExitHistoryFree); 3491 unsigned const idxLast = pVCpu->hm.s.idxExitHistoryFree > 0 ? 3492 pVCpu->hm.s.idxExitHistoryFree - 1 : 3493 RT_ELEMENTS(pVCpu->hm.s.auExitHistory) - 1; 3494 for (unsigned i = 0; i < RT_ELEMENTS(pVCpu->hm.s.auExitHistory); i++) 3495 { 3496 uint16_t const uExit = pVCpu->hm.s.auExitHistory[i]; 3497 const char *pszExit = NULL; 3498 if (uExit <= cMaxExitDesc) 3499 pszExit = papszDesc[uExit]; 3500 else if (!fIsVtx && uExit == SVM_EXIT_NPF) 3501 pszExit = SVM_EXIT_REASON_NPF; 3502 3503 pHlp->pfnPrintf(pHlp, " auExitHistory[%2u] = 0x%04x %s %s\n", i, uExit, pszExit, 3504 idxLast == i ? "<-- Latest exit" : ""); 3505 } 3506 } 3507 else 3508 pHlp->pfnPrintf(pHlp, "HM is not enabled for this VM!\n"); 3509 } 3510
Note:
See TracChangeset
for help on using the changeset viewer.