VirtualBox

Changeset 45545 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Apr 14, 2013 5:06:58 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
85028
Message:

VMM/VMMR0: Fixes to vectoring #PF, and reflecting exceptions to the guest.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r45544 r45545  
    47264726{
    47274727    int rc = hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient);
    4728     AssertRCReturn(rc, rc);
     4728    AssertRC(rc);
    47294729    if (VMX_IDT_VECTORING_INFO_VALID(pVmxTransient->uIdtVectoringInfo))
    47304730    {
     
    47494749        {
    47504750            if (   hmR0VmxIsBenignXcpt(uIdtVector)
    4751                 || hmR0VmxIsBenignXcpt(uExitVector)
    4752                 || (   hmR0VmxIsContributoryXcpt(uIdtVector)
    4753                     && uExitVector == X86_XCPT_PF))
     4751                || hmR0VmxIsBenignXcpt(uExitVector))
    47544752            {
    47554753                enmReflect = VMXREFLECTXCPT_XCPT;
    47564754            }
    4757             else if (   (pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT(X86_XCPT_PF))
    4758                      && uIdtVector == X86_XCPT_PF
    4759                      && uExitVector == X86_XCPT_PF)
     4755            else if (   uExitVector == X86_XCPT_PF
     4756                     && (   hmR0VmxIsContributoryXcpt(uIdtVector)
     4757                         || uIdtVector == X86_XCPT_PF))
    47604758            {
    47614759                pVmxTransient->fVectoringPF = true;
     
    47684766            else if (   hmR0VmxInterceptingContributoryXcptsOrPF(pVCpu)
    47694767                     && uIdtVector == X86_XCPT_PF
    4770                      && hmR0VmxIsContributoryXcpt(uExitVector))
     4768                     && (   hmR0VmxIsContributoryXcpt(uExitVector)
     4769                         || uExitVector == X86_XCPT_PF))
    47714770            {
    47724771                enmReflect = VMXREFLECTXCPT_DF;
     
    48214820            }
    48224821
    4823             default:    /* shut up gcc. */
     4822            default:
     4823                Assert(rc == VINF_SUCCESS);
    48244824                break;
    48254825        }
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