OpenJDK / jdk / hs
changeset 36089:0df0a643796e
8148987: [Linux] Allow building on older systems without CPU_ALLOC support
Reviewed-by: dsamersoff, stuefe, dcubed
author | dholmes |
---|---|
date | Wed, 10 Feb 2016 22:22:48 -0500 |
parents | d203645e9ccb |
children | cffc1dd98258 |
files | hotspot/src/os/linux/vm/os_linux.cpp |
diffstat | 1 files changed, 32 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/src/os/linux/vm/os_linux.cpp Thu Feb 11 01:06:24 2016 +0000 +++ b/hotspot/src/os/linux/vm/os_linux.cpp Wed Feb 10 22:22:48 2016 -0500 @@ -4771,6 +4771,25 @@ } } +// older glibc versions don't have this macro (which expands to +// an optimized bit-counting function) so we have to roll our own +#ifndef CPU_COUNT + +static int _cpu_count(const cpu_set_t* cpus) { + int count = 0; + // only look up to the number of configured processors + for (int i = 0; i < os::processor_count(); i++) { + if (CPU_ISSET(i, cpus)) { + count++; + } + } + return count; +} + +#define CPU_COUNT(cpus) _cpu_count(cpus) + +#endif // CPU_COUNT + // Get the current number of available processors for this process. // This value can change at any time during a process's lifetime. // sched_getaffinity gives an accurate answer as it accounts for cpusets. @@ -4786,6 +4805,9 @@ int configured_cpus = processor_count(); // upper bound on available cpus int cpu_count = 0; +// old build platforms may not support dynamic cpu sets +#ifdef CPU_ALLOC + // To enable easy testing of the dynamic path on different platforms we // introduce a diagnostic flag: UseCpuAllocPath if (configured_cpus >= CPU_SETSIZE || UseCpuAllocPath) { @@ -4814,10 +4836,18 @@ log_trace(os)("active_processor_count: using static path - configured processors: %d", configured_cpus); } +#else // CPU_ALLOC +// these stubs won't be executed +#define CPU_COUNT_S(size, cpus) -1 +#define CPU_FREE(cpus) + + log_trace(os)("active_processor_count: only static path available - configured processors: %d", + configured_cpus); +#endif // CPU_ALLOC // pid 0 means the current thread - which we have to assume represents the process if (sched_getaffinity(0, cpus_size, cpus_p) == 0) { - if (cpus_p != &cpus) { + if (cpus_p != &cpus) { // can only be true when CPU_ALLOC used cpu_count = CPU_COUNT_S(cpus_size, cpus_p); } else { @@ -4831,7 +4861,7 @@ "which may exceed available processors", strerror(errno), cpu_count); } - if (cpus_p != &cpus) { + if (cpus_p != &cpus) { // can only be true when CPU_ALLOC used CPU_FREE(cpus_p); }