Changeset 58918 in vbox
- Timestamp:
- Nov 30, 2015 12:55:40 AM (9 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r58917 r58918 5612 5612 * IDT. 5613 5613 * 5614 * @returns VBox status code (informational error codes included).5615 * @retval VINF_SUCCESS if we should continue handling the VM-exit.5616 * @retval VINF_HM_DOUBLE_FAULT if a \#DF condition was detected and we ought to5617 * continue execution of the guest which will delivery the \#DF.5618 * @retval VINF_EM_RESET if we detected a triple-fault condition.5619 * @retval VERR_EM_GUEST_CPU_HANG if we detected a guest CPU hang.5614 * @returns Strict VBox status code (informational error codes included). 5615 * @retval VINF_SUCCESS if we should continue handling the VM-exit. 5616 * @retval VINF_HM_DOUBLE_FAULT if a \#DF condition was detected and we ought 5617 * to continue execution of the guest which will delivery the \#DF. 5618 * @retval VINF_EM_RESET if we detected a triple-fault condition. 5619 * @retval VERR_EM_GUEST_CPU_HANG if we detected a guest CPU hang. 5620 5620 * 5621 5621 * @param pVCpu The cross context virtual CPU structure. … … 5627 5627 * @remarks No-long-jump zone!!! 5628 5628 */ 5629 static inthmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)5629 static VBOXSTRICTRC hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient) 5630 5630 { 5631 5631 uint32_t uExitVector = VMX_EXIT_INTERRUPTION_INFO_VECTOR(pVmxTransient->uExitIntInfo); 5632 5632 5633 int rc = hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient); 5634 AssertRCReturn(rc, rc); 5635 rc = hmR0VmxReadExitIntInfoVmcs(pVmxTransient); 5636 AssertRCReturn(rc, rc); 5637 5633 int rc2 = hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient); 5634 AssertRCReturn(rc2, rc2); 5635 rc2 = hmR0VmxReadExitIntInfoVmcs(pVmxTransient); 5636 AssertRCReturn(rc2, rc2); 5637 5638 VBOXSTRICTRC rcStrict = VINF_SUCCESS; 5638 5639 if (VMX_IDT_VECTORING_INFO_VALID(pVmxTransient->uIdtVectoringInfo)) 5639 5640 { … … 5740 5741 if (VMX_IDT_VECTORING_INFO_ERROR_CODE_IS_VALID(pVmxTransient->uIdtVectoringInfo)) 5741 5742 { 5742 rc = hmR0VmxReadIdtVectoringErrorCodeVmcs(pVmxTransient);5743 AssertRCReturn(rc , rc);5743 rc2 = hmR0VmxReadIdtVectoringErrorCodeVmcs(pVmxTransient); 5744 AssertRCReturn(rc2, rc2); 5744 5745 u32ErrCode = pVmxTransient->uIdtVectoringErrorCode; 5745 5746 } … … 5748 5749 hmR0VmxSetPendingEvent(pVCpu, VMX_ENTRY_INT_INFO_FROM_EXIT_IDT_INFO(pVmxTransient->uIdtVectoringInfo), 5749 5750 0 /* cbInstr */, u32ErrCode, pMixedCtx->cr2); 5750 rc = VINF_SUCCESS;5751 rcStrict = VINF_SUCCESS; 5751 5752 Log4(("IDT: vcpu[%RU32] Pending vectoring event %#RX64 Err=%#RX32\n", pVCpu->idCpu, 5752 5753 pVCpu->hm.s.Event.u64IntInfo, pVCpu->hm.s.Event.u32ErrCode)); … … 5758 5759 { 5759 5760 hmR0VmxSetPendingXcptDF(pVCpu, pMixedCtx); 5760 rc = VINF_HM_DOUBLE_FAULT;5761 rcStrict = VINF_HM_DOUBLE_FAULT; 5761 5762 Log4(("IDT: vcpu[%RU32] Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->idCpu, 5762 5763 pVCpu->hm.s.Event.u64IntInfo, uIdtVector, uExitVector)); … … 5767 5768 case VMXREFLECTXCPT_TF: 5768 5769 { 5769 rc = VINF_EM_RESET;5770 rcStrict = VINF_EM_RESET; 5770 5771 Log4(("IDT: vcpu[%RU32] Pending vectoring triple-fault uIdt=%#x uExit=%#x\n", pVCpu->idCpu, uIdtVector, 5771 5772 uExitVector)); … … 5775 5776 case VMXREFLECTXCPT_HANG: 5776 5777 { 5777 rc = VERR_EM_GUEST_CPU_HANG;5778 rcStrict = VERR_EM_GUEST_CPU_HANG; 5778 5779 break; 5779 5780 } 5780 5781 5781 5782 default: 5782 Assert(rc == VINF_SUCCESS);5783 Assert(rcStrict == VINF_SUCCESS); 5783 5784 break; 5784 5785 } … … 5802 5803 } 5803 5804 5804 Assert(rc == VINF_SUCCESS || rc == VINF_HM_DOUBLE_FAULT || rc == VINF_EM_RESET || rc == VERR_EM_GUEST_CPU_HANG); 5805 return rc; 5805 Assert( rcStrict == VINF_SUCCESS || rcStrict == VINF_HM_DOUBLE_FAULT 5806 || rcStrict == VINF_EM_RESET || rcStrict == VERR_EM_GUEST_CPU_HANG); 5807 return rcStrict; 5806 5808 } 5807 5809 … … 7579 7581 * Injects a double-fault (\#DF) exception into the VM. 7580 7582 * 7581 * @returns VBox status code (informational status code included).7583 * @returns Strict VBox status code (informational status code included). 7582 7584 * @param pVCpu The cross context virtual CPU structure. 7583 7585 * @param pMixedCtx Pointer to the guest-CPU context. The data may be … … 7641 7643 * Injects a general-protection (\#GP) fault into the VM. 7642 7644 * 7643 * @returns VBox status code (informational status code included).7645 * @returns Strict VBox status code (informational status code included). 7644 7646 * @param pVCpu The cross context virtual CPU structure. 7645 7647 * @param pMixedCtx Pointer to the guest-CPU context. The data may be
Note:
See TracChangeset
for help on using the changeset viewer.

