VirtualBox

Changeset 84766 in vbox


Ignore:
Timestamp:
Jun 10, 2020 5:40:13 PM (4 years ago)
Author:
vboxsync
Message:

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

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/dbgf.h

    r84706 r84766  
    28252825VMMR3_INT_DECL(int) DBGFR3TracerRegisterEvtSrc(PVM pVM, const char *pszName, PDBGFTRACEREVTSRC phEvtSrc);
    28262826VMMR3_INT_DECL(int) DBGFR3TracerDeregisterEvtSrc(PVM pVM, DBGFTRACEREVTSRC hEvtSrc);
     2827VMMR3_INT_DECL(int) DBGFR3TracerEvtIoPortCreate(PVM pVM, DBGFTRACEREVTSRC hEvtSrc, uint64_t hRegion, RTIOPORT cPorts, uint32_t fFlags,
     2828                                                uint32_t iPciRegion);
     2829VMMR3_INT_DECL(int) DBGFR3TracerEvtMmioCreate(PVM pVM, DBGFTRACEREVTSRC hEvtSrc, uint64_t hRegion, RTGCPHYS cbRegion, uint32_t fFlags,
     2830                                              uint32_t iPciRegion);
    28272831#endif
    28282832
  • trunk/src/VBox/VMM/VMMAll/DBGFAllTracer.cpp

    r84552 r84766  
    116116
    117117    /* Write the event and kick the flush thread if necessary. */
    118     memcpy(pEvtHdr + 1, pvEvtDesc, cbEvtDesc);
     118    if (cbEvtDesc)
     119        memcpy(pEvtHdr + 1, pvEvtDesc, cbEvtDesc);
    119120    pEvtHdr->idEvtPrev   = idEvtPrev;
    120121    pEvtHdr->hEvtSrc     = hEvtSrc;
  • 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    }
  • trunk/src/VBox/VMM/include/DBGFInternal.h

    r84756 r84766  
    7171    /** Deregister event source event. */
    7272    DBGFTRACEREVT_SRC_DEREGISTER,
     73    /** MMIO region create event. */
     74    DBGFTRACEREVT_MMIO_REGION_CREATE,
    7375    /** MMIO map region event. */
    7476    DBGFTRACEREVT_MMIO_MAP,
     
    8183    /** MMIO fill event. */
    8284    DBGFTRACEREVT_MMIO_FILL,
     85    /** I/O port region create event. */
     86    DBGFTRACEREVT_IOPORT_REGION_CREATE,
    8387    /** I/O port map event. */
    8488    DBGFTRACEREVT_IOPORT_MAP,
     
    109113
    110114/**
     115 * MMIO region create event.
     116 */
     117typedef struct DBGFTRACEREVTMMIOCREATE
     118{
     119    /** Unique region handle for the event source. */
     120    uint64_t                                hMmioRegion;
     121    /** Size of the region in bytes. */
     122    RTGCPHYS                                cbRegion;
     123    /** IOM flags passed to the region. */
     124    uint32_t                                fIomFlags;
     125    /** The PCI region for a PCI device. */
     126    uint32_t                                iPciRegion;
     127    /** Padding to 32byte. */
     128    uint64_t                                u64Pad0;
     129} DBGFTRACEREVTMMIOCREATE;
     130/** Pointer to a MMIO map event. */
     131typedef DBGFTRACEREVTMMIOCREATE *PDBGFTRACEREVTMMIOCREATE;
     132/** Pointer to a const MMIO map event. */
     133typedef const DBGFTRACEREVTMMIOCREATE *PCDBGFTRACEREVTMMIOCREATE;
     134
     135AssertCompileSize(DBGFTRACEREVTMMIOCREATE, DBGF_TRACER_EVT_PAYLOAD_SZ);
     136
     137
     138/**
    111139 * MMIO region map event.
    112140 */
     
    192220
    193221AssertCompileSize(DBGFTRACEREVTMMIOFILL, DBGF_TRACER_EVT_PAYLOAD_SZ);
     222
     223
     224/**
     225 * I/O port region create event.
     226 */
     227typedef struct DBGFTRACEREVTIOPORTCREATE
     228{
     229    /** Unique I/O port region handle for the event source. */
     230    uint64_t                                hIoPorts;
     231    /** Number of ports. */
     232    RTIOPORT                                cPorts;
     233    /** Padding. */
     234    uint16_t                                u16Pad0;
     235    /** IOM flags passed to the region. */
     236    uint32_t                                fIomFlags;
     237    /** The PCI region for a PCI device. */
     238    uint32_t                                iPciRegion;
     239    /** Padding to 32byte. */
     240    uint32_t                                u32Pad0[3];
     241} DBGFTRACEREVTIOPORTCREATE;
     242/** Pointer to a MMIO map event. */
     243typedef DBGFTRACEREVTIOPORTCREATE *PDBGFTRACEREVTIOPORTCREATE;
     244/** Pointer to a const MMIO map event. */
     245typedef const DBGFTRACEREVTIOPORTCREATE *PCDBGFTRACEREVTIOPORTCREATE;
     246
     247AssertCompileSize(DBGFTRACEREVTIOPORTCREATE, DBGF_TRACER_EVT_PAYLOAD_SZ);
    194248
    195249
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