VirtualBox

Changeset 19732 in vbox for trunk/src


Ignore:
Timestamp:
May 15, 2009 12:29:52 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
47350
Message:

Ring 0 logger changes.

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

Legend:

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

    r19702 r19732  
    463463    Assert(pVCpu && pVCpu->idCpu == 0);
    464464
     465#ifdef LOG_ENABLED
    465466    /*
    466467     * Initialize the ring-0 logger if we haven't done so yet.
     
    473474            return rc;
    474475    }
     476#endif
    475477
    476478    /*
     
    485487        rc = SUPCallVMMR0Ex(pVM->pVMR0, 0 /* VCPU 0 */, VMMR0_DO_VMMR0_INIT, VMMGetSvnRev(), NULL);
    486488#endif
     489        /*
     490         * Flush the logs.
     491         */
     492#ifdef LOG_ENABLED
    487493        if (    pVCpu->vmm.s.pR0LoggerR3
    488494            &&  pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
    489495            RTLogFlushToLogger(&pVCpu->vmm.s.pR0LoggerR3->Logger, NULL);
     496#endif
    490497        if (rc != VINF_VMM_CALL_HOST)
    491498            break;
     
    607614        rc = SUPCallVMMR0Ex(pVM->pVMR0, 0 /* VCPU 0 */, VMMR0_DO_VMMR0_TERM, 0, NULL);
    608615#endif
     616        /*
     617         * Flush the logs.
     618         */
     619#ifdef LOG_ENABLED
    609620        if (    pVCpu->vmm.s.pR0LoggerR3
    610621            &&  pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
    611622            RTLogFlushToLogger(&pVCpu->vmm.s.pR0LoggerR3->Logger, NULL);
     623#endif
    612624        if (rc != VINF_VMM_CALL_HOST)
    613625            break;
     
    755767#endif /* VBOX_WITH_RC_RELEASE_LOGGING */
    756768
     769#ifdef LOG_ENABLED
    757770    /*
    758771     * For the ring-0 EMT logger, we use a per-thread logger instance
     
    787800        }
    788801    }
     802#endif
    789803    return rc;
    790804}
     
    14441458        rc = SUPCallVMMR0Ex(pVM->pVMR0, pVCpu->idCpu, uOperation, u64Arg, pReqHdr);
    14451459#endif
     1460        /*
     1461         * Flush the logs.
     1462         */
     1463#ifdef LOG_ENABLED
    14461464        if (    pVCpu->vmm.s.pR0LoggerR3
    14471465            &&  pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
    14481466            RTLogFlushToLogger(&pVCpu->vmm.s.pR0LoggerR3->Logger, NULL);
     1467#endif
    14491468        if (rc != VINF_VMM_CALL_HOST)
    14501469            break;
  • trunk/src/VBox/VMM/VMMInternal.h

    r19702 r19732  
    103103    /** Flag indicating whether we've disabled flushing (world switch) or not. */
    104104    bool                        fFlushingDisabled;
     105    /** Flag indicating whether we've registered the instance already. */
     106    bool                        fRegistered;
     107    bool                        a8Alignment;
    105108#if HC_ARCH_BITS == 32
    106109    uint32_t                    u32Alignment;
     
    341344    RCPTRTYPE(uint8_t *)        pbEMTStackBottomRC;
    342345
     346#ifdef LOG_ENABLED
    343347    /** Pointer to the R0 logger instance - R3 Ptr.
    344348     * This is NULL if logging is disabled. */
     
    347351     * This is NULL if logging is disabled. */
    348352    R0PTRTYPE(PVMMR0LOGGER)     pR0LoggerR0;
     353#endif
    349354
    350355    /** @name CallHost
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r19730 r19732  
    188188        return VERR_INVALID_PARAMETER;
    189189
     190#ifdef LOG_ENABLED
    190191    /*
    191192     * Register the EMT R0 logger instance for VCPU 0.
     
    196197    if (pR0Logger)
    197198    {
    198 #if 0 /* testing of the logger. */
     199# if 0 /* testing of the logger. */
    199200        LogCom(("vmmR0InitVM: before %p\n", RTLogDefaultInstance()));
    200201        LogCom(("vmmR0InitVM: pfnFlush=%p actual=%p\n", pR0Logger->Logger.pfnFlush, vmmR0LoggerFlush));
     
    204205        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
    205206        LogCom(("vmmR0InitVM: after %p reg\n", RTLogDefaultInstance()));
    206         RTLogSetDefaultInstanceThread(NULL, 0);
     207        RTLogSetDefaultInstanceThread(NULL, pVM->pSession);
    207208        LogCom(("vmmR0InitVM: after %p dereg\n", RTLogDefaultInstance()));
    208209
     
    216217        pR0Logger->Logger.pfnLogger("hello ring-0 logger\n");
    217218        LogCom(("vmmR0InitVM: returned succesfully from direct logger call (2). offScratch=%d\n", pR0Logger->Logger.offScratch));
    218         RTLogSetDefaultInstanceThread(NULL, 0);
     219        RTLogSetDefaultInstanceThread(NULL, pVM->pSession);
    219220        LogCom(("vmmR0InitVM: after %p dereg2\n", RTLogDefaultInstance()));
    220221
     
    225226        RTLogPrintf("hello ring-0 logger (RTLogPrintf)\n");
    226227        LogCom(("vmmR0InitVM: RTLogPrintf returned fine offScratch=%d\n", pR0Logger->Logger.offScratch));
    227 #endif
     228# endif
    228229        Log(("Switching to per-thread logging instance %p (key=%p)\n", &pR0Logger->Logger, pVM->pSession));
    229230        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
    230     }
     231        pR0Logger->fRegistered = true;
     232    }
     233#endif /* LOG_ENABLED */
    231234
    232235    /*
     
    261264        }
    262265    }
    263     RTLogSetDefaultInstanceThread(NULL, 0);
     266    RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pVM->pSession);
    264267    return rc;
    265268}
     
    295298     * Deregister the logger.
    296299     */
    297     RTLogSetDefaultInstanceThread(NULL, 0);
     300    RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pVM->pSession);
    298301    return VINF_SUCCESS;
    299302}
     
    626629            ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
    627630
     631#ifdef LOG_ENABLED
     632            if (pVCpu->idCpu > 0)
     633            {
     634                /* Lazy registration of ring 0 loggers. */
     635                PVMMR0LOGGER pR0Logger = pVCpu->vmm.s.pR0LoggerR0;
     636                if (    pR0Logger
     637                    &&  !pR0Logger->fRegistered)
     638                {
     639                    RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     640                    pR0Logger->fRegistered = true;
     641                }
     642            }
     643#endif
    628644            if (!HWACCMR0SuspendPending())
    629645            {
     
    764780            if (!pVM)
    765781                return VERR_INVALID_PARAMETER;
    766 
    767 #ifdef LOG_ENABLED
    768             /* Register the ring 0 logger for this thread here as well. */
    769             PVMCPU       pVCpu = &pVM->aCpus[idCpu];
    770             PVMMR0LOGGER pR0Logger = pVCpu->vmm.s.pR0LoggerR0;
    771             if (pR0Logger)
    772                 RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
    773 #endif
    774782            return GVMMR0RegisterVCpu(pVM, idCpu);
    775783        }
     
    11401148}
    11411149
    1142 
     1150#ifdef LOG_ENABLED
    11431151/**
    11441152 * Internal R0 logger worker: Flush logger.
     
    11961204    VMMR0CallHost(pVM, VMMCALLHOST_VMM_LOGGER_FLUSH, 0);
    11971205}
    1198 
    1199 
     1206#endif
     1207
     1208#ifdef LOG_ENABLED
    12001209/**
    12011210 * Disables flushing of the ring-0 debug log.
     
    12221231        pVCpu->vmm.s.pR0LoggerR0->fFlushingDisabled = false;
    12231232}
    1224 
     1233#endif
    12251234
    12261235/**
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