- Timestamp:
- Jun 25, 2013 1:13:23 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 86710
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r46774 r46779 3311 3311 { 3312 3312 uint8_t uIdtVector = pVmcb->ctrl.ExitIntInfo.n.u8Vector; 3313 uint8_t uExitVector = UINT8_MAX; /* Start off with an invalid vector, updated when it's valid. See below. */3314 3313 3315 3314 typedef enum … … 3326 3325 if (pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0 <= SVM_EXIT_EXCEPTION_1F) 3327 3326 { 3328 u ExitVector = (uint8_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0);3327 uint8_t uExitVector = (uint8_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0); 3329 3328 if ( uExitVector == X86_XCPT_PF 3330 3329 && uIdtVector == X86_XCPT_PF) … … 3337 3336 && ( hmR0SvmIsContributoryXcpt(uIdtVector) 3338 3337 || uIdtVector == X86_XCPT_PF)) 3339 { 3340 enmReflect = SVMREFLECTXCPT_DF; 3341 Log4(("IDT: Pending vectoring #DF %#RX64 uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo, uExitVector)); 3338 { 3339 enmReflect = SVMREFLECTXCPT_DF; 3340 Log4(("IDT: Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo, 3341 uIdtVector, uExitVector)); 3342 3342 } 3343 else if (uIdtVector == X86_XCPT_DF) 3344 enmReflect = SVMREFLECTXCPT_TF; 3345 else 3346 enmReflect = SVMREFLECTXCPT_XCPT; 3343 else if (uIdtVector == X86_XCPT_DF) 3344 { 3345 enmReflect = SVMREFLECTXCPT_TF; 3346 Log4(("IDT: Pending vectoring triple-fault %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo, 3347 uIdtVector, uExitVector)); 3348 } 3349 else 3350 enmReflect = SVMREFLECTXCPT_XCPT; 3347 3351 } 3348 3352 else … … 3380 3384 hmR0SvmSetPendingXcptDF(pVCpu); 3381 3385 rc = VINF_HM_DOUBLE_FAULT; 3382 Log4(("IDT: Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo,3383 uIdtVector, uExitVector));3384 3386 break; 3385 3387 } … … 3388 3390 { 3389 3391 rc = VINF_EM_RESET; 3390 Log4(("IDT: Pending vectoring triple-fault uIdt=%#x uExit=%#x\n", uIdtVector, uExitVector));3391 3392 break; 3392 3393 } … … 3844 3845 if (rc == VINF_SUCCESS) 3845 3846 { 3846 if (IoExitInfo.n.u1Type == 0) /* OUT */3847 if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE) 3847 3848 { 3848 3849 VBOXSTRICTRC rc2 = IOMInterpretOUTSEx(pVM, pVCpu, CPUMCTX2CORE(pCtx), IoExitInfo.n.u16Port, pDis->fPrefix, … … 3867 3868 Assert(!IoExitInfo.n.u1REP); 3868 3869 3869 if (IoExitInfo.n.u1Type == 0) /* OUT */3870 if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE) 3870 3871 { 3871 3872 VBOXSTRICTRC rc2 = IOMIOPortWrite(pVM, pVCpu, IoExitInfo.n.u16Port, pCtx->eax & uAndVal, uIOSize); … … 3950 3951 } 3951 3952 3952 #ifdef DEBUG3953 #ifdef VBOX_STRICT 3953 3954 if (rc == VINF_IOM_R3_IOPORT_READ) 3954 Assert(IoExitInfo.n.u1Type != 0);3955 Assert(IoExitInfo.n.u1Type == SVM_IOIO_READ); 3955 3956 else if (rc == VINF_IOM_R3_IOPORT_WRITE) 3956 Assert(IoExitInfo.n.u1Type == 0);3957 Assert(IoExitInfo.n.u1Type == SVM_IOIO_WRITE); 3957 3958 else 3958 3959 {
Note:
See TracChangeset
for help on using the changeset viewer.