VirtualBox

Changeset 70735 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jan 25, 2018 10:04:26 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120494
Message:

VMM/IEM: SVM fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h

    r70733 r70735  
    675675            pVmcbCtrl->ExitIntInfo.n.u1Valid = 0;
    676676
     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
    677688            /** @todo NRIP: Software interrupts can only be pushed properly if we support
    678689             *        NRIP for the nested-guest to calculate the instruction length
     
    680691            LogFlow(("iemSvmVmrun: Injecting event: %04x:%08RX64 vec=%#x type=%d uErr=%u cr2=%#RX64 cr3=%#RX64 efer=%#RX64\n",
    681692                     pCtx->cs.Sel, pCtx->rip, uVector, enmType, uErrorCode, pCtx->cr2, pCtx->cr3, pCtx->msrEFER));
     693#if 0
    682694            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
    683703        }
    684704        else
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette