VirtualBox

Changeset 84494 in vbox


Ignore:
Timestamp:
May 25, 2020 11:09:52 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
138221
Message:

VMM/DBGFTracer: Add events when an event source gets registered/deregistered and proper grouping for events caused by the event source

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/DBGFAllTracer.cpp

    r84488 r84494  
    154154}
    155155
     156
     157#ifdef IN_RING3
     158/**
     159 * Posts a single event descriptor to the ring buffer of the given tracer instance - R3 only variant
     160 * (used for the register/deregister event source events currently).
     161 *
     162 * @returns VBox status code.
     163 * @param   pVM                     The current context VM instance data.
     164 * @param   pThisCC                 The event tracer instance current context data.
     165 * @param   hEvtSrc                 The event source for the posted event.
     166 * @param   enmTraceEvt             The trace event type posted.
     167 * @param   pvEvtDesc               The event descriptor to copy after the header.
     168 * @param   cbEvtDesc               Event descriptor size in bytes.
     169 * @param   pidEvt                  Where to store the assigned event ID, optional.
     170 */
     171DECLHIDDEN(int) dbgfTracerR3EvtPostSingle(PVMCC pVM, PDBGFTRACERINSCC pThisCC, DBGFTRACEREVTSRC hEvtSrc,
     172                                          DBGFTRACEREVT enmTraceEvt, const void *pvEvtDesc, size_t cbEvtDesc,
     173                                          uint64_t *pidEvt)
     174{
     175    return dbgfTracerEvtPostEx(pVM, pThisCC, hEvtSrc, enmTraceEvt, DBGF_TRACER_EVT_HDR_ID_INVALID,
     176                               pvEvtDesc, cbEvtDesc, pidEvt);
     177}
     178#endif
    156179
    157180/**
  • trunk/src/VBox/VMM/VMMR3/DBGFR3Tracer.cpp

    r84488 r84494  
    5555/** The event descriptors written to the trace log. */
    5656
     57static const RTTRACELOGEVTDESC g_EvtSrcRegisterEvtDesc =
     58{
     59    "EvtSrc.Register",
     60    "An event soruce was registered",
     61    RTTRACELOGEVTSEVERITY_DEBUG,
     62    0,
     63    NULL
     64};
     65
     66
     67static const RTTRACELOGEVTDESC g_EvtSrcDeregisterEvtDesc =
     68{
     69    "EvtSrc.Deregister",
     70    "An event soruce was de-registered",
     71    RTTRACELOGEVTSEVERITY_DEBUG,
     72    0,
     73    NULL
     74};
     75
     76
    5777static const RTTRACELOGEVTITEMDESC g_DevMmioMapEvtItems[] =
    5878{
     
    444464    switch (pEvtHdr->enmEvt)
    445465    {
     466        case DBGFTRACEREVT_SRC_REGISTER:
     467        {
     468            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_EvtSrcRegisterEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_START,
     469                                     pEvtHdr->hEvtSrc, 0 /*uParentGrpId*/);
     470            break;
     471        }
     472        case DBGFTRACEREVT_SRC_DEREGISTER:
     473        {
     474            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_EvtSrcDeregisterEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     475                                     pEvtHdr->hEvtSrc, 0 /*uParentGrpId*/);
     476            break;
     477        }
    446478        case DBGFTRACEREVT_MMIO_MAP:
    447479        {
    448480            PCDBGFTRACEREVTMMIOMAP pEvtMmioMap = (PCDBGFTRACEREVTMMIOMAP)(pEvtHdr + 1);
    449481
    450             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioMapEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     482            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioMapEvtDesc, 0 /*fFlags*/,
    451483                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioMap->hMmioRegion, pEvtMmioMap->GCPhysMmioBase);
    452484            break;
     
    456488            PCDBGFTRACEREVTMMIOUNMAP pEvtMmioUnmap = (PCDBGFTRACEREVTMMIOUNMAP)(pEvtHdr + 1);
    457489
    458             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioUnmapEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     490            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioUnmapEvtDesc, 0 /*fFlags*/,
    459491                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioUnmap->hMmioRegion);
    460492            break;
     
    469501                                     ? &g_DevMmioReadEvtDesc
    470502                                     : &g_DevMmioWriteEvtDesc,
    471                                      RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     503                                     0 /*fFlags*/,
    472504                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioRw->hMmioRegion, pEvtMmioRw->offMmio,
    473505                                     pEvtMmioRw->cbXfer, pEvtMmioRw->u64Val);
     
    478510            PCDBGFTRACEREVTMMIOFILL pEvtMmioFill = (PCDBGFTRACEREVTMMIOFILL)(pEvtHdr + 1);
    479511
    480             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioFillEvtDesc,
    481                                      RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     512            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioFillEvtDesc, 0 /*fFlags*/,
    482513                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioFill->hMmioRegion, pEvtMmioFill->offMmio,
    483514                                     pEvtMmioFill->cbItem, pEvtMmioFill->cItems, pEvtMmioFill->u32Item);
     
    488519            PCDBGFTRACEREVTIOPORTMAP pEvtIoPortMap = (PCDBGFTRACEREVTIOPORTMAP)(pEvtHdr + 1);
    489520
    490             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIoPortMapEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     521            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIoPortMapEvtDesc, 0 /*fFlags*/,
    491522                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIoPortMap->hIoPorts, pEvtIoPortMap->IoPortBase);
    492523            break;
     
    496527            PCDBGFTRACEREVTIOPORTUNMAP pEvtIoPortUnmap = (PCDBGFTRACEREVTIOPORTUNMAP)(pEvtHdr + 1);
    497528
    498             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIoPortUnmapEvtDesc, RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     529            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIoPortUnmapEvtDesc, 0 /*fFlags*/,
    499530                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIoPortUnmap->hIoPorts);
    500531            break;
     
    509540                                     ? &g_DevIoPortReadEvtDesc
    510541                                     : &g_DevIoPortWriteEvtDesc,
    511                                      RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     542                                     0 /*fFlags*/,
    512543                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIoPortRw->hIoPorts, pEvtIoPortRw->offPort,
    513544                                     pEvtIoPortRw->cbXfer, pEvtIoPortRw->u32Val);
     
    518549            PCDBGFTRACEREVTIRQ pEvtIrq = (PCDBGFTRACEREVTIRQ)(pEvtHdr + 1);
    519550
    520             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog,
    521                                      &g_DevIrqEvtDesc,
    522                                      RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     551            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIrqEvtDesc, 0 /*fFlags*/,
    523552                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIrq->iIrq, pEvtIrq->fIrqLvl);
    524553            break;
     
    528557            PCDBGFTRACEREVTIOAPICMSI pEvtIoApicMsi = (PCDBGFTRACEREVTIOAPICMSI)(pEvtHdr + 1);
    529558
    530             rc = RTTraceLogWrEvtAddL(pThis->hTraceLog,
    531                                      &g_DevIrqEvtDesc,
    532                                      RTTRACELOG_WR_ADD_EVT_F_GRP_START | RTTRACELOG_WR_ADD_EVT_F_GRP_FINISH,
     559            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIrqEvtDesc, 0 /*fFlags*/,
    533560                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIoApicMsi->GCPhys, pEvtIoApicMsi->u32Val);
    534561            break;
     
    893920    PDBGFTRACERINSR3 pThis = pUVM->dbgf.s.pTracerR3;
    894921
    895     *phEvtSrc = pThis->hEvtSrcNext++;
    896     return VINF_SUCCESS;
     922    DBGFTRACEREVTSRC hEvtSrc = ASMAtomicIncU64((volatile uint64_t *)&pThis->hEvtSrcNext) - 1;
     923
     924    int rc = dbgfTracerR3EvtPostSingle(pVM, pThis, hEvtSrc, DBGFTRACEREVT_SRC_REGISTER,
     925                                       NULL /*pvEvtDesc*/, 0 /*cbEvtDesc*/, NULL /*pidEvt*/);
     926    if (RT_SUCCESS(rc))
     927        *phEvtSrc = hEvtSrc;
     928
     929    return rc;
    897930}
    898931
     
    910943    AssertReturn(hEvtSrc != NIL_DBGFTRACEREVTSRC, VERR_INVALID_HANDLE);
    911944
    912     /** @todo Leave an event that the source deregistered. */
    913     return VINF_SUCCESS;
    914 }
    915 
     945    PUVM pUVM = pVM->pUVM;
     946    PDBGFTRACERINSR3 pThis = pUVM->dbgf.s.pTracerR3;
     947    return dbgfTracerR3EvtPostSingle(pVM, pThis, hEvtSrc, DBGFTRACEREVT_SRC_DEREGISTER,
     948                                     NULL /*pvEvtDesc*/, 0 /*cbEvtDesc*/, NULL /*pidEvt*/);
     949}
     950
  • trunk/src/VBox/VMM/include/DBGFInternal.h

    r84488 r84494  
    6767    /** Invalid type. */
    6868    DBGFTRACEREVT_INVALID = 0,
     69    /** Register event source event. */
     70    DBGFTRACEREVT_SRC_REGISTER,
     71    /** Deregister event source event. */
     72    DBGFTRACEREVT_SRC_DEREGISTER,
    6973    /** MMIO map region event. */
    7074    DBGFTRACEREVT_MMIO_MAP,
     
    471475} DBGFTRACERINSRC;
    472476
     477
     478#ifdef IN_RING3
     479DECLHIDDEN(int) dbgfTracerR3EvtPostSingle(PVMCC pVM, PDBGFTRACERINSCC pThisCC, DBGFTRACEREVTSRC hEvtSrc,
     480                                          DBGFTRACEREVT enmTraceEvt, const void *pvEvtDesc, size_t cbEvtDesc,
     481                                          uint64_t *pidEvt);
     482#endif
    473483
    474484/** VMM Debugger Command. */
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