Changeset 70735 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jan 25, 2018 10:04:26 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120494
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h
r70733 r70735 675 675 pVmcbCtrl->ExitIntInfo.n.u1Valid = 0; 676 676 677 /* 678 * Clear the event injection valid bit here. While the AMD spec. mentions that the CPU 679 * clears this bit from the VMCB unconditionally on #VMEXIT, internally the CPU could be 680 * clearing it at any time, most likely before/after injecting the event. Since VirtualBox 681 * doesn't have any virtual-CPU internal representation of this bit, we clear/update the 682 * VMCB here. This also has the added benefit that we avoid the risk of injecting the event 683 * twice if we fallback to executing the nesteed-guest using hardware-assisted SVM after 684 * injecting the event through IEM here. 685 */ 686 pVmcbCtrl->EventInject.n.u1Valid = 0; 687 677 688 /** @todo NRIP: Software interrupts can only be pushed properly if we support 678 689 * NRIP for the nested-guest to calculate the instruction length … … 680 691 LogFlow(("iemSvmVmrun: Injecting event: %04x:%08RX64 vec=%#x type=%d uErr=%u cr2=%#RX64 cr3=%#RX64 efer=%#RX64\n", 681 692 pCtx->cs.Sel, pCtx->rip, uVector, enmType, uErrorCode, pCtx->cr2, pCtx->cr3, pCtx->msrEFER)); 693 #if 0 682 694 rcStrict = IEMInjectTrap(pVCpu, uVector, enmType, uErrorCode, pCtx->cr2, 0 /* cbInstr */); 695 #else 696 TRPMAssertTrap(pVCpu, uVector, enmType); 697 if (pEventInject->n.u1ErrorCodeValid) 698 TRPMSetErrorCode(pVCpu, uErrorCode); 699 if ( enmType == TRPM_TRAP 700 && uVector == X86_XCPT_PF) 701 TRPMSetFaultAddress(pVCpu, pCtx->cr2); 702 #endif 683 703 } 684 704 else
Note:
See TracChangeset
for help on using the changeset viewer.