VirtualBox

Ticket #17316: pending_fix.patch

File pending_fix.patch, 1.8 KB (added by gim, 6 years ago)
  • src/VBox/VMM/VMMR0/HMVMXR0.cpp

    diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
    index 976873e8..6936a792 100644
    a b static VBOXSTRICTRC hmR0VmxRunGuestCodeNormal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pC  
    92909290        Assert(!HMR0SuspendPending());
    92919291        HMVMX_ASSERT_CPU_SAFE();
    92929292
     9293#if HC_ARCH_BITS == 64
     9294        uint64_t tCheck = 0;
     9295        int trc = VMXReadVmcs64(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, &tCheck);
     9296#else
     9297        uint32_t tCheck = 0;
     9298        int trc = VMXReadVmcs32(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, &tCheck);
     9299#endif
     9300        AssertRCBreak(trc);
     9301        if((tCheck & VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS) && !pVCpu->hm.s.Event.fPending)  {
     9302            int rc  = hmR0VmxReadExitIntInfoVmcs(&VmxTransient);
     9303            rc |= hmR0VmxReadExitInstrLenVmcs(&VmxTransient);
     9304            rc |= hmR0VmxReadExitIntErrorCodeVmcs(&VmxTransient);
     9305            AssertRCReturn(rc, rc);
     9306            uint32_t u32IntInfo  = X86_XCPT_DB | VMX_EXIT_INTERRUPTION_INFO_VALID;
     9307            u32IntInfo          |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_HW_XCPT << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT);
     9308            hmR0VmxSetPendingEvent(pVCpu, u32IntInfo, VmxTransient.cbInstr, 0, 0);
     9309#if HC_ARCH_BITS == 64
     9310            trc = VMXWriteVmcs64(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, tCheck &= ~VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS);
     9311#else
     9312            trc = VMXWriteVmcs32(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, tCheck &= ~VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS);
     9313#endif
     9314            AssertRCBreak(trc);
     9315        }
     9316
    92939317        /* Preparatory work for running guest code, this may force us to return
    92949318           to ring-3.  This bugger disables interrupts on VINF_SUCCESS! */
    92959319        STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatEntry, x);

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy