perf test: Avoid sysfs state affecting fake events
Icelake has a slots event, on my Skylakex I have CPU events in sysfs of topdown-slots-issued and topdown-total-slots. Legacy event parsing would try to use '-' to separate parts of an event and so perf_pmu__parse_init sets 'slots' to be a PMU_EVENT_SYMBOL_SUFFIX2. As such parsing the slots event for a fake PMU fails as a PMU_EVENT_SYMBOL_SUFFIX2 isn't made into the PE_PMU_EVENT_FAKE token. Resolve this issue by test initializing the PMU parsing state before every parse. This must be done every parse as the state is removes after each parse_events. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexandre Torgue <alexandre.torgue@foss.st.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Caleb Biggers <caleb.biggers@intel.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.garry@huawei.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Kshipra Bopardikar <kshipra.bopardikar@intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Perry Taylor <perry.taylor@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sedat Dilek <sedat.dilek@gmail.com> Cc: Stephane Eranian <eranian@google.com> Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com> Link: http://lore.kernel.org/lkml/20220725223633.2301737-2-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
bedd17381b
Коммит
a061a8ad3f
|
@ -812,6 +812,15 @@ static int check_parse_id(const char *id, struct parse_events_error *error,
|
|||
for (cur = strchr(dup, '@') ; cur; cur = strchr(++cur, '@'))
|
||||
*cur = '/';
|
||||
|
||||
if (fake_pmu) {
|
||||
/*
|
||||
* Every call to __parse_events will try to initialize the PMU
|
||||
* state from sysfs and then clean it up at the end. Reset the
|
||||
* PMU events to the test state so that we don't pick up
|
||||
* erroneous prefixes and suffixes.
|
||||
*/
|
||||
perf_pmu__test_parse_init();
|
||||
}
|
||||
ret = __parse_events(evlist, dup, error, fake_pmu);
|
||||
free(dup);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче