X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fprofiler%2Fproflog.c;h=ed46b6d4cc9b1b5fe9dba94b1980c8cc8f02e09b;hb=ef0ddf45c3081e799edcb4e95770186514b80cf1;hp=3160bbe228f6dbed32ea8e9d4fd86b0daf1f5b50;hpb=7c7729117b7b280fdba085a56ef400e2e9e35420;p=mono.git diff --git a/mono/profiler/proflog.c b/mono/profiler/proflog.c index 3160bbe228f..ed46b6d4cc9 100644 --- a/mono/profiler/proflog.c +++ b/mono/profiler/proflog.c @@ -7,6 +7,7 @@ * * Copyright 2010 Novell, Inc (http://www.novell.com) * Copyright 2011 Xamarin Inc (http://www.xamarin.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include @@ -2496,12 +2497,12 @@ dump_sample_hits (MonoProfiler *prof, StatBuffer *sbuf) static int mono_cpu_count (void) { - int count = 0; #ifdef PLATFORM_ANDROID /* Android tries really hard to save power by powering off CPUs on SMP phones which * means the normal way to query cpu count returns a wrong value with userspace API. * Instead we use /sys entries to query the actual hardware CPU count. */ + int count = 0; char buffer[8] = {'\0'}; int present = open ("/sys/devices/system/cpu/present", O_RDONLY); /* Format of the /sys entry is a cpulist of indexes which in the case @@ -2516,6 +2517,22 @@ mono_cpu_count (void) if (count > 0) return count + 1; #endif + +#if defined(HOST_ARM) || defined (HOST_ARM64) + + /* ARM platforms tries really hard to save power by powering off CPUs on SMP phones which + * means the normal way to query cpu count returns a wrong value with userspace API. */ + +#ifdef _SC_NPROCESSORS_CONF + { + int count = sysconf (_SC_NPROCESSORS_CONF); + if (count > 0) + return count; + } +#endif + +#else + #ifdef HAVE_SCHED_GETAFFINITY { cpu_set_t set; @@ -2524,12 +2541,18 @@ mono_cpu_count (void) } #endif #ifdef _SC_NPROCESSORS_ONLN - count = sysconf (_SC_NPROCESSORS_ONLN); - if (count > 0) - return count; + { + int count = sysconf (_SC_NPROCESSORS_ONLN); + if (count > 0) + return count; + } #endif + +#endif /* defined(HOST_ARM) || defined (HOST_ARM64) */ + #ifdef USE_SYSCTL { + int count; int mib [2]; size_t len = sizeof (int); mib [0] = CTL_HW;