perf parse-events: Fix for term values that are raw events
[ Upstream commit b20576fd7fe39554b212095c3c0d7a3dff512515 ]
Raw events can be strings like 'r0xead' but the 0x is optional so they
can also be 'read'. On IcelakeX uncore_imc_free_running has an event
called 'read' which may be programmed as:
```
$ perf stat -e 'uncore_imc_free_running/event=read/' -a sleep 1
```
However, the PE_RAW type isn't allowed on the right of a term, even
though in this case we just want to interpret it as a string. This
leads to the following error on IcelakeX:
```
$ perf stat -e 'uncore_imc_free_running/event=read/' -a sleep 1
event syntax error: '..nning/event=read/'
\___ parser error
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available events
```
Fix this by allowing raw types on the right of terms and treat them as
strings, just as is already done for PE_LEGACY_CACHE. Make this
consistent by just entirely removing name_or_legacy and always using
name_or_raw that covers all three cases.
Fixes: 6fd1e51915
("perf parse-events: Support PMUs for legacy cache events")
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@arm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Link: https://lore.kernel.org/r/20230928004431.1926969-1-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
221d9cbc5d
commit
4fa4152950
|
@ -79,7 +79,7 @@ static void free_list_evsel(struct list_head* list_evsel)
|
|||
%type <str> PE_MODIFIER_BP
|
||||
%type <str> PE_EVENT_NAME
|
||||
%type <str> PE_DRV_CFG_TERM
|
||||
%type <str> name_or_raw name_or_legacy
|
||||
%type <str> name_or_raw
|
||||
%destructor { free ($$); } <str>
|
||||
%type <term> event_term
|
||||
%destructor { parse_events_term__delete ($$); } <term>
|
||||
|
@ -680,8 +680,6 @@ event_term
|
|||
|
||||
name_or_raw: PE_RAW | PE_NAME | PE_LEGACY_CACHE
|
||||
|
||||
name_or_legacy: PE_NAME | PE_LEGACY_CACHE
|
||||
|
||||
event_term:
|
||||
PE_RAW
|
||||
{
|
||||
|
@ -696,7 +694,7 @@ PE_RAW
|
|||
$$ = term;
|
||||
}
|
||||
|
|
||||
name_or_raw '=' name_or_legacy
|
||||
name_or_raw '=' name_or_raw
|
||||
{
|
||||
struct parse_events_term *term;
|
||||
int err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, $1, $3, &@1, &@3);
|
||||
|
@ -776,7 +774,7 @@ PE_TERM_HW
|
|||
$$ = term;
|
||||
}
|
||||
|
|
||||
PE_TERM '=' name_or_legacy
|
||||
PE_TERM '=' name_or_raw
|
||||
{
|
||||
struct parse_events_term *term;
|
||||
int err = parse_events_term__str(&term, (enum parse_events__term_type)$1,
|
||||
|
|
Loading…
Reference in New Issue