VirtualBox

Changeset 11326 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Aug 11, 2008 11:01:01 AM (16 years ago)
Author:
vboxsync
Message:

iprt/tstTSC: Use mp.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstTSC.cpp

    r8245 r11326  
    3434#include <iprt/runtime.h>
    3535
     36
    3637/*******************************************************************************
    3738*   Structures and Typedefs                                                    *
     
    4041{
    4142    /** The TSC.  */
    42     uint64_t volatile   TSC;           
     43    uint64_t volatile   TSC;
    4344    /** The APIC ID. */
    4445    uint8_t volatile    u8ApicId;
     
    5152} TSCDATA, *PTSCDATA;
    5253
     54
    5355/*******************************************************************************
    5456*   Global Variables                                                           *
     
    5961static volatile uint32_t g_cReady;
    6062/** The variable the CPUs are spinning on.
    61  * 0: Spin. 
    62  * 1: Go ahead. 
    63  * 2: You're too late, back to square one. */ 
     63 * 0: Spin.
     64 * 1: Go ahead.
     65 * 2: You're too late, back to square one. */
    6466static volatile uint32_t g_u32Go;
    6567/** The number of CPUs that managed to read the TSC. */
     
    7981
    8082/**
    81  * Thread function for catching the other cpus. 
    82  * 
     83 * Thread function for catching the other cpus.
     84 *
    8385 * @returns VINF_SUCCESS (we don't care).
    8486 * @param   Thread  The thread handle.
     
    110112            const uint64_t  TSC1    = ASMReadTSC();
    111113            const uint32_t  u32Go   = g_u32Go;
    112             if (u32Go == 0) 
     114            if (u32Go == 0)
    113115                continue;
    114116
     
    122124                const uint8_t   ApicId4 = ASMGetApicId();
    123125
    124                 if (    ApicId1 == ApicId2 
     126                if (    ApicId1 == ApicId2
    125127                    &&  ApicId1 == ApicId3
    126128                    &&  ApicId1 == ApicId4
     
    146148        }
    147149    }
    148    
     150
    149151    return VINF_SUCCESS;
    150152}
     
    158160     * This is only relevant to on SMP systems.
    159161     */
    160     const unsigned cCpus = RTSystemProcessorGetCount();
    161     if (cCpus <= 1) 
     162    const unsigned cCpus = RTMpGetOnlineCount();
     163    if (cCpus <= 1)
    162164    {
    163165        RTPrintf("tstTSC: SKIPPED - Only relevant on SMP systems\n");
     
    170172    static TSCDATA s_aData[254];
    171173    uint32_t i;
    172     if (cCpus > RT_ELEMENTS(s_aData)) 
     174    if (cCpus > RT_ELEMENTS(s_aData))
    173175    {
    174176        RTPrintf("tstTSC: FAILED - too many CPUs (%u)\n", cCpus);
     
    254256        }
    255257
    256         /* 
     258        /*
    257259         * Flip the "go" switch and do our readings.
    258260         * We give the other threads the slack it takes to two extra TSC and APIC ID reads.
     
    273275
    274276        /* Compose our own result. */
    275         if (    ApicId1 == ApicId2 
     277        if (    ApicId1 == ApicId2
    276278            &&  ApicId1 == ApicId3
    277279            &&  ApicId1 == ApicId4
     
    339341            RTPrintf("%2d  %02x  %RX64\n", 0, s_aData[0].u8ApicId, s_aData[0].TSC);
    340342            for (i = 1; i < cCpus; i++)
    341                 RTPrintf("%2d  %02x  %RX64  %s%lld\n", i, s_aData[i].u8ApicId, s_aData[i].TSC, 
     343                RTPrintf("%2d  %02x  %RX64  %s%lld\n", i, s_aData[i].u8ApicId, s_aData[i].TSC,
    342344                         s_aData[i].TSC > s_aData[0].TSC ? "+" : "", s_aData[i].TSC - s_aData[0].TSC);
    343345            RTPrintf("(Needed %u attempt%s.)\n", cTries + 1, cTries ? "s" : "");
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