VirtualBox

Changeset 106924 in vbox


Ignore:
Timestamp:
Nov 11, 2024 11:57:12 AM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165850
Message:

IPRT/testcase: Made the R0 modules build on win.arm64. jiraref:VBP-1449

Location:
trunk/src/VBox/Runtime/testcase
Files:
4 edited

Legend:

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

    r106061 r106924  
    4141#include <iprt/thread.h>
    4242
    43 #include <iprt/asm-amd64-x86.h>
     43#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     44# include <iprt/asm-amd64-x86.h>
     45#elif defined(RT_ARCH_ARM64)
     46# include <iprt/asm-arm.h>
     47#endif
    4448#include <iprt/errcore.h>
    4549#include <VBox/sup.h>
  • trunk/src/VBox/Runtime/testcase/tstRTR0ThreadPreemption.cpp

    r106061 r106924  
    4141#include <iprt/thread.h>
    4242
    43 #include <iprt/asm-amd64-x86.h>
     43#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     44# include <iprt/asm-amd64-x86.h>
     45#elif defined(RT_ARCH_ARM64)
     46# include <iprt/asm-arm.h>
     47#endif
    4448#include <iprt/errcore.h>
    4549#include <iprt/mem.h>
  • trunk/src/VBox/Runtime/testcase/tstRTR0Timer.cpp

    r106061 r106924  
    4242
    4343#include <iprt/asm.h>
    44 #include <iprt/asm-amd64-x86.h>
     44#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     45# include <iprt/asm-amd64-x86.h>
     46#elif defined(RT_ARCH_ARM64)
     47# include <iprt/asm-arm.h>
     48#endif
    4549#include <iprt/cpuset.h>
    4650#include <iprt/err.h>
  • trunk/src/VBox/Runtime/testcase/tstTSC.cpp

    r106061 r106924  
    3939*   Header Files                                                                                                                 *
    4040*********************************************************************************************************************************/
    41 #include <iprt/asm-amd64-x86.h>
     41#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     42# include <iprt/asm-amd64-x86.h>
     43#elif defined(RT_ARCH_ARM64)
     44# include <iprt/asm-arm.h>
     45#endif
    4246#include <iprt/asm.h>
    4347#include <iprt/getopt.h>
     
    5155
    5256/*********************************************************************************************************************************
     57*   Defined Constants And Macros                                                                                                 *
     58*********************************************************************************************************************************/
     59/** @todo this depends on TSC frequency, which is not necessarily related
     60 *        to the CPU speed on arm. */
     61#define MAX_TSC_DELTA 2750  /* WARNING: This is just a guess, increase if it doesn't work for you. */
     62
     63
     64/*********************************************************************************************************************************
    5365*   Structures and Typedefs                                                                                                      *
    5466*********************************************************************************************************************************/
     
    5769    /** The TSC.  */
    5870    uint64_t volatile   TSC;
    59     /** The APIC ID. */
    60     uint8_t volatile    u8ApicId;
     71    /** The CPU ID or APIC ID. */
     72    RTCPUID volatile    idCpu;
    6173    /** Did it succeed? */
    6274    bool volatile       fRead;
     
    95107
    96108
     109/** Wrapper around RTMpCpuId/ASMGetStuff. */
     110static RTCPUID MyGetCpuId(void)
     111{
     112    RTCPUID idCpu = RTMpCpuId();
     113    if (idCpu != NIL_RTCPUID)
     114        return idCpu;
     115#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
     116    return ASMGetApicId();
     117#elif defined(RT_ARCH_ARM64)
     118    return (RTCPUID)ASMGetThreadIdRoEL0();
     119#else
     120    return idCpu;
     121#endif
     122}
     123
    97124/**
    98125 * Thread function for catching the other cpus.
     
    124151        while (!g_fDone)
    125152        {
    126             const uint8_t   ApicId1 = ASMGetApicId();
    127             const uint64_t  TSC1    = ASMReadTSC();
    128             const uint32_t  u32Go   = g_u32Go;
     153            const RTCPUID   idCpu1 = MyGetCpuId();
     154            const uint64_t  TSC1   = ASMReadTSC();
     155            const uint32_t  u32Go  = g_u32Go;
    129156            if (u32Go == 0)
    130157                continue;
     
    133160            {
    134161                /* do the reading. */
    135                 const uint8_t   ApicId2 = ASMGetApicId();
    136                 const uint64_t  TSC2    = ASMReadTSC();
    137                 const uint8_t   ApicId3 = ASMGetApicId();
    138                 const uint64_t  TSC3    = ASMReadTSC();
    139                 const uint8_t   ApicId4 = ASMGetApicId();
    140 
    141                 if (    ApicId1 == ApicId2
    142                     &&  ApicId1 == ApicId3
    143                     &&  ApicId1 == ApicId4
    144                     &&  TSC3 - TSC1 < 2250 /* WARNING: This is just a guess, increase if it doesn't work for you. */
     162                const RTCPUID   idCpu2 = MyGetCpuId();
     163                const uint64_t  TSC2   = ASMReadTSC();
     164                const RTCPUID   idCpu3 = MyGetCpuId();
     165                const uint64_t  TSC3   = ASMReadTSC();
     166                const uint8_t   idCpu4 = MyGetCpuId();
     167
     168                if (    idCpu1 == idCpu2
     169                    &&  idCpu1 == idCpu3
     170                    &&  idCpu1 == idCpu4
     171                    &&  TSC3 - TSC1 < MAX_TSC_DELTA
    145172                    &&  TSC2 - TSC1 < TSC3 - TSC1
    146173                    )
    147174                {
    148175                    /* succeeded. */
    149                     pTscData->TSC = TSC2;
    150                     pTscData->u8ApicId = ApicId1;
     176                    pTscData->TSC     = TSC2;
     177                    pTscData->idCpu   = idCpu1;
    151178                    pTscData->fFailed = false;
    152                     pTscData->fRead = true;
     179                    pTscData->fRead   = true;
    153180                    ASMAtomicIncU32(&g_cRead);
    154181                    break;
     
    248275            ASMAtomicXchgSize(&s_aData[i].fFailed, false);
    249276            ASMAtomicXchgSize(&s_aData[i].fRead, false);
    250             ASMAtomicXchgU8(&s_aData[i].u8ApicId, 0xff);
     277            ASMAtomicXchgU32(&s_aData[i].idCpu, NIL_RTCPUID);
    251278
    252279            int rc = RTThreadUserSignal(s_aData[i].Thread);
     
    270297        /*
    271298         * Flip the "go" switch and do our readings.
    272          * We give the other threads the slack it takes to two extra TSC and APIC ID reads.
    273          */
    274         const uint8_t   ApicId1 = ASMGetApicId();
    275         const uint64_t  TSC1    = ASMReadTSC();
     299         * We give the other threads the slack it takes to two extra TSC and CPU ID reads.
     300         */
     301        const RTCPUID   idCpu1 = MyGetCpuId();
     302        const uint64_t  TSC1   = ASMReadTSC();
    276303        ASMAtomicXchgU32(&g_u32Go, 1);
    277         const uint8_t   ApicId2 = ASMGetApicId();
    278         const uint64_t  TSC2    = ASMReadTSC();
    279         const uint8_t   ApicId3 = ASMGetApicId();
    280         const uint64_t  TSC3    = ASMReadTSC();
    281         const uint8_t   ApicId4 = ASMGetApicId();
    282         const uint64_t  TSC4    = ASMReadTSC();
     304        const RTCPUID   idCpu2 = MyGetCpuId();
     305        const uint64_t  TSC2   = ASMReadTSC();
     306        const RTCPUID   idCpu3 = MyGetCpuId();
     307        const uint64_t  TSC3   = ASMReadTSC();
     308        const RTCPUID   idCpu4 = MyGetCpuId();
     309        const uint64_t  TSC4   = ASMReadTSC();
    283310        ASMAtomicXchgU32(&g_u32Go, 2);
    284         const uint8_t   ApicId5 = ASMGetApicId();
    285         const uint64_t  TSC5    = ASMReadTSC();
    286         const uint8_t   ApicId6 = ASMGetApicId();
     311        const RTCPUID   idCpu5 = MyGetCpuId();
     312        const uint64_t  TSC5   = ASMReadTSC();
     313        const RTCPUID   idCpu6 = MyGetCpuId();
    287314
    288315        /* Compose our own result. */
    289         if (    ApicId1 == ApicId2
    290             &&  ApicId1 == ApicId3
    291             &&  ApicId1 == ApicId4
    292             &&  ApicId1 == ApicId5
    293             &&  ApicId1 == ApicId6
    294             &&  TSC5 - TSC1 < 2750  /* WARNING: This is just a guess, increase if it doesn't work for you. */
     316        if (    idCpu1 == idCpu2
     317            &&  idCpu1 == idCpu3
     318            &&  idCpu1 == idCpu4
     319            &&  idCpu1 == idCpu5
     320            &&  idCpu1 == idCpu6
     321            &&  TSC5 - TSC1 < MAX_TSC_DELTA
    295322            &&  TSC4 - TSC1 < TSC5 - TSC1
    296323            &&  TSC3 - TSC1 < TSC4 - TSC1
     
    300327            /* succeeded. */
    301328            s_aData[0].TSC = TSC2;
    302             s_aData[0].u8ApicId = ApicId1;
     329            s_aData[0].idCpu = idCpu1;
    303330            s_aData[0].fFailed = false;
    304331            s_aData[0].fRead = true;
     
    340367            {
    341368                for (i = 1, fDone = true; i < cCpus; i++)
    342                     if (s_aData[i - 1].u8ApicId > s_aData[i].u8ApicId)
     369                    if (s_aData[i - 1].idCpu > s_aData[i].idCpu)
    343370                    {
    344371                        TSCDATA Tmp = s_aData[i - 1];
     
    351378            RTPrintf(" #  ID  TSC            delta0 (decimal)\n"
    352379                     "-----------------------------------------\n");
    353             RTPrintf("%2d  %02x  %RX64\n", 0, s_aData[0].u8ApicId, s_aData[0].TSC);
     380            RTPrintf("%2d  %02x  %RX64\n", 0, s_aData[0].idCpu, s_aData[0].TSC);
    354381            for (i = 1; i < cCpus; i++)
    355                 RTPrintf("%2d  %02x  %RX64  %s%lld\n", i, s_aData[i].u8ApicId, s_aData[i].TSC,
     382                RTPrintf("%2d  %02x  %RX64  %s%lld\n", i, s_aData[i].idCpu, s_aData[i].TSC,
    356383                         s_aData[i].TSC > s_aData[0].TSC ? "+" : "", s_aData[i].TSC - s_aData[0].TSC);
    357384            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