perf tests: Apply attributes to all events in object code reading test
authorJames Clark <james.clark@arm.com>
Wed, 10 Apr 2024 10:34:53 +0000 (11:34 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 12 Apr 2024 15:02:05 +0000 (12:02 -0300)
PERF_PMU_CAP_EXTENDED_HW_TYPE results in multiple events being opened on
heterogeneous systems. Currently this test only sets its required
attributes on the first event. Not disabling enable_on_exec on the other
events causes the test to fail because the forked objdump processes are
sampled. No tracking event is opened so Perf only knows about its own
mappings causing the objdump samples to give the following error:

  $ perf test -vvv "object code reading"

  Reading object code for memory address: 0xffff9aaa55ec
  thread__find_map failed
  ---- end(-1) ----
  24: Object code reading              : FAILED!

Fixes: 251aa040244a3b17 ("perf parse-events: Wildcard most "numeric" events")
Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: James Clark <james.clark@arm.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Spoorthy S <spoorts2@in.ibm.com>
Link: https://lore.kernel.org/r/20240410103458.813656-3-james.clark@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/code-reading.c

index 7a3a7bbbec7146b772cd6ab029b1d22c9d94a873..29d2f3ee4e10fbc255b7b27fce01131d42044582 100644 (file)
@@ -637,11 +637,11 @@ static int do_test_code_reading(bool try_kcore)
 
                evlist__config(evlist, &opts, NULL);
 
-               evsel = evlist__first(evlist);
-
-               evsel->core.attr.comm = 1;
-               evsel->core.attr.disabled = 1;
-               evsel->core.attr.enable_on_exec = 0;
+               evlist__for_each_entry(evlist, evsel) {
+                       evsel->core.attr.comm = 1;
+                       evsel->core.attr.disabled = 1;
+                       evsel->core.attr.enable_on_exec = 0;
+               }
 
                ret = evlist__open(evlist);
                if (ret < 0) {