Changeset 76993 in vbox for trunk/src/VBox/VMM/VMMAll/HMAll.cpp
- Timestamp:
- Jan 25, 2019 2:34:46 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/HMAll.cpp
r76797 r76993 39 39 40 40 41 /********************************************************************************************************************************* 42 * Global Variables * 43 *********************************************************************************************************************************/ 44 #define EXIT_REASON(a_Def, a_Val, a_Str) #a_Def " - " #a_Val " - " a_Str 45 #define EXIT_REASON_NIL() NULL 46 47 /** Exit reason descriptions for VT-x, used to describe statistics and exit 48 * history. */ 49 static const char * const g_apszVmxExitReasons[MAX_EXITREASON_STAT] = 50 { 51 EXIT_REASON(VMX_EXIT_XCPT_OR_NMI , 0, "Exception or non-maskable interrupt (NMI)."), 52 EXIT_REASON(VMX_EXIT_EXT_INT , 1, "External interrupt."), 53 EXIT_REASON(VMX_EXIT_TRIPLE_FAULT , 2, "Triple fault."), 54 EXIT_REASON(VMX_EXIT_INIT_SIGNAL , 3, "INIT signal."), 55 EXIT_REASON(VMX_EXIT_SIPI , 4, "Start-up IPI (SIPI)."), 56 EXIT_REASON(VMX_EXIT_IO_SMI_IRQ , 5, "I/O system-management interrupt (SMI)."), 57 EXIT_REASON(VMX_EXIT_SMI_IRQ , 6, "Other SMI."), 58 EXIT_REASON(VMX_EXIT_INT_WINDOW , 7, "Interrupt window."), 59 EXIT_REASON(VMX_EXIT_NMI_WINDOW , 8, "NMI window."), 60 EXIT_REASON(VMX_EXIT_TASK_SWITCH , 9, "Task switch."), 61 EXIT_REASON(VMX_EXIT_CPUID , 10, "CPUID instruction."), 62 EXIT_REASON(VMX_EXIT_GETSEC , 11, "GETSEC instrunction."), 63 EXIT_REASON(VMX_EXIT_HLT , 12, "HLT instruction."), 64 EXIT_REASON(VMX_EXIT_INVD , 13, "INVD instruction."), 65 EXIT_REASON(VMX_EXIT_INVLPG , 14, "INVLPG instruction."), 66 EXIT_REASON(VMX_EXIT_RDPMC , 15, "RDPMCinstruction."), 67 EXIT_REASON(VMX_EXIT_RDTSC , 16, "RDTSC instruction."), 68 EXIT_REASON(VMX_EXIT_RSM , 17, "RSM instruction in SMM."), 69 EXIT_REASON(VMX_EXIT_VMCALL , 18, "VMCALL instruction."), 70 EXIT_REASON(VMX_EXIT_VMCLEAR , 19, "VMCLEAR instruction."), 71 EXIT_REASON(VMX_EXIT_VMLAUNCH , 20, "VMLAUNCH instruction."), 72 EXIT_REASON(VMX_EXIT_VMPTRLD , 21, "VMPTRLD instruction."), 73 EXIT_REASON(VMX_EXIT_VMPTRST , 22, "VMPTRST instruction."), 74 EXIT_REASON(VMX_EXIT_VMREAD , 23, "VMREAD instruction."), 75 EXIT_REASON(VMX_EXIT_VMRESUME , 24, "VMRESUME instruction."), 76 EXIT_REASON(VMX_EXIT_VMWRITE , 25, "VMWRITE instruction."), 77 EXIT_REASON(VMX_EXIT_VMXOFF , 26, "VMXOFF instruction."), 78 EXIT_REASON(VMX_EXIT_VMXON , 27, "VMXON instruction."), 79 EXIT_REASON(VMX_EXIT_MOV_CRX , 28, "Control-register accesses."), 80 EXIT_REASON(VMX_EXIT_MOV_DRX , 29, "Debug-register accesses."), 81 EXIT_REASON(VMX_EXIT_PORT_IO , 30, "I/O instruction."), 82 EXIT_REASON(VMX_EXIT_RDMSR , 31, "RDMSR instruction."), 83 EXIT_REASON(VMX_EXIT_WRMSR , 32, "WRMSR instruction."), 84 EXIT_REASON(VMX_EXIT_ERR_INVALID_GUEST_STATE, 33, "VM-entry failure due to invalid guest state."), 85 EXIT_REASON(VMX_EXIT_ERR_MSR_LOAD , 34, "VM-entry failure due to MSR loading."), 86 EXIT_REASON_NIL(), 87 EXIT_REASON(VMX_EXIT_MWAIT , 36, "MWAIT instruction."), 88 EXIT_REASON(VMX_EXIT_MTF , 37, "Monitor Trap Flag."), 89 EXIT_REASON_NIL(), 90 EXIT_REASON(VMX_EXIT_MONITOR , 39, "MONITOR instruction."), 91 EXIT_REASON(VMX_EXIT_PAUSE , 40, "PAUSE instruction."), 92 EXIT_REASON(VMX_EXIT_ERR_MACHINE_CHECK , 41, "VM-entry failure due to machine-check."), 93 EXIT_REASON_NIL(), 94 EXIT_REASON(VMX_EXIT_TPR_BELOW_THRESHOLD , 43, "TPR below threshold (MOV to CR8)."), 95 EXIT_REASON(VMX_EXIT_APIC_ACCESS , 44, "APIC access."), 96 EXIT_REASON(VMX_EXIT_VIRTUALIZED_EOI , 45, "Virtualized EOI."), 97 EXIT_REASON(VMX_EXIT_GDTR_IDTR_ACCESS , 46, "GDTR/IDTR access using LGDT/SGDT/LIDT/SIDT."), 98 EXIT_REASON(VMX_EXIT_LDTR_TR_ACCESS , 47, "LDTR/TR access using LLDT/SLDT/LTR/STR."), 99 EXIT_REASON(VMX_EXIT_EPT_VIOLATION , 48, "EPT violation."), 100 EXIT_REASON(VMX_EXIT_EPT_MISCONFIG , 49, "EPT misconfiguration."), 101 EXIT_REASON(VMX_EXIT_INVEPT , 50, "INVEPT instruction."), 102 EXIT_REASON(VMX_EXIT_RDTSCP , 51, "RDTSCP instruction."), 103 EXIT_REASON(VMX_EXIT_PREEMPT_TIMER , 52, "VMX-preemption timer expired."), 104 EXIT_REASON(VMX_EXIT_INVVPID , 53, "INVVPID instruction."), 105 EXIT_REASON(VMX_EXIT_WBINVD , 54, "WBINVD instruction."), 106 EXIT_REASON(VMX_EXIT_XSETBV , 55, "XSETBV instruction."), 107 EXIT_REASON(VMX_EXIT_APIC_WRITE , 56, "APIC write completed to virtual-APIC page."), 108 EXIT_REASON(VMX_EXIT_RDRAND , 57, "RDRAND instruction."), 109 EXIT_REASON(VMX_EXIT_INVPCID , 58, "INVPCID instruction."), 110 EXIT_REASON(VMX_EXIT_VMFUNC , 59, "VMFUNC instruction."), 111 EXIT_REASON(VMX_EXIT_ENCLS , 60, "ENCLS instruction."), 112 EXIT_REASON(VMX_EXIT_RDSEED , 61, "RDSEED instruction."), 113 EXIT_REASON(VMX_EXIT_PML_FULL , 62, "Page-modification log full."), 114 EXIT_REASON(VMX_EXIT_XSAVES , 63, "XSAVES instruction."), 115 EXIT_REASON(VMX_EXIT_XRSTORS , 64, "XRSTORS instruction.") 116 }; 117 /** Array index of the last valid VT-x exit reason. */ 118 #define MAX_EXITREASON_VTX 64 119 120 /** A partial list of \#EXIT reason descriptions for AMD-V, used to describe 121 * statistics and exit history. 122 * 123 * @note AMD-V have annoyingly large gaps (e.g. \#NPF VMEXIT comes at 1024), 124 * this array doesn't contain the entire set of exit reasons, we 125 * handle them via hmSvmGetSpecialExitReasonDesc(). */ 126 static const char * const g_apszSvmExitReasons[MAX_EXITREASON_STAT] = 127 { 128 EXIT_REASON(SVM_EXIT_READ_CR0 , 0, "Read CR0."), 129 EXIT_REASON(SVM_EXIT_READ_CR1 , 1, "Read CR1."), 130 EXIT_REASON(SVM_EXIT_READ_CR2 , 2, "Read CR2."), 131 EXIT_REASON(SVM_EXIT_READ_CR3 , 3, "Read CR3."), 132 EXIT_REASON(SVM_EXIT_READ_CR4 , 4, "Read CR4."), 133 EXIT_REASON(SVM_EXIT_READ_CR5 , 5, "Read CR5."), 134 EXIT_REASON(SVM_EXIT_READ_CR6 , 6, "Read CR6."), 135 EXIT_REASON(SVM_EXIT_READ_CR7 , 7, "Read CR7."), 136 EXIT_REASON(SVM_EXIT_READ_CR8 , 8, "Read CR8."), 137 EXIT_REASON(SVM_EXIT_READ_CR9 , 9, "Read CR9."), 138 EXIT_REASON(SVM_EXIT_READ_CR10 , 10, "Read CR10."), 139 EXIT_REASON(SVM_EXIT_READ_CR11 , 11, "Read CR11."), 140 EXIT_REASON(SVM_EXIT_READ_CR12 , 12, "Read CR12."), 141 EXIT_REASON(SVM_EXIT_READ_CR13 , 13, "Read CR13."), 142 EXIT_REASON(SVM_EXIT_READ_CR14 , 14, "Read CR14."), 143 EXIT_REASON(SVM_EXIT_READ_CR15 , 15, "Read CR15."), 144 EXIT_REASON(SVM_EXIT_WRITE_CR0 , 16, "Write CR0."), 145 EXIT_REASON(SVM_EXIT_WRITE_CR1 , 17, "Write CR1."), 146 EXIT_REASON(SVM_EXIT_WRITE_CR2 , 18, "Write CR2."), 147 EXIT_REASON(SVM_EXIT_WRITE_CR3 , 19, "Write CR3."), 148 EXIT_REASON(SVM_EXIT_WRITE_CR4 , 20, "Write CR4."), 149 EXIT_REASON(SVM_EXIT_WRITE_CR5 , 21, "Write CR5."), 150 EXIT_REASON(SVM_EXIT_WRITE_CR6 , 22, "Write CR6."), 151 EXIT_REASON(SVM_EXIT_WRITE_CR7 , 23, "Write CR7."), 152 EXIT_REASON(SVM_EXIT_WRITE_CR8 , 24, "Write CR8."), 153 EXIT_REASON(SVM_EXIT_WRITE_CR9 , 25, "Write CR9."), 154 EXIT_REASON(SVM_EXIT_WRITE_CR10 , 26, "Write CR10."), 155 EXIT_REASON(SVM_EXIT_WRITE_CR11 , 27, "Write CR11."), 156 EXIT_REASON(SVM_EXIT_WRITE_CR12 , 28, "Write CR12."), 157 EXIT_REASON(SVM_EXIT_WRITE_CR13 , 29, "Write CR13."), 158 EXIT_REASON(SVM_EXIT_WRITE_CR14 , 30, "Write CR14."), 159 EXIT_REASON(SVM_EXIT_WRITE_CR15 , 31, "Write CR15."), 160 EXIT_REASON(SVM_EXIT_READ_DR0 , 32, "Read DR0."), 161 EXIT_REASON(SVM_EXIT_READ_DR1 , 33, "Read DR1."), 162 EXIT_REASON(SVM_EXIT_READ_DR2 , 34, "Read DR2."), 163 EXIT_REASON(SVM_EXIT_READ_DR3 , 35, "Read DR3."), 164 EXIT_REASON(SVM_EXIT_READ_DR4 , 36, "Read DR4."), 165 EXIT_REASON(SVM_EXIT_READ_DR5 , 37, "Read DR5."), 166 EXIT_REASON(SVM_EXIT_READ_DR6 , 38, "Read DR6."), 167 EXIT_REASON(SVM_EXIT_READ_DR7 , 39, "Read DR7."), 168 EXIT_REASON(SVM_EXIT_READ_DR8 , 40, "Read DR8."), 169 EXIT_REASON(SVM_EXIT_READ_DR9 , 41, "Read DR9."), 170 EXIT_REASON(SVM_EXIT_READ_DR10 , 42, "Read DR10."), 171 EXIT_REASON(SVM_EXIT_READ_DR11 , 43, "Read DR11"), 172 EXIT_REASON(SVM_EXIT_READ_DR12 , 44, "Read DR12."), 173 EXIT_REASON(SVM_EXIT_READ_DR13 , 45, "Read DR13."), 174 EXIT_REASON(SVM_EXIT_READ_DR14 , 46, "Read DR14."), 175 EXIT_REASON(SVM_EXIT_READ_DR15 , 47, "Read DR15."), 176 EXIT_REASON(SVM_EXIT_WRITE_DR0 , 48, "Write DR0."), 177 EXIT_REASON(SVM_EXIT_WRITE_DR1 , 49, "Write DR1."), 178 EXIT_REASON(SVM_EXIT_WRITE_DR2 , 50, "Write DR2."), 179 EXIT_REASON(SVM_EXIT_WRITE_DR3 , 51, "Write DR3."), 180 EXIT_REASON(SVM_EXIT_WRITE_DR4 , 52, "Write DR4."), 181 EXIT_REASON(SVM_EXIT_WRITE_DR5 , 53, "Write DR5."), 182 EXIT_REASON(SVM_EXIT_WRITE_DR6 , 54, "Write DR6."), 183 EXIT_REASON(SVM_EXIT_WRITE_DR7 , 55, "Write DR7."), 184 EXIT_REASON(SVM_EXIT_WRITE_DR8 , 56, "Write DR8."), 185 EXIT_REASON(SVM_EXIT_WRITE_DR9 , 57, "Write DR9."), 186 EXIT_REASON(SVM_EXIT_WRITE_DR10 , 58, "Write DR10."), 187 EXIT_REASON(SVM_EXIT_WRITE_DR11 , 59, "Write DR11."), 188 EXIT_REASON(SVM_EXIT_WRITE_DR12 , 60, "Write DR12."), 189 EXIT_REASON(SVM_EXIT_WRITE_DR13 , 61, "Write DR13."), 190 EXIT_REASON(SVM_EXIT_WRITE_DR14 , 62, "Write DR14."), 191 EXIT_REASON(SVM_EXIT_WRITE_DR15 , 63, "Write DR15."), 192 EXIT_REASON(SVM_EXIT_XCPT_0 , 64, "Exception 0 (#DE)."), 193 EXIT_REASON(SVM_EXIT_XCPT_1 , 65, "Exception 1 (#DB)."), 194 EXIT_REASON(SVM_EXIT_XCPT_2 , 66, "Exception 2 (#NMI)."), 195 EXIT_REASON(SVM_EXIT_XCPT_3 , 67, "Exception 3 (#BP)."), 196 EXIT_REASON(SVM_EXIT_XCPT_4 , 68, "Exception 4 (#OF)."), 197 EXIT_REASON(SVM_EXIT_XCPT_5 , 69, "Exception 5 (#BR)."), 198 EXIT_REASON(SVM_EXIT_XCPT_6 , 70, "Exception 6 (#UD)."), 199 EXIT_REASON(SVM_EXIT_XCPT_7 , 71, "Exception 7 (#NM)."), 200 EXIT_REASON(SVM_EXIT_XCPT_8 , 72, "Exception 8 (#DF)."), 201 EXIT_REASON(SVM_EXIT_XCPT_9 , 73, "Exception 9 (#CO_SEG_OVERRUN)."), 202 EXIT_REASON(SVM_EXIT_XCPT_10 , 74, "Exception 10 (#TS)."), 203 EXIT_REASON(SVM_EXIT_XCPT_11 , 75, "Exception 11 (#NP)."), 204 EXIT_REASON(SVM_EXIT_XCPT_12 , 76, "Exception 12 (#SS)."), 205 EXIT_REASON(SVM_EXIT_XCPT_13 , 77, "Exception 13 (#GP)."), 206 EXIT_REASON(SVM_EXIT_XCPT_14 , 78, "Exception 14 (#PF)."), 207 EXIT_REASON(SVM_EXIT_XCPT_15 , 79, "Exception 15 (0x0f)."), 208 EXIT_REASON(SVM_EXIT_XCPT_16 , 80, "Exception 16 (#MF)."), 209 EXIT_REASON(SVM_EXIT_XCPT_17 , 81, "Exception 17 (#AC)."), 210 EXIT_REASON(SVM_EXIT_XCPT_18 , 82, "Exception 18 (#MC)."), 211 EXIT_REASON(SVM_EXIT_XCPT_19 , 83, "Exception 19 (#XF)."), 212 EXIT_REASON(SVM_EXIT_XCPT_20 , 84, "Exception 20 (#VE)."), 213 EXIT_REASON(SVM_EXIT_XCPT_21 , 85, "Exception 22 (0x15)."), 214 EXIT_REASON(SVM_EXIT_XCPT_22 , 86, "Exception 22 (0x16)."), 215 EXIT_REASON(SVM_EXIT_XCPT_23 , 87, "Exception 23 (0x17)."), 216 EXIT_REASON(SVM_EXIT_XCPT_24 , 88, "Exception 24 (0x18)."), 217 EXIT_REASON(SVM_EXIT_XCPT_25 , 89, "Exception 25 (0x19)."), 218 EXIT_REASON(SVM_EXIT_XCPT_26 , 90, "Exception 26 (0x1a)."), 219 EXIT_REASON(SVM_EXIT_XCPT_27 , 91, "Exception 27 (0x1b)."), 220 EXIT_REASON(SVM_EXIT_XCPT_28 , 92, "Exception 28 (0x1c)."), 221 EXIT_REASON(SVM_EXIT_XCPT_29 , 93, "Exception 29 (0x1d)."), 222 EXIT_REASON(SVM_EXIT_XCPT_30 , 94, "Exception 30 (#SX)."), 223 EXIT_REASON(SVM_EXIT_XCPT_31 , 95, "Exception 31 (0x1F)."), 224 EXIT_REASON(SVM_EXIT_INTR , 96, "Physical maskable interrupt (host)."), 225 EXIT_REASON(SVM_EXIT_NMI , 97, "Physical non-maskable interrupt (host)."), 226 EXIT_REASON(SVM_EXIT_SMI , 98, "System management interrupt (host)."), 227 EXIT_REASON(SVM_EXIT_INIT , 99, "Physical INIT signal (host)."), 228 EXIT_REASON(SVM_EXIT_VINTR , 100, "Virtual interrupt-window exit."), 229 EXIT_REASON(SVM_EXIT_CR0_SEL_WRITE, 101, "Selective CR0 Write (to bits other than CR0.TS and CR0.MP)."), 230 EXIT_REASON(SVM_EXIT_IDTR_READ , 102, "Read IDTR."), 231 EXIT_REASON(SVM_EXIT_GDTR_READ , 103, "Read GDTR."), 232 EXIT_REASON(SVM_EXIT_LDTR_READ , 104, "Read LDTR."), 233 EXIT_REASON(SVM_EXIT_TR_READ , 105, "Read TR."), 234 EXIT_REASON(SVM_EXIT_IDTR_WRITE , 106, "Write IDTR."), 235 EXIT_REASON(SVM_EXIT_GDTR_WRITE , 107, "Write GDTR."), 236 EXIT_REASON(SVM_EXIT_LDTR_WRITE , 108, "Write LDTR."), 237 EXIT_REASON(SVM_EXIT_TR_WRITE , 109, "Write TR."), 238 EXIT_REASON(SVM_EXIT_RDTSC , 110, "RDTSC instruction."), 239 EXIT_REASON(SVM_EXIT_RDPMC , 111, "RDPMC instruction."), 240 EXIT_REASON(SVM_EXIT_PUSHF , 112, "PUSHF instruction."), 241 EXIT_REASON(SVM_EXIT_POPF , 113, "POPF instruction."), 242 EXIT_REASON(SVM_EXIT_CPUID , 114, "CPUID instruction."), 243 EXIT_REASON(SVM_EXIT_RSM , 115, "RSM instruction."), 244 EXIT_REASON(SVM_EXIT_IRET , 116, "IRET instruction."), 245 EXIT_REASON(SVM_EXIT_SWINT , 117, "Software interrupt (INTn instructions)."), 246 EXIT_REASON(SVM_EXIT_INVD , 118, "INVD instruction."), 247 EXIT_REASON(SVM_EXIT_PAUSE , 119, "PAUSE instruction."), 248 EXIT_REASON(SVM_EXIT_HLT , 120, "HLT instruction."), 249 EXIT_REASON(SVM_EXIT_INVLPG , 121, "INVLPG instruction."), 250 EXIT_REASON(SVM_EXIT_INVLPGA , 122, "INVLPGA instruction."), 251 EXIT_REASON(SVM_EXIT_IOIO , 123, "IN/OUT/INS/OUTS instruction."), 252 EXIT_REASON(SVM_EXIT_MSR , 124, "RDMSR or WRMSR access to protected MSR."), 253 EXIT_REASON(SVM_EXIT_TASK_SWITCH , 125, "Task switch."), 254 EXIT_REASON(SVM_EXIT_FERR_FREEZE , 126, "FERR Freeze; CPU frozen in an x87/mmx instruction waiting for interrupt."), 255 EXIT_REASON(SVM_EXIT_SHUTDOWN , 127, "Shutdown."), 256 EXIT_REASON(SVM_EXIT_VMRUN , 128, "VMRUN instruction."), 257 EXIT_REASON(SVM_EXIT_VMMCALL , 129, "VMCALL instruction."), 258 EXIT_REASON(SVM_EXIT_VMLOAD , 130, "VMLOAD instruction."), 259 EXIT_REASON(SVM_EXIT_VMSAVE , 131, "VMSAVE instruction."), 260 EXIT_REASON(SVM_EXIT_STGI , 132, "STGI instruction."), 261 EXIT_REASON(SVM_EXIT_CLGI , 133, "CLGI instruction."), 262 EXIT_REASON(SVM_EXIT_SKINIT , 134, "SKINIT instruction."), 263 EXIT_REASON(SVM_EXIT_RDTSCP , 135, "RDTSCP instruction."), 264 EXIT_REASON(SVM_EXIT_ICEBP , 136, "ICEBP instruction."), 265 EXIT_REASON(SVM_EXIT_WBINVD , 137, "WBINVD instruction."), 266 EXIT_REASON(SVM_EXIT_MONITOR , 138, "MONITOR instruction."), 267 EXIT_REASON(SVM_EXIT_MWAIT , 139, "MWAIT instruction."), 268 EXIT_REASON(SVM_EXIT_MWAIT_ARMED , 140, "MWAIT instruction when armed."), 269 EXIT_REASON(SVM_EXIT_XSETBV , 141, "XSETBV instruction."), 270 }; 271 /** Array index of the last valid AMD-V exit reason. */ 272 #define MAX_EXITREASON_AMDV 141 273 274 /** Special exit reasons not covered in the array above. */ 275 #define SVM_EXIT_REASON_NPF EXIT_REASON(SVM_EXIT_NPF , 1024, "Nested Page Fault.") 276 #define SVM_EXIT_REASON_AVIC_INCOMPLETE_IPI EXIT_REASON(SVM_EXIT_AVIC_INCOMPLETE_IPI, 1025, "AVIC - Incomplete IPI delivery.") 277 #define SVM_EXIT_REASON_AVIC_NOACCEL EXIT_REASON(SVM_EXIT_AVIC_NOACCEL , 1026, "AVIC - Unhandled register.") 278 279 /** 280 * Gets the SVM exit reason if it's one of the reasons not present in the @c 281 * g_apszSvmExitReasons array. 282 * 283 * @returns The exit reason or NULL if unknown. 284 * @param uExit The exit. 285 */ 286 DECLINLINE(const char *) hmSvmGetSpecialExitReasonDesc(uint16_t uExit) 287 { 288 switch (uExit) 289 { 290 case SVM_EXIT_NPF: return SVM_EXIT_REASON_NPF; 291 case SVM_EXIT_AVIC_INCOMPLETE_IPI: return SVM_EXIT_REASON_AVIC_INCOMPLETE_IPI; 292 case SVM_EXIT_AVIC_NOACCEL: return SVM_EXIT_REASON_AVIC_NOACCEL; 293 } 294 return EXIT_REASON_NIL(); 295 } 296 #undef EXIT_REASON_NIL 297 #undef EXIT_REASON 298 299 41 300 /** 42 301 * Checks whether HM (VT-x/AMD-V) is being used by this VM. … … 86 345 } 87 346 88 return HM VmxCanExecuteGuest(pVCpu, pCtx);347 return HMCanExecuteVmxGuest(pVCpu, pCtx); 89 348 } 90 349 … … 192 451 * @param pVCpu The cross context virtual CPU structure. 193 452 */ 194 VMM_INT_DECL(int) HMFlushT LB(PVMCPU pVCpu)195 { 196 LogFlow(("HMFlushT LB\n"));453 VMM_INT_DECL(int) HMFlushTlb(PVMCPU pVCpu) 454 { 455 LogFlow(("HMFlushTlb\n")); 197 456 198 457 VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH); … … 277 536 * @param pVM The cross context VM structure. 278 537 */ 279 VMM_INT_DECL(int) HMFlushT LBOnAllVCpus(PVM pVM)538 VMM_INT_DECL(int) HMFlushTlbOnAllVCpus(PVM pVM) 280 539 { 281 540 if (pVM->cCpus == 1) 282 return HMFlushT LB(&pVM->aCpus[0]);541 return HMFlushTlb(&pVM->aCpus[0]); 283 542 284 543 VMCPUID idThisCpu = VMMGetCpuId(pVM); … … 331 590 /** @todo Remove or figure out to way to update the Phys STAT counter. */ 332 591 /* STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushTlbInvlpgPhys); */ 333 return HMFlushT LBOnAllVCpus(pVM);592 return HMFlushTlbOnAllVCpus(pVM); 334 593 } 335 594 … … 429 688 VMM_INT_DECL(bool) HMIsVmxActive(PVM pVM) 430 689 { 431 return HMIsVmxSupported(pVM) && HMIsEnabled(pVM); 432 } 433 434 435 /** 436 * Checks if VT-x is supported by the host CPU. 437 * 438 * @returns true if VT-x is supported, false otherwise. 439 * @param pVM The cross context VM structure. 440 * 441 * @remarks Works before hmR3InitFinalizeR0. 442 */ 443 VMM_INT_DECL(bool) HMIsVmxSupported(PVM pVM) 444 { 445 return pVM->hm.s.vmx.fSupported; 690 return pVM->hm.s.vmx.fSupported && HMIsEnabled(pVM); 446 691 } 447 692 … … 537 782 * @param enmGuestMode New guest paging mode. 538 783 */ 539 VMM_INT_DECL(void) HMHC PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmShadowMode, PGMMODE enmGuestMode)784 VMM_INT_DECL(void) HMHCChangedPagingMode(PVM pVM, PVMCPU pVCpu, PGMMODE enmShadowMode, PGMMODE enmGuestMode) 540 785 { 541 786 # ifdef IN_RING3 … … 572 817 # endif 573 818 574 Log4(("HMHC PagingModeChanged: Guest paging mode '%s', shadow paging mode '%s'\n", PGMGetModeName(enmGuestMode),819 Log4(("HMHCChangedPagingMode: Guest paging mode '%s', shadow paging mode '%s'\n", PGMGetModeName(enmGuestMode), 575 820 PGMGetModeName(enmShadowMode))); 576 821 } … … 587 832 * @param pVmxMsrs Where to store the VMX MSRs. 588 833 */ 589 VMM_INT_DECL(void) HM VmxGetVmxMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PVMXMSRS pVmxMsrs)834 VMM_INT_DECL(void) HMGetVmxMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PVMXMSRS pVmxMsrs) 590 835 { 591 836 AssertReturnVoid(pHwvirtMsrs); … … 622 867 * @param pSvmMsrs Where to store the SVM MSRs. 623 868 */ 624 VMM_INT_DECL(void) HM VmxGetSvmMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PSVMMSRS pSvmMsrs)869 VMM_INT_DECL(void) HMGetSvmMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PSVMMSRS pSvmMsrs) 625 870 { 626 871 AssertReturnVoid(pHwvirtMsrs); … … 629 874 } 630 875 876 877 /** 878 * Gets the name of a VT-x exit code. 879 * 880 * @returns Pointer to read only string if @a uExit is known, otherwise NULL. 881 * @param uExit The VT-x exit to name. 882 */ 883 VMM_INT_DECL(const char *) HMGetVmxExitName(uint32_t uExit) 884 { 885 if (uExit <= MAX_EXITREASON_VTX) 886 { 887 Assert(uExit < RT_ELEMENTS(g_apszVmxExitReasons)); 888 return g_apszVmxExitReasons[uExit]; 889 } 890 return NULL; 891 } 892 893 894 /** 895 * Gets the name of an AMD-V exit code. 896 * 897 * @returns Pointer to read only string if @a uExit is known, otherwise NULL. 898 * @param uExit The AMD-V exit to name. 899 */ 900 VMM_INT_DECL(const char *) HMGetSvmExitName(uint32_t uExit) 901 { 902 if (uExit <= MAX_EXITREASON_AMDV) 903 { 904 Assert(uExit < RT_ELEMENTS(g_apszSvmExitReasons)); 905 return g_apszSvmExitReasons[uExit]; 906 } 907 return hmSvmGetSpecialExitReasonDesc(uExit); 908 } 909
Note:
See TracChangeset
for help on using the changeset viewer.