Changeset 47123 in vbox for trunk/src/VBox
- Timestamp:
- Jul 12, 2013 3:31:44 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 87217
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMR0A.asm
r46942 r47123 373 373 ret 374 374 ENDPROC VMXRestoreHostState 375 376 377 ;/** 378 ; * Dispatches an NMI to the host. 379 ; */ 380 ALIGNCODE(16) 381 BEGINPROC VMXDispatchHostNmi 382 int 2 ; NMI is always vector 2. The IDT[2] IRQ handler cannot be anything else. See Intel spec. 6.3.1 "External Interrupts". 383 ret 384 ENDPROC VMXDispatchHostNmi 375 385 376 386 -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r47119 r47123 3532 3532 { 3533 3533 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(); 3534 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitExtInt); 3534 3535 #ifdef VBOX_WITH_STATISTICS 3536 if (pSvmTransient->u64ExitCode == SVM_EXIT_NMI) 3537 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHostNmi); 3538 else if (pSvmTransient->u64ExitCode == SVM_EXIT_INTR) 3539 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitExtInt); 3540 #endif 3535 3541 3536 3542 /* -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r47110 r47123 7365 7365 if (uIntrType == VMX_EXIT_INTERRUPTION_INFO_TYPE_NMI) 7366 7366 { 7367 /** @todo We should inject the NMI to the host by calling the NMI 7368 * interrupt handler! See Intel spec. 27.5.5 "Updating Non-Register State". */ 7367 /* 7368 * This cannot be a guest NMI as the only way for the guest to receive an NMI is if we injected it ourselves and 7369 * anything we inject is not going to cause a VM-exit directly for the event being injected. 7370 * See Intel spec. 27.2.3 "Information for VM Exits During Event Delivery". 7371 * 7372 * Dispatch the NMI to the host. See Intel spec. 27.5.5 "Updating Non-Register State". 7373 */ 7374 VMXDispatchHostNmi(); 7375 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHostNmi); 7369 7376 STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3); 7370 return VINF_ EM_RAW_INTERRUPT;7377 return VINF_SUCCESS; 7371 7378 } 7372 7379 … … 7434 7441 { 7435 7442 AssertMsgFailed(("Unexpected VM-exit caused by exception %#x\n", uVector)); 7443 pVCpu->hm.s.u32HMError = uVector; 7436 7444 rc = VERR_VMX_UNEXPECTED_EXCEPTION; 7437 7445 } … … 7442 7450 } 7443 7451 7444 case VMX_EXIT_INTERRUPTION_INFO_TYPE_DB_XCPT:7445 7452 default: 7446 7453 { 7454 pVCpu->hm.s.u32HMError = uExitIntrInfo; 7447 7455 rc = VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_CODE; 7448 7456 AssertMsgFailed(("Unexpected interruption code %#x\n", VMX_EXIT_INTERRUPTION_INFO_TYPE(uExitIntrInfo))); -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r46871 r47123 2229 2229 goto ResumeExecution; 2230 2230 2231 case SVM_EXIT_INTR: STAM_COUNTER_INC(&pVCpu->hm.s.StatExitExtInt); /* no break */2231 case SVM_EXIT_INTR: 2232 2232 case SVM_EXIT_FERR_FREEZE: 2233 2233 case SVM_EXIT_NMI: 2234 2234 case SVM_EXIT_SMI: 2235 2235 case SVM_EXIT_INIT: 2236 #ifdef VBOX_WITH_STATISTICS 2237 if (vector == SVM_EXIT_INTR) 2238 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitExtInt); 2239 else if (vector == SVM_EXIT_NMI) 2240 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHostNmi); 2241 #endif 2236 2242 /* External interrupt; leave to allow it to be dispatched again. */ 2237 2243 rc = VINF_EM_RAW_INTERRUPT; -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r47109 r47123 3535 3535 case VMX_EXIT_INTERRUPTION_INFO_TYPE_NMI: /* Non-maskable interrupt. */ 3536 3536 /* External interrupt; leave to allow it to be dispatched again. */ 3537 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHostNmi); 3537 3538 rc = VINF_EM_RAW_INTERRUPT; 3538 3539 break; -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r47109 r47123 682 682 HM_REG_COUNTER(&pVCpu->hm.s.StatExitMaxResume, "/HM/CPU%d/Exit/MaxResume", "Maximum VMRESUME inner-loop counter reached."); 683 683 HM_REG_COUNTER(&pVCpu->hm.s.StatExitExtInt, "/HM/CPU%d/Exit/ExtInt", "Host interrupt received."); 684 HM_REG_COUNTER(&pVCpu->hm.s.StatExitHostNmi, "/HM/CPU%d/Exit/HostNmi", "Host NMI received."); 684 685 HM_REG_COUNTER(&pVCpu->hm.s.StatExitPreemptTimer, "/HM/CPU%d/Exit/PreemptTimer", "VMX-preemption timer expired."); 685 686 HM_REG_COUNTER(&pVCpu->hm.s.StatExitTprBelowThreshold, "/HM/CPU%d/Exit/TprBelowThreshold", "TPR lowered below threshold by the guest."); -
trunk/src/VBox/VMM/include/HMInternal.h
r47090 r47123 849 849 STAMCOUNTER StatExitMaxResume; 850 850 STAMCOUNTER StatExitExtInt; 851 STAMCOUNTER StatExitHostNmi; 851 852 STAMCOUNTER StatExitPreemptTimer; 852 853 STAMCOUNTER StatExitTprBelowThreshold;
Note:
See TracChangeset
for help on using the changeset viewer.