Changeset 90948 in vbox for trunk/src/VBox
- Timestamp:
- Aug 27, 2021 11:42:06 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 146586
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
r90945 r90948 145 145 #endif 146 146 RT_C_DECLS_END 147 static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, bool fRelease);147 static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, size_t idxLogger); 148 148 static int vmmR0LogFlusher(PGVM pGVM); 149 149 static int vmmR0InitLoggers(PGVM pGVM); … … 402 402 pGVCpu->vmmr0.s.pPreemptState = NULL; 403 403 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; 406 406 } 407 407 … … 460 460 */ 461 461 PVMCPUCC pVCpu = VMCC_GET_CPU_0(pGVM); 462 if (pVCpu->vmmr0.s. Logger.pLogger)462 if (pVCpu->vmmr0.s.u.s.Logger.pLogger) 463 463 { 464 464 # if 0 /* testing of the logger. */ … … 493 493 # endif 494 494 # 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; 498 498 # endif 499 499 } … … 596 596 */ 597 597 PVMCPUCC pVCpu = &pGVM->aCpus[idCpu]; 598 if ( pVCpu->vmmr0.s. Logger.pLogger599 && !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; 603 603 } 604 604 #endif … … 1244 1244 VMMR0_INT_DECL(PRTLOGGER) VMMR0GetReleaseLogger(PVMCPUCC pVCpu) 1245 1245 { 1246 return pVCpu->vmmr0.s. RelLogger.pLogger;1246 return pVCpu->vmmr0.s.u.s.RelLogger.pLogger; 1247 1247 } 1248 1248 … … 1963 1963 if (idCpu == NIL_VMCPUID) 1964 1964 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); 1967 1967 else 1968 1968 return VERR_INVALID_PARAMETER; … … 2893 2893 * @param idCpu The ID of the calling EMT. 2894 2894 * @param pReq The request data. 2895 * @param fReleaseWhich logger set to update.2895 * @param idxLogger Which logger set to update. 2896 2896 * @thread EMT(idCpu) 2897 2897 */ 2898 static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, bool fRelease)2898 static int vmmR0UpdateLoggers(PGVM pGVM, VMCPUID idCpu, PVMMR0UPDATELOGGERSREQ pReq, size_t idxLogger) 2899 2899 { 2900 2900 /* … … 2907 2907 AssertReturn(pReq->cGroups < _8K, VERR_INVALID_PARAMETER); 2908 2908 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); 2909 2911 2910 2912 /* … … 2924 2926 for (idCpu = 0; idCpu < pGVM->cCpus; idCpu++) 2925 2927 { 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; 2928 2930 if (pLogger) 2929 2931 { … … 2988 2990 /* Do the waking up. */ 2989 2991 if ( idCpu < pGVM->cCpus 2990 && idxLogger < 22992 && idxLogger < VMMLOGGER_IDX_MAX 2991 2993 && idxBuffer < 1) 2992 2994 { 2993 2995 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]; 2995 2997 pR0Log->fFlushDone = true; 2996 2998 … … 3080 3082 * Common worker for vmmR0LogFlush and vmmR0LogRelFlush. 3081 3083 */ 3082 static bool vmmR0LoggerFlushCommon(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc, bool fRelease)3083 { 3084 RT_NOREF(pBufDesc , fRelease);3084 static bool vmmR0LoggerFlushCommon(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc, uint32_t idxLogger) 3085 { 3086 RT_NOREF(pBufDesc); 3085 3087 3086 3088 /* … … 3103 3105 && RT_VALID_PTR(pGVM)) 3104 3106 { 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]; 3107 3109 3108 3110 /* … … 3143 3145 { 3144 3146 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; 3146 3148 pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.idxBuffer = 0; 3147 3149 pGVM->vmmr0.s.LogFlusher.aRing[idxTail].s.fProcessing = 0; … … 3213 3215 static DECLCALLBACK(bool) vmmR0LogRelFlush(PRTLOGGER pLogger, PRTLOGBUFFERDESC pBufDesc) 3214 3216 { 3215 return vmmR0LoggerFlushCommon(pLogger, pBufDesc, true /*fRelease*/);3217 return vmmR0LoggerFlushCommon(pLogger, pBufDesc, VMMLOGGER_IDX_RELEASE); 3216 3218 } 3217 3219 … … 3223 3225 { 3224 3226 #ifdef LOG_ENABLED 3225 return vmmR0LoggerFlushCommon(pLogger, pBufDesc, false /*fRelease*/);3227 return vmmR0LoggerFlushCommon(pLogger, pBufDesc, VMMLOGGER_IDX_REGULAR); 3226 3228 #else 3227 3229 RT_NOREF(pLogger, pBufDesc); … … 3230 3232 } 3231 3233 3232 #ifdef LOG_ENABLED3233 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 */3275 3234 3276 3235 /* … … 3283 3242 if (pGVCpu) 3284 3243 { 3285 PRTLOGGER pLogger = pGVCpu->vmmr0.s. Logger.pLogger;3244 PRTLOGGER pLogger = pGVCpu->vmmr0.s.u.s.Logger.pLogger; 3286 3245 if (RT_VALID_PTR(pLogger)) 3287 3246 { … … 3289 3248 && pLogger->u64UserValue3 == (uintptr_t)pGVCpu) 3290 3249 { 3291 if (!pGVCpu->vmmr0.s. Logger.fFlushing)3250 if (!pGVCpu->vmmr0.s.u.s.Logger.fFlushing) 3292 3251 { 3293 3252 if (!(pGVCpu->vmmr0.s.fLogFlushingDisabled)) … … 3321 3280 if (pGVCpu) 3322 3281 { 3323 PRTLOGGER pLogger = pGVCpu->vmmr0.s. RelLogger.pLogger;3282 PRTLOGGER pLogger = pGVCpu->vmmr0.s.u.s.RelLogger.pLogger; 3324 3283 if (RT_VALID_PTR(pLogger)) 3325 3284 { … … 3327 3286 && pLogger->u64UserValue3 == (uintptr_t)pGVCpu) 3328 3287 { 3329 if (!pGVCpu->vmmr0.s. RelLogger.fFlushing)3288 if (!pGVCpu->vmmr0.s.u.s.RelLogger.fFlushing) 3330 3289 { 3331 3290 if (!(pGVCpu->vmmr0.s.fLogFlushingDisabled)) … … 3414 3373 * Initializes one type of loggers for each EMT. 3415 3374 */ 3416 static int vmmR0InitLoggerSet(PGVM pGVM, bool fRelease, uint32_t cbBuf, PRTR0MEMOBJ phMemObj, PRTR0MEMOBJ phMapObj)3375 static int vmmR0InitLoggerSet(PGVM pGVM, uint8_t idxLogger, uint32_t cbBuf, PRTR0MEMOBJ phMemObj, PRTR0MEMOBJ phMapObj) 3417 3376 { 3418 3377 /* Allocate buffers first. */ … … 3433 3392 { 3434 3393 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); 3438 3398 if (RT_FAILURE(rc)) 3439 3399 { … … 3443 3403 { 3444 3404 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]); 3447 3406 } 3448 3407 break; … … 3489 3448 * Create the ring-0 release loggers. 3490 3449 */ 3491 rc = vmmR0InitLoggerSet(pGVM, true /*fRelease*/, _8K,3450 rc = vmmR0InitLoggerSet(pGVM, VMMLOGGER_IDX_RELEASE, _8K, 3492 3451 &pGVM->vmmr0.s.hMemObjReleaseLogger, &pGVM->vmmr0.s.hMapObjReleaseLogger); 3493 3452 #ifdef LOG_ENABLED … … 3497 3456 * Create debug loggers. 3498 3457 */ 3499 rc = vmmR0InitLoggerSet(pGVM, false /*fRelease*/, _64K,3458 rc = vmmR0InitLoggerSet(pGVM, VMMLOGGER_IDX_REGULAR, _64K, 3500 3459 &pGVM->vmmr0.s.hMemObjLogger, &pGVM->vmmr0.s.hMapObjLogger); 3501 3460 } … … 3517 3476 { 3518 3477 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]); 3521 3480 } 3522 3481 -
trunk/src/VBox/VMM/VMMR3/VMM.cpp
r90945 r90948 520 520 */ 521 521 #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()); 525 525 if (rc != VINF_VMM_CALL_HOST) 526 526 break; … … 653 653 */ 654 654 #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()); 658 658 if (rc != VINF_VMM_CALL_HOST) 659 659 break; … … 815 815 pVM->vmm.s.LogFlusherItem.u32 = UINT32_MAX; 816 816 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]); 819 828 820 829 /* … … 833 842 Item.u32 = pVM->vmm.s.LogFlusherItem.u32; 834 843 if ( Item.s.idCpu < pVM->cCpus 835 && Item.s.idxLogger < = RT_ELEMENTS(apLoggers)844 && Item.s.idxLogger < VMMLOGGER_IDX_MAX 836 845 && Item.s.idxBuffer <= 1) 837 846 { … … 840 849 */ 841 850 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]; 843 852 uint32_t const cbToFlush = pShared->AuxDesc.offBuf; 844 853 if (cbToFlush > 0) … … 855 864 Item.s.idCpu, Item.s.idxLogger, Item.s.idxBuffer, cbToFlush, 856 865 pShared->AuxDesc.fFlushedIndicator, pShared->cbDropped)); 857 PRTLOGGER const pLogger = apLoggers[Item.s.idxLogger];866 PRTLOGGER const pLogger = s_apfnLogGetters[Item.s.idxLogger](); 858 867 if (pLogger) 859 868 RTLogBulkWrite(pLogger, pchBufR3, cbToFlush); … … 1186 1195 */ 1187 1196 #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()); 1191 1200 if (rc != VINF_VMM_CALL_HOST) 1192 1201 { … … 1230 1239 */ 1231 1240 #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()); 1235 1244 if (rcStrict != VINF_VMM_CALL_HOST) 1236 1245 return rcStrict; … … 2387 2396 */ 2388 2397 #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()); 2392 2401 if (rc != VINF_VMM_CALL_HOST) 2393 2402 break; -
trunk/src/VBox/VMM/VMMRZ/VMMRZ.cpp
r90829 r90948 145 145 #else 146 146 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; 151 151 #endif 152 152 } … … 178 178 #else 179 179 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; 184 184 #endif 185 185 } -
trunk/src/VBox/VMM/include/VMMInternal.h
r90945 r90948 110 110 /** Pointer to r0 logger data shared with ring-3. */ 111 111 typedef 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 /** @} */ 112 119 113 120 … … 470 477 /** @} */ 471 478 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; 479 494 480 495 STAMPROFILE StatR0HaltBlock; … … 494 509 } VMMCPU; 495 510 AssertCompileMemberAlignment(VMMCPU, TracerCtx, 8); 511 AssertCompile( RTASSERT_OFFSET_OF(VMMCPU, u.s.Logger) 512 == RTASSERT_OFFSET_OF(VMMCPU, u.aLoggers) + sizeof(VMMR3CPULOGGER) * VMMLOGGER_IDX_REGULAR); 513 AssertCompile(RTASSERT_OFFSET_OF(VMMCPU, u.s.RelLogger) 514 == RTASSERT_OFFSET_OF(VMMCPU, u.aLoggers) + sizeof(VMMR3CPULOGGER) * VMMLOGGER_IDX_RELEASE); 515 496 516 /** Pointer to VMMCPU. */ 497 517 typedef VMMCPU *PVMMCPU; … … 525 545 /** @} */ 526 546 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; 534 562 } VMMR0PERVCPU; 563 AssertCompile( RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.s.Logger) 564 == RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.aLoggers) + sizeof(VMMR0PERVCPULOGGER) * VMMLOGGER_IDX_REGULAR); 565 AssertCompile(RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.s.RelLogger) 566 == RTASSERT_OFFSET_OF(VMMR0PERVCPU, u.aLoggers) + sizeof(VMMR0PERVCPULOGGER) * VMMLOGGER_IDX_RELEASE); 535 567 /** Pointer to VMM ring-0 VMCPU instance data. */ 536 568 typedef VMMR0PERVCPU *PVMMR0PERVCPU;
Note:
See TracChangeset
for help on using the changeset viewer.