VirtualBox

Changeset 84766 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Jun 10, 2020 5:40:13 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
138565
Message:

VMM/DBGFTracer: Add events when I/O port and MMIO regions are created, bugref:9210

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/DBGFR3Tracer.cpp

    r84756 r84766  
    7575
    7676
     77static const RTTRACELOGEVTITEMDESC g_DevMmioCreateEvtItems[] =
     78{
     79    {"hMmioRegion",    "The MMIO region handle being returned by IOM",          RTTRACELOGTYPE_UINT64,  0},
     80    {"cbRegion",       "Size of the MMIO region in bytes",                      RTTRACELOGTYPE_UINT64,  0},
     81    {"fIomFlags",      "Flags passed to IOM",                                   RTTRACELOGTYPE_UINT32,  0},
     82    {"iPciRegion",     "PCI region used for a PCI device",                      RTTRACELOGTYPE_UINT32,  0},
     83};
     84
     85static const RTTRACELOGEVTDESC g_DevMmioCreateEvtDesc =
     86{
     87    "Dev.MmioCreate",
     88    "MMIO region of a device is being created",
     89    RTTRACELOGEVTSEVERITY_DEBUG,
     90    RT_ELEMENTS(g_DevMmioCreateEvtItems),
     91    &g_DevMmioCreateEvtItems[0]
     92};
     93
     94
    7795static const RTTRACELOGEVTITEMDESC g_DevMmioMapEvtItems[] =
    7896{
     
    149167    RT_ELEMENTS(g_DevMmioFillEvtItems),
    150168    &g_DevMmioFillEvtItems[0]
     169};
     170
     171
     172static const RTTRACELOGEVTITEMDESC g_DevIoPortCreateEvtItems[] =
     173{
     174    {"hIoPorts",       "The I/O port region handle being returned by IOM",      RTTRACELOGTYPE_UINT64,  0},
     175    {"cPorts",         "Size of the region in number of ports",                 RTTRACELOGTYPE_UINT16,  0},
     176    {"fIomFlags",      "Flags passed to IOM",                                   RTTRACELOGTYPE_UINT32,  0},
     177    {"iPciRegion",     "PCI region used for a PCI device",                      RTTRACELOGTYPE_UINT32,  0},
     178};
     179
     180static const RTTRACELOGEVTDESC g_DevIoPortCreateEvtDesc =
     181{
     182    "Dev.IoPortCreate",
     183    "I/O port region of a device is being created",
     184    RTTRACELOGEVTSEVERITY_DEBUG,
     185    RT_ELEMENTS(g_DevIoPortCreateEvtItems),
     186    &g_DevIoPortCreateEvtItems[0]
    151187};
    152188
     
    560596            break;
    561597        }
     598        case DBGFTRACEREVT_MMIO_REGION_CREATE:
     599        {
     600            PCDBGFTRACEREVTMMIOCREATE pEvtMmioCreate = (PCDBGFTRACEREVTMMIOCREATE)(pEvtHdr + 1);
     601
     602            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevMmioCreateEvtDesc, 0 /*fFlags*/,
     603                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioCreate->hMmioRegion, pEvtMmioCreate->cbRegion,
     604                                     pEvtMmioCreate->fIomFlags, pEvtMmioCreate->iPciRegion);
     605            break;
     606        }
    562607        case DBGFTRACEREVT_MMIO_MAP:
    563608        {
     
    597642                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtMmioFill->hMmioRegion, pEvtMmioFill->offMmio,
    598643                                     pEvtMmioFill->cbItem, pEvtMmioFill->cItems, pEvtMmioFill->u32Item);
     644            break;
     645        }
     646        case DBGFTRACEREVT_IOPORT_REGION_CREATE:
     647        {
     648            PCDBGFTRACEREVTIOPORTCREATE pEvtIoPortCreate = (PCDBGFTRACEREVTIOPORTCREATE)(pEvtHdr + 1);
     649
     650            rc = RTTraceLogWrEvtAddL(pThis->hTraceLog, &g_DevIoPortCreateEvtDesc, 0 /*fFlags*/,
     651                                     pEvtHdr->idEvt, pEvtHdr->hEvtSrc, pEvtIoPortCreate->hIoPorts, pEvtIoPortCreate->cPorts,
     652                                     pEvtIoPortCreate->fIomFlags, pEvtIoPortCreate->iPciRegion);
    599653            break;
    600654        }
     
    10581112}
    10591113
     1114
     1115/**
     1116 * Registers an I/O port region create event for the given event source.
     1117 *
     1118 * @returns VBox status code.
     1119 * @param   pVM                     The current context VM instance data.
     1120 * @param   hEvtSrc                 The event source for the posted event.
     1121 * @param   hRegion                 The I/O port region handle returned from IOM.
     1122 * @param   cPorts                  Number of ports registered.
     1123 * @param   fFlags                  Flags passed to IOM.
     1124 * @param   iPciRegion              For a PCI device the region index used for the I/O ports.
     1125 */
     1126VMMR3_INT_DECL(int) DBGFR3TracerEvtIoPortCreate(PVM pVM, DBGFTRACEREVTSRC hEvtSrc, uint64_t hRegion, RTIOPORT cPorts, uint32_t fFlags,
     1127                                                uint32_t iPciRegion)
     1128{
     1129    VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT);
     1130    AssertReturn(hEvtSrc != NIL_DBGFTRACEREVTSRC, VERR_INVALID_HANDLE);
     1131
     1132    PUVM pUVM = pVM->pUVM;
     1133    PDBGFTRACERINSR3 pThis = pUVM->dbgf.s.pTracerR3;
     1134
     1135    DBGFTRACEREVTIOPORTCREATE EvtIoPortCreate;
     1136    RT_ZERO(EvtIoPortCreate);
     1137    EvtIoPortCreate.hIoPorts   = hRegion;
     1138    EvtIoPortCreate.cPorts     = cPorts;
     1139    EvtIoPortCreate.fIomFlags  = fFlags;
     1140    EvtIoPortCreate.iPciRegion = iPciRegion;
     1141    return dbgfTracerR3EvtPostSingle(pVM, pThis, hEvtSrc, DBGFTRACEREVT_IOPORT_REGION_CREATE,
     1142                                     &EvtIoPortCreate, sizeof(EvtIoPortCreate), NULL /*pidEvt*/);
     1143}
     1144
     1145
     1146/**
     1147 * Registers an MMIO region create event for the given event source.
     1148 *
     1149 * @returns VBox status code.
     1150 * @param   pVM                     The current context VM instance data.
     1151 * @param   hEvtSrc                 The event source for the posted event.
     1152 * @param   hRegion                 The MMIO region handle returned from IOM.
     1153 * @param   cbRegion                Size of the MMIO region in bytes.
     1154 * @param   fFlags                  Flags passed to IOM.
     1155 * @param   iPciRegion              For a PCI device the region index used for the MMIO region.
     1156 */
     1157VMMR3_INT_DECL(int) DBGFR3TracerEvtMmioCreate(PVM pVM, DBGFTRACEREVTSRC hEvtSrc, uint64_t hRegion, RTGCPHYS cbRegion, uint32_t fFlags,
     1158                                              uint32_t iPciRegion)
     1159{
     1160    VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT);
     1161    AssertReturn(hEvtSrc != NIL_DBGFTRACEREVTSRC, VERR_INVALID_HANDLE);
     1162
     1163    PUVM pUVM = pVM->pUVM;
     1164    PDBGFTRACERINSR3 pThis = pUVM->dbgf.s.pTracerR3;
     1165
     1166    DBGFTRACEREVTMMIOCREATE EvtMmioCreate;
     1167    RT_ZERO(EvtMmioCreate);
     1168    EvtMmioCreate.hMmioRegion = hRegion;
     1169    EvtMmioCreate.cbRegion    = cbRegion;
     1170    EvtMmioCreate.fIomFlags   = fFlags;
     1171    EvtMmioCreate.iPciRegion  = iPciRegion;
     1172    return dbgfTracerR3EvtPostSingle(pVM, pThis, hEvtSrc, DBGFTRACEREVT_MMIO_REGION_CREATE,
     1173                                     &EvtMmioCreate, sizeof(EvtMmioCreate), NULL /*pidEvt*/);
     1174}
     1175
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlpTracing.cpp

    r84715 r84766  
    196196            pTrack->u.IoPort.pfnInStr  = pfnInStr;
    197197            pDevIns->Internal.s.idxDbgfTraceTrackNext++;
     198            DBGFR3TracerEvtIoPortCreate(pVM, pDevIns->Internal.s.hDbgfTraceEvtSrc, *phIoPorts, cPorts, fFlags, iPciRegion);
    198199        }
    199200    }
     
    276277            pTrack->u.Mmio.pfnFill     = pfnFill;
    277278            pDevIns->Internal.s.idxDbgfTraceTrackNext++;
     279            DBGFR3TracerEvtMmioCreate(pVM, pDevIns->Internal.s.hDbgfTraceEvtSrc, *phRegion, cbRegion, fFlags, iPciRegion);
    278280        }
    279281    }
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