aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2016-07-12 10:01:17 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-07-12 14:20:37 -0400
commit9a3dc28bb015fc730f7ffc49b7b0abf830b56b61 (patch)
tree543f7bbda55299639c7f7480a3539e9ed028c4b7 /tools/perf
parentdd7bd1093622621a910cbb6a77c7addeb20c9984 (diff)
perf tools: Fallback to reading sysfs to get cacheline size
On systems where sysconf(_SC_LEVEL1_DCACHE_LINESIZE) is not available, such as musl LIBC and Android's bionic libc. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Chris Phlipot <cphlipot0@gmail.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-772obxzby758g7m2wmzcejxz@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/perf.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index f7d7dbbd2af6..4b2ff021434c 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -497,6 +497,16 @@ void pthread__unblock_sigwinch(void)
497 pthread_sigmask(SIG_UNBLOCK, &set, NULL); 497 pthread_sigmask(SIG_UNBLOCK, &set, NULL);
498} 498}
499 499
500#ifdef _SC_LEVEL1_DCACHE_LINESIZE
501#define cache_line_size(cacheline_sizep) *cacheline_sizep = sysconf(_SC_LEVEL1_DCACHE_LINESIZE)
502#else
503static void cache_line_size(int *cacheline_sizep)
504{
505 if (sysfs__read_int("devices/system/cpu/cpu0/cache/index0/coherency_line_size", cacheline_sizep))
506 perror("cannot determine cache line size");
507}
508#endif
509
500int main(int argc, const char **argv) 510int main(int argc, const char **argv)
501{ 511{
502 const char *cmd; 512 const char *cmd;
@@ -509,7 +519,7 @@ int main(int argc, const char **argv)
509 519
510 /* The page_size is placed in util object. */ 520 /* The page_size is placed in util object. */
511 page_size = sysconf(_SC_PAGE_SIZE); 521 page_size = sysconf(_SC_PAGE_SIZE);
512 cacheline_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); 522 cache_line_size(&cacheline_size);
513 523
514 if (sysctl__read_int("kernel/perf_event_max_stack", &value) == 0) 524 if (sysctl__read_int("kernel/perf_event_max_stack", &value) == 0)
515 sysctl_perf_event_max_stack = value; 525 sysctl_perf_event_max_stack = value;