aboutsummaryrefslogtreecommitdiff
path: root/tools/perf/util/bpf_off_cpu.c
diff options
context:
space:
mode:
authorGravatar Namhyung Kim <namhyung@kernel.org> 2022-06-24 16:13:09 -0700
committerGravatar Arnaldo Carvalho de Melo <acme@redhat.com> 2022-06-28 11:45:45 -0300
commit49c692b7dfc9b6c06a1dc11359a8780575b16d4a (patch)
treed4312d6d454aca7a01d1469a314d8c5cdda57fd7 /tools/perf/util/bpf_off_cpu.c
parentperf offcpu: Fix build failure on old kernels (diff)
downloadlinux-49c692b7dfc9b6c06a1dc11359a8780575b16d4a.tar.gz
linux-49c692b7dfc9b6c06a1dc11359a8780575b16d4a.tar.bz2
linux-49c692b7dfc9b6c06a1dc11359a8780575b16d4a.zip
perf offcpu: Accept allowed sample types only
As offcpu-time event is synthesized at the end, it could not get the all the sample info. Define OFFCPU_SAMPLE_TYPES for allowed ones and mask out others in evsel__config() to prevent parse errors. Because perf sample parsing assumes a specific ordering with the sample types, setting unsupported one would make it fail to read data like perf record -d/--data. Fixes: edc41a1099c2d08c ("perf record: Enable off-cpu analysis with BPF") Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Blake Jones <blakejones@google.com> Cc: Hao Luo <haoluo@google.com> Cc: Ian Rogers <irogers@google.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Milian Wolff <milian.wolff@kdab.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <songliubraving@fb.com> Cc: bpf@vger.kernel.org Link: http://lore.kernel.org/lkml/20220624231313.367909-3-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/bpf_off_cpu.c')
-rw-r--r--tools/perf/util/bpf_off_cpu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c
index b73e84a02264..f289b7713598 100644
--- a/tools/perf/util/bpf_off_cpu.c
+++ b/tools/perf/util/bpf_off_cpu.c
@@ -265,6 +265,12 @@ int off_cpu_write(struct perf_session *session)
sample_type = evsel->core.attr.sample_type;
+ if (sample_type & ~OFFCPU_SAMPLE_TYPES) {
+ pr_err("not supported sample type: %llx\n",
+ (unsigned long long)sample_type);
+ return -1;
+ }
+
if (sample_type & (PERF_SAMPLE_ID | PERF_SAMPLE_IDENTIFIER)) {
if (evsel->core.id)
sid = evsel->core.id[0];
@@ -319,7 +325,6 @@ int off_cpu_write(struct perf_session *session)
}
if (sample_type & PERF_SAMPLE_CGROUP)
data.array[n++] = key.cgroup_id;
- /* TODO: handle more sample types */
size = n * sizeof(u64);
data.hdr.size = size;