diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-02-24 08:19:21 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-02-24 08:20:30 +0100 |
commit | c2b8d8c55c0235e21c563283f634bcfd2ba7bc1e (patch) | |
tree | f62b81b218d680db8aca72461c0d426938ad0576 /tools/perf/util/mem-events.c | |
parent | 91e48b7df15196b8ce01f40455219d3ed7889988 (diff) | |
parent | bea2400621836b028d82c3d6a74053921d70dbd7 (diff) | |
download | op-kernel-dev-c2b8d8c55c0235e21c563283f634bcfd2ba7bc1e.zip op-kernel-dev-c2b8d8c55c0235e21c563283f634bcfd2ba7bc1e.tar.gz |
Merge tag 'perf-core-for-mingo-2' 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:
New features:
- Add API to set values of map entries in a BPF object, be it
individual map slots or ranges (Wang Nan)
- Introduce support for the 'bpf-output' event (Wang Nan)
- Add glue to read perf events in a BPF program (Wang Nan)
User visible changes:
- Don't stop PMU parsing on alias parse error, allowing the
addition of new sysfs PMU files without breaking old tools (Andi Kleen)
- Implement '%' operation in libtraceevent (Daniel Bristot de Oliveira)
- Allow specifying events via -e in 'perf mem record', also listing what events
can be specified via 'perf mem record -e list' (Jiri Olsa)
- Improve support to 'data_src', 'weight' and 'addr' fields in
'perf script' (Jiri Olsa)
Infrastructure changes:
- Export cacheline routines (Jiri Olsa)
- Remove strbuf_{remove,splice}(), dead code (Arnaldo Carvalho de Melo)
Fixes:
- Sort key fixes: Alignment for srcline, file, trace; fix
segfault for dynamic, trace events related sort keys (Namyung Kim)
Build fixes:
- Remove duplicate typedef config_term_func_t definition,
fixing the build on older systems (Arnaldo Carvalho de Melo)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/util/mem-events.c')
-rw-r--r-- | tools/perf/util/mem-events.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c new file mode 100644 index 0000000..b1507c0 --- /dev/null +++ b/tools/perf/util/mem-events.c @@ -0,0 +1,51 @@ +#include <stddef.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include "mem-events.h" +#include "debug.h" + +#define E(t, n) { .tag = t, .name = n } + +struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = { + E("ldlat-loads", "cpu/mem-loads,ldlat=30/P"), + E("ldlat-stores", "cpu/mem-stores/P"), +}; + +#undef E + +int perf_mem_events__parse(const char *str) +{ + char *tok, *saveptr = NULL; + bool found = false; + char *buf; + int j; + + /* We need buffer that we know we can write to. */ + buf = malloc(strlen(str) + 1); + if (!buf) + return -ENOMEM; + + strcpy(buf, str); + + tok = strtok_r((char *)buf, ",", &saveptr); + + while (tok) { + for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) { + struct perf_mem_event *e = &perf_mem_events[j]; + + if (strstr(e->tag, tok)) + e->record = found = true; + } + + tok = strtok_r(NULL, ",", &saveptr); + } + + free(buf); + + if (found) + return 0; + + pr_err("failed: event '%s' not found, use '-e list' to get list of available events\n", str); + return -1; +} |