VirtualBox

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


Ignore:
Timestamp:
Mar 9, 2018 9:11:20 PM (7 years ago)
Author:
vboxsync
Message:

NEM: Some stats; doc updates. bugref:9044

File:
1 edited

Legend:

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

    r71224 r71293  
    839839                {
    840840                    Log8(("nemHCWinCancelRunVirtualProcessor: Switched %u to canceled state\n", pVCpu->idCpu));
     841                    STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatCancelChangedState);
    841842                    return VINF_SUCCESS;
    842843                }
     
    854855                    Assert(rcNt == STATUS_SUCCESS);
    855856                    if (NT_SUCCESS(rcNt))
     857                    {
     858                        STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatCancelAlertedThread);
    856859                        return VINF_SUCCESS;
     860                    }
    857861                    AssertLogRelMsgFailedReturn(("NtAlertThread failed: %#x\n", rcNt), RTErrConvertFromNtStatus(rcNt));
    858862                }
     
    14541458            case HvMessageTypeUnmappedGpa:
    14551459                Assert(pMsg->Header.PayloadSize == RT_UOFFSETOF(HV_X64_MEMORY_INTERCEPT_MESSAGE, DsSegment));
     1460                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatExitMemUnmapped);
    14561461                return nemHCWinHandleMessageMemory(pVM, pVCpu, &pMsg->X64MemoryIntercept, pCtx, pGVCpu);
    14571462
    14581463            case HvMessageTypeGpaIntercept:
    14591464                Assert(pMsg->Header.PayloadSize == RT_UOFFSETOF(HV_X64_MEMORY_INTERCEPT_MESSAGE, DsSegment));
     1465                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatExitMemIntercept);
    14601466                return nemHCWinHandleMessageMemory(pVM, pVCpu, &pMsg->X64MemoryIntercept, pCtx, pGVCpu);
    14611467
    14621468            case HvMessageTypeX64IoPortIntercept:
    14631469                Assert(pMsg->Header.PayloadSize == sizeof(pMsg->X64IoPortIntercept));
     1470                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatExitPortIo);
    14641471                return nemHCWinHandleMessageIoPort(pVM, pVCpu, &pMsg->X64IoPortIntercept, pCtx, pGVCpu);
    14651472
    14661473            case HvMessageTypeX64Halt:
     1474                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatExitHalt);
    14671475                return VINF_EM_HALT;
    14681476
     
    15361544    {
    15371545        Log8(("nemHCWinStopCpu: Stopping CPU succeeded (cpu status %u)\n", nemHCWinCpuGetRunningStatus(pVCpu) ));
     1546        STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatStopCpuSuccess);
    15381547        return rcStrict;
    15391548    }
     
    15431552    {
    15441553        Log8(("nemHCWinStopCpu: Stopping CPU succeeded (cpu status %u)\n", nemHCWinCpuGetRunningStatus(pVCpu) ));
     1554        STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatStopCpuSuccess);
    15451555        return rcStrict;
    15461556    }
     
    15601570# endif
    15611571    Log8(("nemHCWinStopCpu: Stopping CPU pending...\n"));
     1572    STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatStopCpuPending);
    15621573
    15631574    /*
     
    16521663
    16531664    /*
     1665     * Try switch to NEM runloop state.
     1666     */
     1667    if (VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM, VMCPUSTATE_STARTED))
     1668    { /* likely */ }
     1669    else
     1670    {
     1671        VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM, VMCPUSTATE_STARTED_EXEC_NEM_CANCELED);
     1672        LogFlow(("NEM/%u: returning immediately because canceled\n", pVCpu->idCpu));
     1673        return VINF_SUCCESS;
     1674    }
     1675
     1676    /*
    16541677     * The run loop.
    16551678     *
     
    17041727            }
    17051728
    1706             if (VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM_WAIT, VMCPUSTATE_STARTED))
     1729            if (VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM_WAIT, VMCPUSTATE_STARTED_EXEC_NEM))
    17071730            {
    17081731# ifdef IN_RING0
     
    17141737                                                        sizeof(pVCpu->nem.s.uIoCtlBuf.MsgSlotHandleAndGetNext),
    17151738                                                        NULL, 0);
    1716                 VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM_WAIT);
     1739                VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM, VMCPUSTATE_STARTED_EXEC_NEM_WAIT);
    17171740                if (rcNt == STATUS_SUCCESS)
    17181741# else
    17191742                BOOL fRet = VidMessageSlotHandleAndGetNext(pVM->nem.s.hPartitionDevice, pVCpu->idCpu,
    17201743                                                           pVCpu->nem.s.fHandleAndGetFlags, cMillies);
    1721                 VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM_WAIT);
     1744                VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC_NEM, VMCPUSTATE_STARTED_EXEC_NEM_WAIT);
    17221745                if (fRet)
    17231746# endif
     
    17331756                    {
    17341757                        LogFlow(("NEM/%u: breaking: nemHCWinHandleMessage -> %Rrc\n", pVCpu->idCpu, VBOXSTRICTRC_VAL(rcStrict) ));
     1758                        STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnStatus);
    17351759                        break;
    17361760                    }
     
    17501774                                          , ("VidMessageSlotHandleAndGetNext failed for CPU #%u: %#x (%u)\n", pVCpu->idCpu, rcNt, rcNt),
    17511775                                          VERR_INTERNAL_ERROR_3);
    1752                     pVCpu->nem.s.fHandleAndGetFlags = VID_MSHAGN_F_GET_NEXT_MESSAGE; /* exits are likely */
     1776                    pVCpu->nem.s.fHandleAndGetFlags = VID_MSHAGN_F_GET_NEXT_MESSAGE;
     1777                    STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatGetMsgTimeout);
    17531778                }
    17541779
     
    17641789                LogFlow(("NEM/%u: breaking: pending FF (%#x / %#x)\n",
    17651790                         pVCpu->idCpu, pVM->fGlobalForcedActions, pVCpu->fLocalForcedActions));
     1791                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnFFPost);
    17661792            }
    17671793            else
     1794            {
    17681795                LogFlow(("NEM/%u: breaking: canceled %d (pre exec)\n", pVCpu->idCpu, VMCPU_GET_STATE(pVCpu) ));
     1796                STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnCancel);
     1797            }
    17691798        }
    17701799        else
     1800        {
    17711801            LogFlow(("NEM/%u: breaking: pending FF (pre exec)\n", pVCpu->idCpu));
     1802            STAM_REL_COUNTER_INC(&pVCpu->nem.s.StatBreakOnFFPre);
     1803        }
    17721804        break;
    17731805    } /* the run loop */
     
    17841816    }
    17851817
    1786     VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM_CANCELED);
     1818    if (!VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM))
     1819        VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM_CANCELED);
    17871820
    17881821    if (pCtx->fExtrn & (CPUMCTX_EXTRN_ALL | (CPUMCTX_EXTRN_NEM_WIN_MASK & ~CPUMCTX_EXTRN_NEM_WIN_EVENT_INJECT)))
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