diff options
author | Ingo Molnar <mingo@kernel.org> | 2017-12-06 17:20:04 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-12-06 17:20:04 +0100 |
commit | c32909741fe93032705e6da29b564b8fec84f415 (patch) | |
tree | 5f82c3f5f1c573f304feeff7c8c5428200e696dd /tools/perf/arch | |
parent | e4f57147e4893344d9088bebf174c053353daec5 (diff) | |
parent | 0b72d69a542873ee098867deeb37d27ad4629c64 (diff) |
Merge tag 'perf-core-for-mingo-4.16-20171206' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
- Improve build messages for files needed by Intel-PT, originally copied
from the kernel sources, that drifted from its original (Adrian Hunter)
- Allow computing 'perf stat' style metrics in 'perf script' (Andi Kleen)
- Fix 'perf report -D' output for user metadata events (Arnaldo Carvalho de Melo)
- Add feature test for pthread_barrier_t availability (Arnaldo Carvalho de Melo)
- Allow again using x86's asm.h when building for the 'bpf' clang target,
making some 'perf test' LLVM/BPF entries work again (Arnaldo Carvalho de Melo)
- Use cpumaps in 'perf bench futex', eliminating some code duplication
(Davidlohr Bueso)
- Improve PMU infrastructure to support amp64's ThunderX2 implementation
defined core events (Ganapatrao Kulkarni)
- Add hint about how to add USDT probes for Node.js (Hansuk Hong)
- s/390 needs -fPIC to be incrementally linked or linked to shared
libraries (Hendrik Brueckner)
- Use pthread_barrier to synch 'perf bench futex wake-parallel' waker
threads (James Yang)
- Fix up build in hardened environments, such as Fedora 27 (Jiri Olsa)
- Add a tip about cacheline events in 'perf c2c' (Sangwon Hong)
- Set browser mode right before setup_browser(), because we may have
errors printed before that, which were getting lost (Seokho Song)
- s390x doesn't support PERF_TYPE_BREAKPOINT, so disable 'perf test'
cases 19 and 20 on s390x, that tests that feature (Thomas Richter)
- Fix unnecessary memory allocation for s390x 'perf annotate' objdump
parsing, which could lead to thousands of needless entries in the
instruction handling array (Thomas Richter)
- Fix objdump comment parsing for Intel mov dissassembly (Thomas Richter)
- Clarify usage of 'overwrite' and 'backward' in the evlist/mmap code,
removing the 'overwrite' parameter from several functions as it was
always used it as 'false' (Wang Nan)
- Fix 'perf record' backward recording, it wasn't doing what was
expected: overwriting records when the ring buffer gets full (Wang Nan)
- Use more flexible pattern matching for CPU identification for perf
vendor event's mapfile.csv, removing the need for a new perf binary
for a sligthly different chip revision that shares the same set of
counters (William Cohen)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/arch')
-rw-r--r-- | tools/perf/arch/arm64/util/Build | 1 | ||||
-rw-r--r-- | tools/perf/arch/arm64/util/header.c | 65 | ||||
-rw-r--r-- | tools/perf/arch/powerpc/util/header.c | 2 | ||||
-rw-r--r-- | tools/perf/arch/s390/annotate/instructions.c | 3 | ||||
-rw-r--r-- | tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 | ||||
-rw-r--r-- | tools/perf/arch/x86/util/header.c | 2 |
6 files changed, 71 insertions, 4 deletions
diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build index cef6fb38d17e..b1ab72d2a42e 100644 --- a/tools/perf/arch/arm64/util/Build +++ b/tools/perf/arch/arm64/util/Build @@ -1,3 +1,4 @@ +libperf-y += header.o libperf-$(CONFIG_DWARF) += dwarf-regs.o libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o diff --git a/tools/perf/arch/arm64/util/header.c b/tools/perf/arch/arm64/util/header.c new file mode 100644 index 000000000000..534cd2507d83 --- /dev/null +++ b/tools/perf/arch/arm64/util/header.c @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <stdlib.h> +#include <api/fs/fs.h> +#include "header.h" + +#define MIDR "/regs/identification/midr_el1" +#define MIDR_SIZE 19 +#define MIDR_REVISION_MASK 0xf +#define MIDR_VARIANT_SHIFT 20 +#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) + +char *get_cpuid_str(struct perf_pmu *pmu) +{ + char *buf = NULL; + char path[PATH_MAX]; + const char *sysfs = sysfs__mountpoint(); + int cpu; + u64 midr = 0; + struct cpu_map *cpus; + FILE *file; + + if (!sysfs || !pmu || !pmu->cpus) + return NULL; + + buf = malloc(MIDR_SIZE); + if (!buf) + return NULL; + + /* read midr from list of cpus mapped to this pmu */ + cpus = cpu_map__get(pmu->cpus); + for (cpu = 0; cpu < cpus->nr; cpu++) { + scnprintf(path, PATH_MAX, "%s/devices/system/cpu/cpu%d"MIDR, + sysfs, cpus->map[cpu]); + + file = fopen(path, "r"); + if (!file) { + pr_debug("fopen failed for file %s\n", path); + continue; + } + + if (!fgets(buf, MIDR_SIZE, file)) { + fclose(file); + continue; + } + fclose(file); + + /* Ignore/clear Variant[23:20] and + * Revision[3:0] of MIDR + */ + midr = strtoul(buf, NULL, 16); + midr &= (~(MIDR_VARIANT_MASK | MIDR_REVISION_MASK)); + scnprintf(buf, MIDR_SIZE, "0x%016lx", midr); + /* got midr break loop */ + break; + } + + if (!midr) { + pr_err("failed to get cpuid string for PMU %s\n", pmu->name); + free(buf); + buf = NULL; + } + + cpu_map__put(cpus); + return buf; +} diff --git a/tools/perf/arch/powerpc/util/header.c b/tools/perf/arch/powerpc/util/header.c index 7a4cf80c207a..0b242664f5ea 100644 --- a/tools/perf/arch/powerpc/util/header.c +++ b/tools/perf/arch/powerpc/util/header.c @@ -35,7 +35,7 @@ get_cpuid(char *buffer, size_t sz) } char * -get_cpuid_str(void) +get_cpuid_str(struct perf_pmu *pmu __maybe_unused) { char *bufp; diff --git a/tools/perf/arch/s390/annotate/instructions.c b/tools/perf/arch/s390/annotate/instructions.c index e0e466c650df..8c72b44444cb 100644 --- a/tools/perf/arch/s390/annotate/instructions.c +++ b/tools/perf/arch/s390/annotate/instructions.c @@ -18,7 +18,8 @@ static struct ins_ops *s390__associate_ins_ops(struct arch *arch, const char *na if (!strcmp(name, "br")) ops = &ret_ops; - arch__associate_ins_ops(arch, name, ops); + if (ops) + arch__associate_ins_ops(arch, name, ops); return ops; } diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c b/tools/perf/arch/x86/tests/perf-time-to-tsc.c index b59678e8c1e2..06abe8108b33 100644 --- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c +++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c @@ -84,7 +84,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe CHECK__(perf_evlist__open(evlist)); - CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); + CHECK__(perf_evlist__mmap(evlist, UINT_MAX)); pc = evlist->mmap[0].base; ret = perf_read_tsc_conversion(pc, &tc); diff --git a/tools/perf/arch/x86/util/header.c b/tools/perf/arch/x86/util/header.c index 33027c5e6f92..b626d2bad9f1 100644 --- a/tools/perf/arch/x86/util/header.c +++ b/tools/perf/arch/x86/util/header.c @@ -66,7 +66,7 @@ get_cpuid(char *buffer, size_t sz) } char * -get_cpuid_str(void) +get_cpuid_str(struct perf_pmu *pmu __maybe_unused) { char *buf = malloc(128); |