VirtualBox

Changeset 90948 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 27, 2021 11:42:06 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146586
Message:

VMM: Organize the logger structures both named member and arrays for easier access by the log flusher and init/term code. bugref:10086

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r90945 r90948  
    145145#endif
    146146RT_C_DECLS_END
    147 static int  vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, bool fRelease);
     147static int  vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, size_t idxLogger);
    148148static int  vmmR0LogFlusher(PGVM pGVM);
    149149static int  vmmR0InitLoggers(PGVM pGVM);
     
    402402        pGVCpu->vmmr0.s.pPreemptState               = NULL;
    403403        pGVCpu->vmmr0.s.hCtxHook                    = NIL_RTTHREADCTXHOOK;
    404         pGVCpu->vmmr0.s.Logger.hEventFlushWait      = NIL_RTSEMEVENT;
    405         pGVCpu->vmmr0.s.RelLogger.hEventFlushWait  = NIL_RTSEMEVENT;
     404        for (size_t iLogger = 0; iLogger < RT_ELEMENTS(pGVCpu->vmmr0.s.u.aLoggers); iLogger++)
     405            pGVCpu->vmmr0.s.u.aLoggers[iLogger].hEventFlushWait = NIL_RTSEMEVENT;
    406406    }
    407407
     
    460460     */
    461461    PVMCPUCC pVCpu = VMCC_GET_CPU_0(pGVM);
    462     if (pVCpu->vmmr0.s.Logger.pLogger)
     462    if (pVCpu->vmmr0.s.u.s.Logger.pLogger)
    463463    {
    464464# if 0 /* testing of the logger. */
     
    493493# endif
    494494# ifdef VBOX_WITH_R0_LOGGING
    495         Log(("Switching to per-thread logging instance %p (key=%p)\n", pVCpu->vmmr0.s.Logger.pLogger, pGVM->pSession));
    496         RTLogSetDefaultInstanceThread(pVCpu->vmmr0.s.Logger.pLogger, (uintptr_t)pGVM->pSession);
    497         pVCpu->vmmr0.s.Logger.fRegistered = true;
     495        Log(("Switching to per-thread logging instance %p (key=%p)\n", pVCpu->vmmr0.s.u.s.Logger.pLogger, pGVM->pSession));
     496        RTLogSetDefaultInstanceThread(pVCpu->vmmr0.s.u.s.Logger.pLogger, (uintptr_t)pGVM->pSession);
     497        pVCpu->vmmr0.s.u.s.Logger.fRegistered = true;
    498498# endif
    499499    }
     
    596596     */
    597597    PVMCPUCC pVCpu = &pGVM->aCpus[idCpu];
    598     if (   pVCpu->vmmr0.s.Logger.pLogger
    599         && !pVCpu->vmmr0.s.Logger.fRegistered)
    600     {
    601         RTLogSetDefaultInstanceThread(pVCpu->vmmr0.s.Logger.pLogger, (uintptr_t)pGVM->pSession);
    602         pVCpu->vmmr0.s.Logger.fRegistered = true;
     598    if (   pVCpu->vmmr0.s.u.s.Logger.pLogger
     599        && !pVCpu->vmmr0.s.u.s.Logger.fRegistered)
     600    {
     601        RTLogSetDefaultInstanceThread(pVCpu->vmmr0.s.u.s.Logger.pLogger, (uintptr_t)pGVM->pSession);
     602        pVCpu->vmmr0.s.u.s.Logger.fRegistered = true;
    603603    }
    604604#endif
     
    12441244VMMR0_INT_DECL(PRTLOGGER) VMMR0GetReleaseLogger(PVMCPUCC pVCpu)
    12451245{
    1246     return pVCpu->vmmr0.s.RelLogger.pLogger;
     1246    return pVCpu->vmmr0.s.u.s.RelLogger.pLogger;
    12471247}
    12481248
     
    19631963            if (idCpu == NIL_VMCPUID)
    19641964                return VERR_INVALID_CPU_ID;
    1965             if (u64Arg <= 1 && pReqHdr != NULL)
    1966                 rc = vmmR0UpdateLoggers(pGVM, idCpu /*idCpu*/, (PVMMR0UPDATELOGGERSREQ)pReqHdr, u64Arg != 0);
     1965            if (u64Arg < VMMLOGGER_IDX_MAX && pReqHdr != NULL)
     1966                rc = vmmR0UpdateLoggers(pGVM, idCpu /*idCpu*/, (PVMMR0UPDATELOGGERSREQ)pReqHdr, (size_t)u64Arg);
    19671967            else
    19681968                return VERR_INVALID_PARAMETER;
     
    28932893 * @param   idCpu           The ID of the calling EMT.
    28942894 * @param   pReq            The request data.
    2895  * @param   fRelease        Which logger set to update.
     2895 * @param   idxLogger       Which logger set to update.
    28962896 * @thread  EMT(idCpu)
    28972897 */
    2898 static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, bool fRelease)
     2898static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, size_t idxLogger)
    28992899{
    29002900    /*
     
    29072907    AssertReturn(pReq->cGroups < _8K, VERR_INVALID_PARAMETER);
    29082908    AssertReturn(pReq->Hdr.cbReq == RT_UOFFSETOF_DYN(VMMR0UPDATELOGGERSREQ, afGroups[pReq->cGroups]), VERR_INVALID_PARAMETER);
     2909
     2910    AssertReturn(idxLogger < VMMLOGGER_IDX_MAX, VERR_OUT_OF_RANGE);
    29092911
    29102912    /*
     
    29242926    for (idCpu = 0; idCpu < pGVM->cCpus; idCpu++)
    29252927    {
    2926         PGVMCPU pGVCpu = &pGVM->aCpus[idCpu];
    2927         PRTLOGGER pLogger = fRelease ? pGVCpu->vmmr0.s.RelLogger.pLogger : pGVCpu->vmmr0.s.Logger.pLogger;
     2928        PGVMCPU   pGVCpu = &pGVM->aCpus[idCpu];
     2929        PRTLOGGER pLogger = pGVCpu->vmmr0.s.u.aLoggers[idxLogger].pLogger;
    29282930        if (pLogger)
    29292931        {
     
    29882990        /* Do the waking up. */
    29892991        if (   idCpu < pGVM->cCpus
    2990             && idxLogger < 2
     2992            && idxLogger < VMMLOGGER_IDX_MAX
    29912993            && idxBuffer < 1)
    29922994        {
    29932995            PGVMCPU             pGVCpu = &pGVM->aCpus[idCpu];
    2994             PVMMR0PERVCPULOGGER pR0Log = idxLogger == 1 ? &pGVCpu->vmmr0.s.Logger : &pGVCpu->vmmr0.s.RelLogger;
     2996            PVMMR0PERVCPULOGGER pR0Log = &pGVCpu->vmmr0.s.u.aLoggers[idxLogger];
    29952997            pR0Log->fFlushDone = true;
    29962998
     
    30803082 * Common worker for vmmR0LogFlush and vmmR0LogRelFlush.
    30813083 */
    3082 static bool vmmR0LoggerFlushCommon(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc, bool fRelease)
    3083 {
    3084     RT_NOREF(pBufDesc, fRelease);
     3084static bool vmmR0LoggerFlushCommon(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc, uint32_t idxLogger)
     3085{
     3086    RT_NOREF(pBufDesc);
    30853087
    30863088    /*
     
    31033105                    && RT_VALID_PTR(pGVM))
    31043106                {
    3105                     PVMMR0PERVCPULOGGER const pR0Log  = !fRelease ? &pGVCpu->vmmr0.s.Logger : &pGVCpu->vmmr0.s.RelLogger;
    3106                     PVMMR3CPULOGGER const     pShared = !fRelease ? &pGVCpu->vmm.s.Logger   : &pGVCpu->vmm.s.RelLogger;
     3107                    PVMMR0PERVCPULOGGER const pR0Log  = &pGVCpu->vmmr0.s.u.aLoggers[idxLogger];
     3108                    PVMMR3CPULOGGER const     pShared = &pGVCpu->vmm.s.u.aLoggers[idxLogger];
    31073109
    31083110                    /*
     
    31433145                                    {
    31443146                                        pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.idCpu       = pGVCpu->idCpu;
    3145                                         pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.idxLogger   = !fRelease;
     3147                                        pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.idxLogger   = idxLogger;
    31463148                                        pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.idxBuffer   = 0;
    31473149                                        pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.fProcessing = 0;
     
    32133215static DECLCALLBACK(bool) vmmR0LogRelFlush(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc)
    32143216{
    3215     return vmmR0LoggerFlushCommon(pLogger, pBufDesc, true /*fRelease*/);
     3217    return vmmR0LoggerFlushCommon(pLogger, pBufDesc, VMMLOGGER_IDX_RELEASE);
    32163218}
    32173219
     
    32233225{
    32243226#ifdef LOG_ENABLED
    3225     return vmmR0LoggerFlushCommon(pLogger, pBufDesc, false /*fRelease*/);
     3227    return vmmR0LoggerFlushCommon(pLogger, pBufDesc, VMMLOGGER_IDX_REGULAR);
    32263228#else
    32273229    RT_NOREF(pLogger, pBufDesc);
     
    32303232}
    32313233
    3232 #ifdef LOG_ENABLED
    3233 
    3234 /**
    3235  * Disables flushing of the ring-0 debug log.
    3236  *
    3237  * @param   pVCpu       The cross context virtual CPU structure.
    3238  */
    3239 VMMR0_INT_DECL(void) VMMR0LogFlushDisable(PVMCPUCC pVCpu)
    3240 {
    3241     pVCpu->vmmr0.s.fLogFlushingDisabled = true;
    3242     if (pVCpu->vmmr0.s.Logger.pLogger)
    3243         pVCpu->vmmr0.s.Logger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    3244     if (pVCpu->vmmr0.s.RelLogger.pLogger)
    3245         pVCpu->vmmr0.s.RelLogger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    3246 }
    3247 
    3248 
    3249 /**
    3250  * Enables flushing of the ring-0 debug log.
    3251  *
    3252  * @param   pVCpu       The cross context virtual CPU structure.
    3253  */
    3254 VMMR0_INT_DECL(void) VMMR0LogFlushEnable(PVMCPUCC pVCpu)
    3255 {
    3256     pVCpu->vmmr0.s.fLogFlushingDisabled = false;
    3257     if (pVCpu->vmmr0.s.Logger.pLogger)
    3258         pVCpu->vmmr0.s.Logger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    3259     if (pVCpu->vmmr0.s.RelLogger.pLogger)
    3260         pVCpu->vmmr0.s.RelLogger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    3261 }
    3262 
    3263 
    3264 /**
    3265  * Checks if log flushing is disabled or not.
    3266  *
    3267  * @param   pVCpu       The cross context virtual CPU structure.
    3268  */
    3269 VMMR0_INT_DECL(bool) VMMR0IsLogFlushDisabled(PVMCPUCC pVCpu)
    3270 {
    3271     return pVCpu->vmmr0.s.fLogFlushingDisabled;
    3272 }
    3273 
    3274 #endif /* LOG_ENABLED */
    32753234
    32763235/*
     
    32833242    if (pGVCpu)
    32843243    {
    3285         PRTLOGGER pLogger = pGVCpu->vmmr0.s.Logger.pLogger;
     3244        PRTLOGGER pLogger = pGVCpu->vmmr0.s.u.s.Logger.pLogger;
    32863245        if (RT_VALID_PTR(pLogger))
    32873246        {
     
    32893248                && pLogger->u64UserValue3 == (uintptr_t)pGVCpu)
    32903249            {
    3291                 if (!pGVCpu->vmmr0.s.Logger.fFlushing)
     3250                if (!pGVCpu->vmmr0.s.u.s.Logger.fFlushing)
    32923251                {
    32933252                    if (!(pGVCpu->vmmr0.s.fLogFlushingDisabled))
     
    33213280    if (pGVCpu)
    33223281    {
    3323         PRTLOGGER pLogger = pGVCpu->vmmr0.s.RelLogger.pLogger;
     3282        PRTLOGGER pLogger = pGVCpu->vmmr0.s.u.s.RelLogger.pLogger;
    33243283        if (RT_VALID_PTR(pLogger))
    33253284        {
     
    33273286                && pLogger->u64UserValue3 == (uintptr_t)pGVCpu)
    33283287            {
    3329                 if (!pGVCpu->vmmr0.s.RelLogger.fFlushing)
     3288                if (!pGVCpu->vmmr0.s.u.s.RelLogger.fFlushing)
    33303289                {
    33313290                    if (!(pGVCpu->vmmr0.s.fLogFlushingDisabled))
     
    34143373 * Initializes one type of loggers for each EMT.
    34153374 */
    3416 static int vmmR0InitLoggerSet(PGVM pGVM, bool fRelease, uint32_t cbBuf, PRTR0MEMOBJ phMemObj, PRTR0MEMOBJ phMapObj)
     3375static int vmmR0InitLoggerSet(PGVM pGVM, uint8_t idxLogger, uint32_t cbBuf, PRTR0MEMOBJ phMemObj, PRTR0MEMOBJ phMapObj)
    34173376{
    34183377    /* Allocate buffers first. */
     
    34333392            {
    34343393                PGVMCPU             pGVCpu  = &pGVM->aCpus[i];
    3435                 PVMMR0PERVCPULOGGER pR0Log  = fRelease ? &pGVCpu->vmmr0.s.RelLogger : &pGVCpu->vmmr0.s.Logger;
    3436                 PVMMR3CPULOGGER     pShared = fRelease ? &pGVCpu->vmm.s.RelLogger   : &pGVCpu->vmm.s.Logger;
    3437                 rc = vmmR0InitLoggerOne(pGVCpu, fRelease, pR0Log, pShared, cbBuf, pchBuf + i * cbBuf, pchBufR3 + i * cbBuf);
     3394                PVMMR0PERVCPULOGGER pR0Log  = &pGVCpu->vmmr0.s.u.aLoggers[idxLogger];
     3395                PVMMR3CPULOGGER     pShared = &pGVCpu->vmm.s.u.aLoggers[idxLogger];
     3396                rc = vmmR0InitLoggerOne(pGVCpu, idxLogger == VMMLOGGER_IDX_RELEASE, pR0Log, pShared, cbBuf,
     3397                                        pchBuf + i * cbBuf, pchBufR3 + i * cbBuf);
    34383398                if (RT_FAILURE(rc))
    34393399                {
     
    34433403                    {
    34443404                        pGVCpu = &pGVM->aCpus[i];
    3445                         vmmR0TermLoggerOne(fRelease ? &pGVCpu->vmmr0.s.RelLogger : &pGVCpu->vmmr0.s.Logger,
    3446                                            fRelease ? &pGVCpu->vmm.s.RelLogger   : &pGVCpu->vmm.s.Logger);
     3405                        vmmR0TermLoggerOne(&pGVCpu->vmmr0.s.u.aLoggers[idxLogger], &pGVCpu->vmm.s.u.aLoggers[idxLogger]);
    34473406                    }
    34483407                    break;
     
    34893448             * Create the ring-0 release loggers.
    34903449             */
    3491             rc = vmmR0InitLoggerSet(pGVM, true /*fRelease*/, _8K,
     3450            rc = vmmR0InitLoggerSet(pGVM, VMMLOGGER_IDX_RELEASE, _8K,
    34923451                                    &pGVM->vmmr0.s.hMemObjReleaseLogger, &pGVM->vmmr0.s.hMapObjReleaseLogger);
    34933452#ifdef LOG_ENABLED
     
    34973456                 * Create debug loggers.
    34983457                 */
    3499                 rc = vmmR0InitLoggerSet(pGVM, false /*fRelease*/, _64K,
     3458                rc = vmmR0InitLoggerSet(pGVM, VMMLOGGER_IDX_REGULAR, _64K,
    35003459                                        &pGVM->vmmr0.s.hMemObjLogger, &pGVM->vmmr0.s.hMapObjLogger);
    35013460            }
     
    35173476    {
    35183477        PGVMCPU pGVCpu = &pGVM->aCpus[idCpu];
    3519         vmmR0TermLoggerOne(&pGVCpu->vmmr0.s.RelLogger, &pGVCpu->vmm.s.RelLogger);
    3520         vmmR0TermLoggerOne(&pGVCpu->vmmr0.s.Logger,    &pGVCpu->vmm.s.Logger);
     3478        for (size_t iLogger = 0; iLogger < RT_ELEMENTS(pGVCpu->vmmr0.s.u.aLoggers); iLogger++)
     3479            vmmR0TermLoggerOne(&pGVCpu->vmmr0.s.u.aLoggers[iLogger], &pGVCpu->vmm.s.u.aLoggers[iLogger]);
    35213480    }
    35223481
  • trunk/src/VBox/VMM/VMMR3/VMM.cpp

    r90945 r90948  
    520520         */
    521521#ifdef LOG_ENABLED
    522         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.Logger, NULL);
    523 #endif
    524         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.RelLogger, RTLogRelGetDefaultInstance());
     522        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.Logger, NULL);
     523#endif
     524        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.RelLogger, RTLogRelGetDefaultInstance());
    525525        if (rc != VINF_VMM_CALL_HOST)
    526526            break;
     
    653653         */
    654654#ifdef LOG_ENABLED
    655         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.Logger, NULL);
    656 #endif
    657         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.RelLogger, RTLogRelGetDefaultInstance());
     655        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.Logger, NULL);
     656#endif
     657        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.RelLogger, RTLogRelGetDefaultInstance());
    658658        if (rc != VINF_VMM_CALL_HOST)
    659659            break;
     
    815815    pVM->vmm.s.LogFlusherItem.u32 = UINT32_MAX;
    816816
    817     /* The loggers. */
    818     PRTLOGGER const apLoggers[2] = { RTLogRelGetDefaultInstance(), RTLogGetDefaultInstance() };
     817    /*
     818     * Logger getter functions.
     819     */
     820    typedef DECLCALLBACKPTR(PRTLOGGER, PFNGETLOGGER, ());
     821    static const PFNGETLOGGER s_apfnLogGetters[] =
     822    {
     823        RTLogGetDefaultInstance,
     824        RTLogRelGetDefaultInstance,
     825    };
     826    Assert(RTLogGetDefaultInstance == s_apfnLogGetters[VMMLOGGER_IDX_REGULAR]);
     827    Assert(RTLogRelGetDefaultInstance == s_apfnLogGetters[VMMLOGGER_IDX_RELEASE]);
    819828
    820829    /*
     
    833842            Item.u32 = pVM->vmm.s.LogFlusherItem.u32;
    834843            if (   Item.s.idCpu     <  pVM->cCpus
    835                 && Item.s.idxLogger <= RT_ELEMENTS(apLoggers)
     844                && Item.s.idxLogger <  VMMLOGGER_IDX_MAX
    836845                && Item.s.idxBuffer <= 1)
    837846            {
     
    840849                 */
    841850                PVMCPU const          pVCpu     = pVM->apCpusR3[Item.s.idCpu];
    842                 PVMMR3CPULOGGER const pShared   = Item.s.idxLogger == 1 ? &pVCpu->vmm.s.Logger : &pVCpu->vmm.s.RelLogger;
     851                PVMMR3CPULOGGER const pShared   = &pVCpu->vmm.s.u.aLoggers[Item.s.idxLogger];
    843852                uint32_t const        cbToFlush = pShared->AuxDesc.offBuf;
    844853                if (cbToFlush > 0)
     
    855864                                       Item.s.idCpu, Item.s.idxLogger, Item.s.idxBuffer, cbToFlush,
    856865                                       pShared->AuxDesc.fFlushedIndicator, pShared->cbDropped));
    857                             PRTLOGGER const pLogger = apLoggers[Item.s.idxLogger];
     866                            PRTLOGGER const pLogger = s_apfnLogGetters[Item.s.idxLogger]();
    858867                            if (pLogger)
    859868                                RTLogBulkWrite(pLogger, pchBufR3, cbToFlush);
     
    11861195         */
    11871196#ifdef LOG_ENABLED
    1188         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.Logger, NULL);
    1189 #endif
    1190         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.RelLogger, RTLogRelGetDefaultInstance());
     1197        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.Logger, NULL);
     1198#endif
     1199        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.RelLogger, RTLogRelGetDefaultInstance());
    11911200        if (rc != VINF_VMM_CALL_HOST)
    11921201        {
     
    12301239         */
    12311240#ifdef LOG_ENABLED
    1232         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.Logger, NULL);
    1233 #endif
    1234         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.RelLogger, RTLogRelGetDefaultInstance());
     1241        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.Logger, NULL);
     1242#endif
     1243        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.RelLogger, RTLogRelGetDefaultInstance());
    12351244        if (rcStrict != VINF_VMM_CALL_HOST)
    12361245            return rcStrict;
     
    23872396         */
    23882397#ifdef LOG_ENABLED
    2389         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.Logger, NULL);
    2390 #endif
    2391         VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.RelLogger, RTLogRelGetDefaultInstance());
     2398        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.Logger, NULL);
     2399#endif
     2400        VMM_FLUSH_R0_LOG(&pVCpu->vmm.s.u.s.RelLogger, RTLogRelGetDefaultInstance());
    23922401        if (rc != VINF_VMM_CALL_HOST)
    23932402            break;
  • trunk/src/VBox/VMM/VMMRZ/VMMRZ.cpp

    r90829 r90948  
    145145#else
    146146        pVCpu->vmmr0.s.fLogFlushingDisabled = true;
    147         if (pVCpu->vmmr0.s.Logger.pLogger)
    148             pVCpu->vmmr0.s.Logger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    149         if (pVCpu->vmmr0.s.RelLogger.pLogger)
    150             pVCpu->vmmr0.s.RelLogger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
     147        if (pVCpu->vmmr0.s.u.s.Logger.pLogger)
     148            pVCpu->vmmr0.s.u.s.Logger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
     149        if (pVCpu->vmmr0.s.u.s.RelLogger.pLogger)
     150            pVCpu->vmmr0.s.u.s.RelLogger.pLogger->u32UserValue1 |= VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    151151#endif
    152152    }
     
    178178#else
    179179        pVCpu->vmmr0.s.fLogFlushingDisabled = false;
    180         if (pVCpu->vmmr0.s.Logger.pLogger)
    181             pVCpu->vmmr0.s.Logger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    182         if (pVCpu->vmmr0.s.RelLogger.pLogger)
    183             pVCpu->vmmr0.s.RelLogger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
     180        if (pVCpu->vmmr0.s.u.s.Logger.pLogger)
     181            pVCpu->vmmr0.s.u.s.Logger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
     182        if (pVCpu->vmmr0.s.u.s.RelLogger.pLogger)
     183            pVCpu->vmmr0.s.u.s.RelLogger.pLogger->u32UserValue1 &= ~VMMR0_LOGGER_FLAGS_FLUSHING_DISABLED;
    184184#endif
    185185    }
  • trunk/src/VBox/VMM/include/VMMInternal.h

    r90945 r90948  
    110110/** Pointer to r0 logger data shared with ring-3. */
    111111typedef VMMR3CPULOGGER *PVMMR3CPULOGGER;
     112
     113/** @name Logger indexes for VMMR0PERVCPU::u.aLoggers and VMMCPU::u.aLoggers.
     114 * @{ */
     115#define VMMLOGGER_IDX_REGULAR   0
     116#define VMMLOGGER_IDX_RELEASE   1
     117#define VMMLOGGER_IDX_MAX       2
     118/** @} */
    112119
    113120
     
    470477    /** @} */
    471478
    472     /** @name Logging
    473      * @{ */
    474     /** The R0 logger data shared with ring-3. */
    475     VMMR3CPULOGGER              Logger;
    476     /** The R0 release logger data shared with ring-3. */
    477     VMMR3CPULOGGER              RelLogger;
    478     /** @}  */
     479    /**
     480     * Loggers.
     481     */
     482    union
     483    {
     484        struct
     485        {
     486            /** The R0 logger data shared with ring-3. */
     487            VMMR3CPULOGGER      Logger;
     488            /** The R0 release logger data shared with ring-3. */
     489            VMMR3CPULOGGER      RelLogger;
     490        } s;
     491        /** Array view. */
     492        VMMR3CPULOGGER          aLoggers[VMMLOGGER_IDX_MAX];
     493    } u;
    479494
    480495    STAMPROFILE                 StatR0HaltBlock;
     
    494509} VMMCPU;
    495510AssertCompileMemberAlignment(VMMCPU, TracerCtx, 8);
     511AssertCompile(   RTASSERT_OFFSET_OF(VMMCPU, u.s.Logger)
     512              == RTASSERT_OFFSET_OF(VMMCPU, u.aLoggers) + sizeof(VMMR3CPULOGGER) * VMMLOGGER_IDX_REGULAR);
     513AssertCompile(RTASSERT_OFFSET_OF(VMMCPU, u.s.RelLogger)
     514              == RTASSERT_OFFSET_OF(VMMCPU, u.aLoggers) + sizeof(VMMR3CPULOGGER) * VMMLOGGER_IDX_RELEASE);
     515
    496516/** Pointer to VMMCPU. */
    497517typedef VMMCPU *PVMMCPU;
     
    525545    /** @} */
    526546
    527     /** @name Loggers
    528      * @{ */
    529     /** The R0 logger data. */
    530     VMMR0PERVCPULOGGER                  Logger;
    531     /** The R0 release logger data. */
    532     VMMR0PERVCPULOGGER                  RelLogger;
    533     /** @} */
     547    /**
     548     * Loggers
     549     */
     550    union
     551    {
     552        struct
     553        {
     554            /** The R0 logger data. */
     555            VMMR0PERVCPULOGGER          Logger;
     556            /** The R0 release logger data. */
     557            VMMR0PERVCPULOGGER          RelLogger;
     558        } s;
     559        /** Array view. */
     560        VMMR0PERVCPULOGGER              aLoggers[VMMLOGGER_IDX_MAX];
     561    } u;
    534562} VMMR0PERVCPU;
     563AssertCompile(   RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.s.Logger)
     564              == RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.aLoggers) + sizeof(VMMR0PERVCPULOGGER) * VMMLOGGER_IDX_REGULAR);
     565AssertCompile(RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.s.RelLogger)
     566              == RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.aLoggers) + sizeof(VMMR0PERVCPULOGGER) * VMMLOGGER_IDX_RELEASE);
    535567/** Pointer to VMM ring-0 VMCPU instance data. */
    536568typedef VMMR0PERVCPU *PVMMR0PERVCPU;
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