VirtualBox

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


Ignore:
Timestamp:
May 15, 2018 4:06:19 PM (7 years ago)
Author:
vboxsync
Message:

NEM/win: Some more interrupt fixes. bugref:9044

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h

    r72207 r72221  
    15531553     */
    15541554    nemHCWinCopyStateFromX64Header(pVCpu, pCtx, &pMsg->Header);
    1555     Log4(("IOIntW/%u: %04x:%08RX64: %u\n", pVCpu->idCpu, pMsg->Header.CsSegment.Selector, pMsg->Header.Rip, pMsg->Type));
     1555    Log4(("IntWinExit/%u: %04x:%08RX64: %u IF=%d InterruptShadow=%d\n", pVCpu->idCpu, pMsg->Header.CsSegment.Selector,
     1556          pMsg->Header.Rip, pMsg->Type, RT_BOOL(pMsg->Header.Rflags & X86_EFL_IF), pMsg->Header.ExecutionState.InterruptShadow));
    15561557
    15571558    /** @todo call nemHCWinHandleInterruptFF   */
     
    18481849        }
    18491850        *pfInterruptWindows |= NEM_WIN_INTW_F_NMI;
     1851        Log8(("NMI window pending on %u\n", pVCpu->idCpu));
    18501852    }
    18511853
     
    18791881        }
    18801882        *pfInterruptWindows |= NEM_WIN_INTW_F_REGULAR;
     1883        Log8(("Interrupt window pending on %u\n", pVCpu->idCpu));
    18811884    }
    18821885
     
    19221925    {
    19231926        /*
    1924          * Pending interrupts or such?  Need to check and deal with this prior to the state syncing.
    1925          * Note! This may stop execution.
     1927         * Pending interrupts or such?  Need to check and deal with this prior
     1928         * to the state syncing.
    19261929         */
    19271930        pVCpu->nem.s.fDesiredInterruptWindows = 0;
     
    19291932                                     | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI))
    19301933        {
     1934            /* Make sure the CPU isn't executing. */
    19311935            if (pVCpu->nem.s.fHandleAndGetFlags == VID_MSHAGN_F_GET_NEXT_MESSAGE)
    19321936            {
    19331937                pVCpu->nem.s.fHandleAndGetFlags = 0;
    19341938                rcStrict = nemHCWinStopCpu(pVM, pVCpu, rcStrict, pMappingHeader, pGVM, pGVCpu);
    1935                 if (rcStrict != VINF_SUCCESS)
     1939                if (rcStrict == VINF_SUCCESS)
     1940                { /* likely */ }
     1941                else
     1942                {
     1943                    LogFlow(("NEM/%u: breaking: nemHCWinStopCpu -> %Rrc\n", pVCpu->idCpu, VBOXSTRICTRC_VAL(rcStrict) ));
     1944                    STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnStatus);
    19361945                    break;
     1946                }
    19371947            }
     1948
     1949            /* Try inject interrupt. */
    19381950            rcStrict = nemHCWinHandleInterruptFF(pVM, pVCpu, pGVCpu, pCtx, &pVCpu->nem.s.fDesiredInterruptWindows);
    1939             if (rcStrict != VINF_SUCCESS)
     1951            if (rcStrict == VINF_SUCCESS)
     1952            { /* likely */ }
     1953            else
     1954            {
     1955                LogFlow(("NEM/%u: breaking: nemHCWinHandleInterruptFF -> %Rrc\n", pVCpu->idCpu, VBOXSTRICTRC_VAL(rcStrict) ));
     1956                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnStatus);
    19401957                break;
     1958            }
    19411959        }
    19421960
     
    19481966            || pVCpu->nem.s.fCurrentInterruptWindows != pVCpu->nem.s.fDesiredInterruptWindows)
    19491967        {
     1968            Assert(pVCpu->nem.s.fHandleAndGetFlags != VID_MSHAGN_F_GET_NEXT_MESSAGE /* not running */);
    19501969# ifdef IN_RING0
    19511970            int rc2 = nemR0WinExportState(pGVM, pGVCpu, pCtx);
Note: See TracChangeset for help on using the changeset viewer.

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