VirtualBox

Changeset 71445 in vbox


Ignore:
Timestamp:
Mar 22, 2018 10:40:37 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
121414
Message:

VMM/HMSVMR0: Fix FERR_FREEZE intercepts.

File:
1 edited

Legend:

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

    r71444 r71445  
    359359static FNSVMEXITHANDLER hmR0SvmExitVmmCall;
    360360static FNSVMEXITHANDLER hmR0SvmExitPause;
     361static FNSVMEXITHANDLER hmR0SvmExitFerrFreeze;
    361362static FNSVMEXITHANDLER hmR0SvmExitIret;
    362363static FNSVMEXITHANDLER hmR0SvmExitXcptPF;
     
    52355236            if (HMIsGuestSvmCtrlInterceptSet(pVCpu, pCtx, SVM_CTRL_INTERCEPT_FERR_FREEZE))
    52365237                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
    5237             return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
     5238            return hmR0SvmExitFerrFreeze(pVCpu, pCtx, pSvmTransient);
    52385239        }
    52395240
     
    55265527            return hmR0SvmExitVIntr(pVCpu, pCtx, pSvmTransient);
    55275528
     5529        case SVM_EXIT_FERR_FREEZE:
     5530            return hmR0SvmExitFerrFreeze(pVCpu, pCtx, pSvmTransient);
     5531
    55285532        case SVM_EXIT_INTR:
    5529         case SVM_EXIT_FERR_FREEZE:
    55305533        case SVM_EXIT_NMI:
    55315534            return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
     
    72357238
    72367239/**
     7240 * \#VMEXIT handler for FERR intercept (SVM_EXIT_FERR_FREEZE). Conditional
     7241 * \#VMEXIT.
     7242 */
     7243HMSVM_EXIT_DECL hmR0SvmExitFerrFreeze(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
     7244{
     7245    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
     7246    Assert(!(pCtx->cr0 & X86_CR0_NE));
     7247
     7248    Log4(("hmR0SvmExitFerrFreeze: Raising IRQ 13 in response to #FERR\n"));
     7249    return PDMIsaSetIrq(pVCpu->CTX_SUFF(pVM), 13 /* u8Irq */, 1 /* u8Level */, 0 /* uTagSrc */);
     7250}
     7251
     7252
     7253/**
    72377254 * \#VMEXIT handler for IRET (SVM_EXIT_IRET). Conditional \#VMEXIT.
    72387255 */
     
    74417458        if (RT_SUCCESS(rc))
    74427459        {
    7443 #ifdef VBOX_WITH_NESTED_HWVIRT
    7444             if (   CPUMIsGuestInSvmNestedHwVirtMode(pCtx)
    7445                 && HMIsGuestSvmCtrlInterceptSet(pVCpu, pCtx, SVM_CTRL_INTERCEPT_FERR_FREEZE))
    7446             {
    7447                 return VBOXSTRICTRC_TODO(IEMExecSvmVmexit(pVCpu, SVM_EXIT_FERR_FREEZE, 0, 0));
    7448             }
    7449 #endif
    74507460            /* Convert a #MF into a FERR -> IRQ 13. See @bugref{6117}. */
    74517461            rc = PDMIsaSetIrq(pVCpu->CTX_SUFF(pVM), 13 /* u8Irq */, 1 /* u8Level */, 0 /* uTagSrc */);
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