summaryrefslogtreecommitdiffstats
path: root/tools/perf/util/mem-events.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2016-02-24 08:19:21 +0100
committerIngo Molnar <mingo@kernel.org>2016-02-24 08:20:30 +0100
commitc2b8d8c55c0235e21c563283f634bcfd2ba7bc1e (patch)
treef62b81b218d680db8aca72461c0d426938ad0576 /tools/perf/util/mem-events.c
parent91e48b7df15196b8ce01f40455219d3ed7889988 (diff)
parentbea2400621836b028d82c3d6a74053921d70dbd7 (diff)
downloadop-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.c51
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;
+}
OpenPOWER on IntegriCloud