Changeset 72221 in vbox
- Timestamp:
- May 15, 2018 4:06:19 PM (7 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h
r72207 r72221 1553 1553 */ 1554 1554 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)); 1556 1557 1557 1558 /** @todo call nemHCWinHandleInterruptFF */ … … 1848 1849 } 1849 1850 *pfInterruptWindows |= NEM_WIN_INTW_F_NMI; 1851 Log8(("NMI window pending on %u\n", pVCpu->idCpu)); 1850 1852 } 1851 1853 … … 1879 1881 } 1880 1882 *pfInterruptWindows |= NEM_WIN_INTW_F_REGULAR; 1883 Log8(("Interrupt window pending on %u\n", pVCpu->idCpu)); 1881 1884 } 1882 1885 … … 1922 1925 { 1923 1926 /* 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. 1926 1929 */ 1927 1930 pVCpu->nem.s.fDesiredInterruptWindows = 0; … … 1929 1932 | VMCPU_FF_INTERRUPT_NMI | VMCPU_FF_INTERRUPT_SMI)) 1930 1933 { 1934 /* Make sure the CPU isn't executing. */ 1931 1935 if (pVCpu->nem.s.fHandleAndGetFlags == VID_MSHAGN_F_GET_NEXT_MESSAGE) 1932 1936 { 1933 1937 pVCpu->nem.s.fHandleAndGetFlags = 0; 1934 1938 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); 1936 1945 break; 1946 } 1937 1947 } 1948 1949 /* Try inject interrupt. */ 1938 1950 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); 1940 1957 break; 1958 } 1941 1959 } 1942 1960 … … 1948 1966 || pVCpu->nem.s.fCurrentInterruptWindows != pVCpu->nem.s.fDesiredInterruptWindows) 1949 1967 { 1968 Assert(pVCpu->nem.s.fHandleAndGetFlags != VID_MSHAGN_F_GET_NEXT_MESSAGE /* not running */); 1950 1969 # ifdef IN_RING0 1951 1970 int rc2 = nemR0WinExportState(pGVM, pGVCpu, pCtx); -
trunk/src/VBox/VMM/VMMR0/NEMR0Native-win.cpp
r72207 r72221 519 519 520 520 uint64_t const fWhat = ~pCtx->fExtrn & (CPUMCTX_EXTRN_ALL | CPUMCTX_EXTRN_NEM_WIN_MASK); 521 if (!fWhat) 521 if ( !fWhat 522 && pVCpu->nem.s.fCurrentInterruptWindows == pVCpu->nem.s.fDesiredInterruptWindows) 522 523 return VINF_SUCCESS; 523 524 uintptr_t iReg = 0; -
trunk/src/VBox/VMM/include/NEMInternal.h
r72207 r72221 244 244 STAMCOUNTER StatBreakOnStatus; 245 245 /** @} */ 246 #endif 246 #endif /* RT_OS_WINDOWS */ 247 247 } NEMCPU; 248 248 /** Pointer to NEM VMCPU instance data. */
Note:
See TracChangeset
for help on using the changeset viewer.