VirtualBox

Changeset 46144 in vbox for trunk/src


Ignore:
Timestamp:
May 17, 2013 2:46:57 PM (12 years ago)
Author:
vboxsync
Message:

Runtime: RTMpGetCoreCount() for Linux

Location:
trunk/src/VBox/Runtime
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/Makefile.kmk

    r46080 r46144  
    551551        generic/RTDirSetTimes-generic.cpp \
    552552        generic/RTFileExists-generic.cpp \
     553        generic/RTMpGetCoreCount-generic.cpp \
    553554        generic/RTMpGetCurFrequency-generic.cpp \
    554555        generic/RTMpGetMaxFrequency-generic.cpp \
     
    714715        generic/utf16locale-generic.cpp \
    715716        generic/uuid-generic.cpp \
     717        generic/RTMpGetCoreCount-generic.cpp \
    716718        generic/RTMpGetCurFrequency-generic.cpp \
    717719        generic/RTMpGetMaxFrequency-generic.cpp \
     
    773775        generic/RTUuidCreate-generic.cpp \
    774776        generic/mppresent-generic.cpp \
     777        generic/RTMpGetCoreCount-generic.cpp \
    775778        generic/RTSemEventMultiWait-2-ex-generic.cpp \
    776779        generic/RTSemEventMultiWaitNoResume-2-ex-generic.cpp \
     
    845848        generic/uuid-generic.cpp \
    846849        generic/RTMpCpuId-generic.cpp \
     850        generic/RTMpGetCoreCount-generic.cpp \
    847851        generic/RTProcDaemonize-generic.cpp \
    848852        generic/RTProcIsRunningByName-generic.cpp \
     
    905909        generic/RTTimerCreate-generic.cpp \
    906910        generic/RTUuidCreate-generic.cpp \
     911        generic/RTMpGetCoreCount-generic.cpp \
    907912        generic/sched-generic.cpp \
    908913        generic/utf16locale-generic.cpp \
     
    981986        generic/RTProcIsRunningByName-generic.cpp \
    982987        generic/RTThreadGetNativeState-generic.cpp \
     988        generic/RTMpGetCoreCount-generic.cpp \
    983989        r3/haiku/rtProcInitExePath-haiku.cpp \
    984990        r3/haiku/time-haiku.cpp \
  • trunk/src/VBox/Runtime/r3/linux/mp-linux.cpp

    r44528 r46144  
    178178
    179179
     180RTDECL(RTCPUID) RTMpGetCoreCount(void)
     181{
     182    RTCPUID cMax = rtMpLinuxMaxCpus();
     183    uint32_t aCores[256];
     184    RT_ZERO(aCores);
     185    uint32_t cCores = 0;
     186    for (RTCPUID idCpu = 0; idCpu < cMax; idCpu++)
     187    {
     188        if (RTMpIsCpuPossible(idCpu))
     189        {
     190            uint32_t idCore =
     191                (uint32_t)RTLinuxSysFsReadIntFile(0, "devices/system/cpu/cpu%d/topology/core_id", (int)idCpu);
     192            unsigned i;
     193            for (i = 0; i < cCores; i++)
     194                if (aCores[i] == idCore)
     195                    break;
     196            if (   i >= cCores
     197                && cCores < RT_ELEMENTS(aCores))
     198            {
     199                aCores[cCores] = idCore;
     200                cCores++;
     201            }
     202        }
     203    }
     204    return cCores;
     205}
     206
     207
    180208RTDECL(PRTCPUSET) RTMpGetOnlineSet(PRTCPUSET pSet)
    181209{
  • trunk/src/VBox/Runtime/testcase/tstMp-1.cpp

    r44529 r46144  
    6060    }
    6161
     62    RTCPUID cCoreCpus = RTMpGetCoreCount();
     63    if (cCoreCpus > 0)
     64        RTPrintf("tstMp-1: RTMpGetCoreCount -> %d\n", (int)cCoreCpus);
     65    else
     66    {
     67        RTPrintf("tstMp-1: FAILURE: RTMpGetCoreCount -> %d\n", (int)cCoreCpus);
     68        g_cErrors++;
     69        cCoreCpus = 1;
     70    }
     71
    6272    RTCPUSET Set;
    6373    PRTCPUSET pSet = RTMpGetSet(&Set);
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