VirtualBox

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


Ignore:
Timestamp:
Jun 18, 2013 5:33:09 PM (12 years ago)
Author:
vboxsync
Message:

Added RTMpGetOnlineCoreCount and RTMpGetPresentCoreCount.

Location:
trunk/src/VBox/Runtime
Files:
5 edited
1 copied

Legend:

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

    r46616 r46639  
    732732        generic/uuid-generic.cpp \
    733733        generic/RTMpGetCoreCount-generic.cpp \
     734        generic/RTMpGetOnlineCoreCount-generic.cpp \
    734735        generic/RTMpGetCurFrequency-generic.cpp \
    735736        generic/RTMpGetMaxFrequency-generic.cpp \
     
    793794        generic/mppresent-generic.cpp \
    794795        generic/RTMpGetCoreCount-generic.cpp \
     796        generic/RTMpGetOnlineCoreCount-generic.cpp \
    795797        generic/RTSemEventMultiWait-2-ex-generic.cpp \
    796798        generic/RTSemEventMultiWaitNoResume-2-ex-generic.cpp \
     
    867869        generic/RTMpCpuId-generic.cpp \
    868870        generic/RTMpGetCoreCount-generic.cpp \
     871        generic/RTMpGetOnlineCoreCount-generic.cpp \
    869872        generic/RTProcDaemonize-generic.cpp \
    870873        generic/RTProcIsRunningByName-generic.cpp \
     
    929932        generic/RTUuidCreate-generic.cpp \
    930933        generic/RTMpGetCoreCount-generic.cpp \
     934        generic/RTMpGetOnlineCoreCount-generic.cpp \
    931935        generic/sched-generic.cpp \
    932936        generic/utf16locale-generic.cpp \
     
    10071011        generic/RTThreadGetNativeState-generic.cpp \
    10081012        generic/RTMpGetCoreCount-generic.cpp \
     1013        generic/RTMpGetOnlineCoreCount-generic.cpp \
    10091014        r3/haiku/rtProcInitExePath-haiku.cpp \
    10101015        r3/haiku/time-haiku.cpp \
  • trunk/src/VBox/Runtime/generic/RTMpGetCoreCount-generic.cpp

    r46146 r46639  
    3030*******************************************************************************/
    3131#include <iprt/mp.h>
    32 #include <internal/iprt.h>
     32#include "internal/iprt.h"
    3333
    3434
     
    3838}
    3939RT_EXPORT_SYMBOL(RTMpGetCoreCount);
     40
  • trunk/src/VBox/Runtime/generic/RTMpGetOnlineCoreCount-generic.cpp

    r46626 r46639  
    3030*******************************************************************************/
    3131#include <iprt/mp.h>
    32 #include <internal/iprt.h>
     32#include "internal/iprt.h"
    3333
    3434
    35 RTDECL(RTCPUID) RTMpGetCoreCount(void)
     35RTDECL(RTCPUID) RTMpGetOnlineCoreCount(void)
    3636{
    37     return RTMpGetCount();
     37    return RTMpGetOnlineCount();
    3838}
    39 RT_EXPORT_SYMBOL(RTMpGetCoreCount);
     39RT_EXPORT_SYMBOL(RTMpGetOnlineCoreCount);
     40
  • trunk/src/VBox/Runtime/generic/mppresent-generic.cpp

    r44529 r46639  
    4747
    4848
     49RTDECL(RTCPUID) RTMpGetPresentCoreCount(void)
     50{
     51    return RTMpGetCoreCount();
     52}
     53RT_EXPORT_SYMBOL(RTMpGetPresentCoreCount);
     54
     55
    4956RTDECL(bool) RTMpIsCpuPresent(RTCPUID idCpu)
    5057{
  • trunk/src/VBox/Runtime/r3/linux/mp-linux.cpp

    r46326 r46639  
    3434
    3535#include <iprt/mp.h>
     36#include "internal/iprt.h"
     37
     38#include <iprt/alloca.h>
    3639#include <iprt/cpuset.h>
    3740#include <iprt/assert.h>
     
    180183RTDECL(RTCPUID) RTMpGetCoreCount(void)
    181184{
    182     RTCPUID cMax = rtMpLinuxMaxCpus();
    183     uint32_t aCores[256];
    184     RT_ZERO(aCores);
    185     uint32_t cCores = 0;
     185    RTCPUID     cMax      = rtMpLinuxMaxCpus();
     186    uint32_t   *paidCores = (uint32_t *)alloca(sizeof(*uint32_t) * (cMax + 1));
     187    uint32_t    cCores    = 0;
    186188    for (RTCPUID idCpu = 0; idCpu < cMax; idCpu++)
    187189    {
    188190        if (RTMpIsCpuPossible(idCpu))
    189191        {
    190             uint32_t idCore =
    191                 (uint32_t)RTLinuxSysFsReadIntFile(0, "devices/system/cpu/cpu%d/topology/core_id", (int)idCpu);
    192             unsigned i;
     192            uint32_t idCore = (uint32_t)RTLinuxSysFsReadIntFile(0, "devices/system/cpu/cpu%d/topology/core_id", (int)idCpu);
     193            uint32_t i;
    193194            for (i = 0; i < cCores; i++)
    194                 if (aCores[i] == idCore)
     195                if (paidCores[i] == idCore)
    195196                    break;
    196             if (   i >= cCores
    197                 && cCores < RT_ELEMENTS(aCores))
    198             {
    199                 aCores[cCores] = idCore;
    200                 cCores++;
    201             }
    202         }
    203     }
     197            if (i >= cCores)
     198                paidCores[cCores++] = idCore;
     199        }
     200    }
     201    Assert(cCores > 0);
    204202    return cCores;
    205203}
     
    223221    return RTCpuSetCount(&Set);
    224222}
     223
     224
     225RTDECL(RTCPUID) RTMpGetOnlineCoreCount(void)
     226{
     227    RTCPUID     cMax      = rtMpLinuxMaxCpus();
     228    uint32_t   *paidCores = (uint32_t *)alloca(sizeof(*uint32_t) * (cMax + 1));
     229    uint32_t    cCores    = 0;
     230    for (RTCPUID idCpu = 0; idCpu < cMax; idCpu++)
     231    {
     232        if (RTMpIsCpuOnline(idCpu))
     233        {
     234            uint32_t idCore = (uint32_t)RTLinuxSysFsReadIntFile(0, "devices/system/cpu/cpu%d/topology/core_id", (int)idCpu);
     235            uint32_t i;
     236            for (i = 0; i < cCores; i++)
     237                if (paidCores[i] == idCore)
     238                    break;
     239            if (i >= cCores)
     240                paidCores[cCores++] = idCore;
     241        }
     242    }
     243    Assert(cCores > 0);
     244    return cCores;
     245}
     246
    225247
    226248
  • trunk/src/VBox/Runtime/r3/win/mp-win.cpp

    r46637 r46639  
    166166}
    167167
     168
     169RTDECL(RTCPUID) RTMpGetOnlineCoreCount(void)
     170{
     171    /** @todo this isn't entirely correct. */
     172    return RTMpGetCoreCount();
     173}
     174
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