diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-10-30 02:32:34 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-10-30 02:32:34 -0400 |
| commit | d785452c9972fac2808479eb561d5c426b6e7d3b (patch) | |
| tree | c3aca74a97cab950e7e39f71bd940f362feed1c0 | |
| parent | 1776b10627e486dd431fe72d8d47e5a865cf65d1 (diff) | |
| parent | 4cdcc33db2f0455f297b4e14e434ba311ec5ca06 (diff) | |
Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
Pull perf/urgent fixes from Arnaldo Carvalho de Melo:
- Fix report -F (abort, in_tx, mispredict, etc) segfaults for sample.data files
without branch info (Jiri Olsa)
- Add patch that should have went in a previous patchkit to use global cache
provided by libunwind (Namhyung Kim)
- Make CPUINFO_PROC an array to support different kernels, problem
detected when the information reported via /proc/cpuinfo changed on ARM (Wang Nan)
- 'perf probe' --demangle typo fix and a new --quiet option (Masami Hiramatsu)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | tools/perf/builtin-probe.c | 2 | ||||
| -rw-r--r-- | tools/perf/perf-sys.h | 30 | ||||
| -rw-r--r-- | tools/perf/util/header.c | 27 | ||||
| -rw-r--r-- | tools/perf/util/sort.c | 102 | ||||
| -rw-r--r-- | tools/perf/util/thread.c | 3 | ||||
| -rw-r--r-- | tools/perf/util/unwind-libunwind.c | 12 | ||||
| -rw-r--r-- | tools/perf/util/unwind.h | 3 |
7 files changed, 131 insertions, 48 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 04412b4770a2..7af26acf06d9 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
| @@ -375,7 +375,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) | |||
| 375 | OPT_CALLBACK('x', "exec", NULL, "executable|path", | 375 | OPT_CALLBACK('x', "exec", NULL, "executable|path", |
| 376 | "target executable name or path", opt_set_target), | 376 | "target executable name or path", opt_set_target), |
| 377 | OPT_BOOLEAN(0, "demangle", &symbol_conf.demangle, | 377 | OPT_BOOLEAN(0, "demangle", &symbol_conf.demangle, |
| 378 | "Disable symbol demangling"), | 378 | "Enable symbol demangling"), |
| 379 | OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel, | 379 | OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel, |
| 380 | "Enable kernel symbol demangling"), | 380 | "Enable kernel symbol demangling"), |
| 381 | OPT_END() | 381 | OPT_END() |
diff --git a/tools/perf/perf-sys.h b/tools/perf/perf-sys.h index 937e4324ad94..a3b13d7dc1d4 100644 --- a/tools/perf/perf-sys.h +++ b/tools/perf/perf-sys.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #define wmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") | 13 | #define wmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") |
| 14 | #define rmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") | 14 | #define rmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") |
| 15 | #define cpu_relax() asm volatile("rep; nop" ::: "memory"); | 15 | #define cpu_relax() asm volatile("rep; nop" ::: "memory"); |
| 16 | #define CPUINFO_PROC "model name" | 16 | #define CPUINFO_PROC {"model name"} |
| 17 | #ifndef __NR_perf_event_open | 17 | #ifndef __NR_perf_event_open |
| 18 | # define __NR_perf_event_open 336 | 18 | # define __NR_perf_event_open 336 |
| 19 | #endif | 19 | #endif |
| @@ -30,7 +30,7 @@ | |||
| 30 | #define wmb() asm volatile("sfence" ::: "memory") | 30 | #define wmb() asm volatile("sfence" ::: "memory") |
| 31 | #define rmb() asm volatile("lfence" ::: "memory") | 31 | #define rmb() asm volatile("lfence" ::: "memory") |
| 32 | #define cpu_relax() asm volatile("rep; nop" ::: "memory"); | 32 | #define cpu_relax() asm volatile("rep; nop" ::: "memory"); |
| 33 | #define CPUINFO_PROC "model name" | 33 | #define CPUINFO_PROC {"model name"} |
| 34 | #ifndef __NR_perf_event_open | 34 | #ifndef __NR_perf_event_open |
| 35 | # define __NR_perf_event_open 298 | 35 | # define __NR_perf_event_open 298 |
| 36 | #endif | 36 | #endif |
| @@ -47,14 +47,14 @@ | |||
| 47 | #define mb() asm volatile ("sync" ::: "memory") | 47 | #define mb() asm volatile ("sync" ::: "memory") |
| 48 | #define wmb() asm volatile ("sync" ::: "memory") | 48 | #define wmb() asm volatile ("sync" ::: "memory") |
| 49 | #define rmb() asm volatile ("sync" ::: "memory") | 49 | #define rmb() asm volatile ("sync" ::: "memory") |
| 50 | #define CPUINFO_PROC "cpu" | 50 | #define CPUINFO_PROC {"cpu"} |
| 51 | #endif | 51 | #endif |
| 52 | 52 | ||
| 53 | #ifdef __s390__ | 53 | #ifdef __s390__ |
| 54 | #define mb() asm volatile("bcr 15,0" ::: "memory") | 54 | #define mb() asm volatile("bcr 15,0" ::: "memory") |
| 55 | #define wmb() asm volatile("bcr 15,0" ::: "memory") | 55 | #define wmb() asm volatile("bcr 15,0" ::: "memory") |
| 56 | #define rmb() asm volatile("bcr 15,0" ::: "memory") | 56 | #define rmb() asm volatile("bcr 15,0" ::: "memory") |
| 57 | #define CPUINFO_PROC "vendor_id" | 57 | #define CPUINFO_PROC {"vendor_id"} |
| 58 | #endif | 58 | #endif |
| 59 | 59 | ||
| 60 | #ifdef __sh__ | 60 | #ifdef __sh__ |
| @@ -67,14 +67,14 @@ | |||
| 67 | # define wmb() asm volatile("" ::: "memory") | 67 | # define wmb() asm volatile("" ::: "memory") |
| 68 | # define rmb() asm volatile("" ::: "memory") | 68 | # define rmb() asm volatile("" ::: "memory") |
| 69 | #endif | 69 | #endif |
| 70 | #define CPUINFO_PROC "cpu type" | 70 | #define CPUINFO_PROC {"cpu type"} |
| 71 | #endif | 71 | #endif |
| 72 | 72 | ||
| 73 | #ifdef __hppa__ | 73 | #ifdef __hppa__ |
| 74 | #define mb() asm volatile("" ::: "memory") | 74 | #define mb() asm volatile("" ::: "memory") |
| 75 | #define wmb() asm volatile("" ::: "memory") | 75 | #define wmb() asm volatile("" ::: "memory") |
| 76 | #define rmb() asm volatile("" ::: "memory") | 76 | #define rmb() asm volatile("" ::: "memory") |
| 77 | #define CPUINFO_PROC "cpu" | 77 | #define CPUINFO_PROC {"cpu"} |
| 78 | #endif | 78 | #endif |
| 79 | 79 | ||
| 80 | #ifdef __sparc__ | 80 | #ifdef __sparc__ |
| @@ -87,14 +87,14 @@ | |||
| 87 | #endif | 87 | #endif |
| 88 | #define wmb() asm volatile("":::"memory") | 88 | #define wmb() asm volatile("":::"memory") |
| 89 | #define rmb() asm volatile("":::"memory") | 89 | #define rmb() asm volatile("":::"memory") |
| 90 | #define CPUINFO_PROC "cpu" | 90 | #define CPUINFO_PROC {"cpu"} |
| 91 | #endif | 91 | #endif |
| 92 | 92 | ||
| 93 | #ifdef __alpha__ | 93 | #ifdef __alpha__ |
| 94 | #define mb() asm volatile("mb" ::: "memory") | 94 | #define mb() asm volatile("mb" ::: "memory") |
| 95 | #define wmb() asm volatile("wmb" ::: "memory") | 95 | #define wmb() asm volatile("wmb" ::: "memory") |
| 96 | #define rmb() asm volatile("mb" ::: "memory") | 96 | #define rmb() asm volatile("mb" ::: "memory") |
| 97 | #define CPUINFO_PROC "cpu model" | 97 | #define CPUINFO_PROC {"cpu model"} |
| 98 | #endif | 98 | #endif |
| 99 | 99 | ||
| 100 | #ifdef __ia64__ | 100 | #ifdef __ia64__ |
| @@ -102,7 +102,7 @@ | |||
| 102 | #define wmb() asm volatile ("mf" ::: "memory") | 102 | #define wmb() asm volatile ("mf" ::: "memory") |
| 103 | #define rmb() asm volatile ("mf" ::: "memory") | 103 | #define rmb() asm volatile ("mf" ::: "memory") |
| 104 | #define cpu_relax() asm volatile ("hint @pause" ::: "memory") | 104 | #define cpu_relax() asm volatile ("hint @pause" ::: "memory") |
| 105 | #define CPUINFO_PROC "model name" | 105 | #define CPUINFO_PROC {"model name"} |
| 106 | #endif | 106 | #endif |
| 107 | 107 | ||
| 108 | #ifdef __arm__ | 108 | #ifdef __arm__ |
| @@ -113,7 +113,7 @@ | |||
| 113 | #define mb() ((void(*)(void))0xffff0fa0)() | 113 | #define mb() ((void(*)(void))0xffff0fa0)() |
| 114 | #define wmb() ((void(*)(void))0xffff0fa0)() | 114 | #define wmb() ((void(*)(void))0xffff0fa0)() |
| 115 | #define rmb() ((void(*)(void))0xffff0fa0)() | 115 | #define rmb() ((void(*)(void))0xffff0fa0)() |
| 116 | #define CPUINFO_PROC "Processor" | 116 | #define CPUINFO_PROC {"model name", "Processor"} |
| 117 | #endif | 117 | #endif |
| 118 | 118 | ||
| 119 | #ifdef __aarch64__ | 119 | #ifdef __aarch64__ |
| @@ -133,28 +133,28 @@ | |||
| 133 | : "memory") | 133 | : "memory") |
| 134 | #define wmb() mb() | 134 | #define wmb() mb() |
| 135 | #define rmb() mb() | 135 | #define rmb() mb() |
| 136 | #define CPUINFO_PROC "cpu model" | 136 | #define CPUINFO_PROC {"cpu model"} |
| 137 | #endif | 137 | #endif |
| 138 | 138 | ||
| 139 | #ifdef __arc__ | 139 | #ifdef __arc__ |
| 140 | #define mb() asm volatile("" ::: "memory") | 140 | #define mb() asm volatile("" ::: "memory") |
| 141 | #define wmb() asm volatile("" ::: "memory") | 141 | #define wmb() asm volatile("" ::: "memory") |
| 142 | #define rmb() asm volatile("" ::: "memory") | 142 | #define rmb() asm volatile("" ::: "memory") |
| 143 | #define CPUINFO_PROC "Processor" | 143 | #define CPUINFO_PROC {"Processor"} |
| 144 | #endif | 144 | #endif |
| 145 | 145 | ||
| 146 | #ifdef __metag__ | 146 | #ifdef __metag__ |
| 147 | #define mb() asm volatile("" ::: "memory") | 147 | #define mb() asm volatile("" ::: "memory") |
| 148 | #define wmb() asm volatile("" ::: "memory") | 148 | #define wmb() asm volatile("" ::: "memory") |
| 149 | #define rmb() asm volatile("" ::: "memory") | 149 | #define rmb() asm volatile("" ::: "memory") |
| 150 | #define CPUINFO_PROC "CPU" | 150 | #define CPUINFO_PROC {"CPU"} |
| 151 | #endif | 151 | #endif |
| 152 | 152 | ||
| 153 | #ifdef __xtensa__ | 153 | #ifdef __xtensa__ |
| 154 | #define mb() asm volatile("memw" ::: "memory") | 154 | #define mb() asm volatile("memw" ::: "memory") |
| 155 | #define wmb() asm volatile("memw" ::: "memory") | 155 | #define wmb() asm volatile("memw" ::: "memory") |
| 156 | #define rmb() asm volatile("" ::: "memory") | 156 | #define rmb() asm volatile("" ::: "memory") |
| 157 | #define CPUINFO_PROC "core ID" | 157 | #define CPUINFO_PROC {"core ID"} |
| 158 | #endif | 158 | #endif |
| 159 | 159 | ||
| 160 | #ifdef __tile__ | 160 | #ifdef __tile__ |
| @@ -162,7 +162,7 @@ | |||
| 162 | #define wmb() asm volatile ("mf" ::: "memory") | 162 | #define wmb() asm volatile ("mf" ::: "memory") |
| 163 | #define rmb() asm volatile ("mf" ::: "memory") | 163 | #define rmb() asm volatile ("mf" ::: "memory") |
| 164 | #define cpu_relax() asm volatile ("mfspr zero, PASS" ::: "memory") | 164 | #define cpu_relax() asm volatile ("mfspr zero, PASS" ::: "memory") |
| 165 | #define CPUINFO_PROC "model name" | 165 | #define CPUINFO_PROC {"model name"} |
| 166 | #endif | 166 | #endif |
| 167 | 167 | ||
| 168 | #define barrier() asm volatile ("" ::: "memory") | 168 | #define barrier() asm volatile ("" ::: "memory") |
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index ce0de00399da..26f5b2fe5dc8 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
| @@ -579,16 +579,12 @@ static int write_version(int fd, struct perf_header *h __maybe_unused, | |||
| 579 | return do_write_string(fd, perf_version_string); | 579 | return do_write_string(fd, perf_version_string); |
| 580 | } | 580 | } |
| 581 | 581 | ||
| 582 | static int write_cpudesc(int fd, struct perf_header *h __maybe_unused, | 582 | static int __write_cpudesc(int fd, const char *cpuinfo_proc) |
| 583 | struct perf_evlist *evlist __maybe_unused) | ||
| 584 | { | 583 | { |
| 585 | #ifndef CPUINFO_PROC | ||
| 586 | #define CPUINFO_PROC NULL | ||
| 587 | #endif | ||
| 588 | FILE *file; | 584 | FILE *file; |
| 589 | char *buf = NULL; | ||
