VirtualBox

Changeset 104512 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
May 3, 2024 3:08:25 PM (10 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163035
Message:

VMM/HM: Simplified the GCM #DE interception handling. bugref:9735 bugref:10683

File:
1 edited

Legend:

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

    r104511 r104512  
    75487548    AssertRCReturn(rc, rc);
    75497549
    7550     VBOXSTRICTRC rcStrict = VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE;
    75517550    if (VCPU_2_VMXSTATE(pVCpu).fGCMTrapXcptDE)
    75527551    {
    7553         rcStrict = GCMXcptDE(pVCpu, &pVCpu->cpum.GstCtx);
    7554         Assert(rcStrict == VINF_SUCCESS /* restart instr */ || rcStrict == VERR_NOT_FOUND /* deliver exception */);
    7555     }
    7556     /** @todo r=bird: This cannot be right! It'll suppress \#DE   */
     7552        rc = GCMXcptDE(pVCpu, &pVCpu->cpum.GstCtx);
     7553        Assert(rc == VINF_SUCCESS /* restart instr */ || rc == VERR_NOT_FOUND /* deliver exception */);
     7554    }
    75577555    else
    7558         rcStrict = VINF_SUCCESS;        /* Do nothing. */
     7556        rc = VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE;
    75597557
    75607558    /* If the GCM #DE exception handler didn't succeed or wasn't needed, raise #DE. */
    7561     if (RT_FAILURE(rcStrict))
    7562     {
     7559    if (RT_FAILURE(rc))
    75637560        vmxHCSetPendingEvent(pVCpu, VMX_ENTRY_INT_INFO_FROM_EXIT_INT_INFO(pVmxTransient->uExitIntInfo),
    7564                                pVmxTransient->cbExitInstr, pVmxTransient->uExitIntErrorCode, 0 /* GCPtrFaultAddress */);
    7565         rcStrict = VINF_SUCCESS;
    7566     }
    7567 
    7568     /** @todo r=bird: This assertion is wrong. rcStrict can never be
    7569      *        VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE here, it can only be
    7570      *        VINF_SUCCESS. */
    7571     Assert(rcStrict == VINF_SUCCESS || rcStrict == VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE);
    7572     return VBOXSTRICTRC_VAL(rcStrict);
     7561                             pVmxTransient->cbExitInstr, pVmxTransient->uExitIntErrorCode, 0 /* GCPtrFaultAddress */);
     7562    return VINF_SUCCESS;
    75737563}
    75747564
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