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: 6fd1e5191591 ("perf parse-events: Support PMUs for legacy cache events")
Signed-off-by: Ian Rogers <[email protected]>
---
tools/perf/util/parse-events.y | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 4d9f3922a33d..de098caf0c1c 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -78,7 +78,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>
@@ -669,8 +669,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
{
@@ -685,7 +683,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);
@@ -765,7 +763,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, $1, /*config=*/NULL, $3, &@1, &@3);
--
2.42.0.515.g380fc7ccd1-goog
On Wed, Sep 27, 2023 at 5:44 PM Ian Rogers <[email protected]> wrote:
>
> 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: 6fd1e5191591 ("perf parse-events: Support PMUs for legacy cache events")
> Signed-off-by: Ian Rogers <[email protected]>
Ping. As this is affecting IcelakeX, Kan?
Thanks,
Ian
> ---
> tools/perf/util/parse-events.y | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index 4d9f3922a33d..de098caf0c1c 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -78,7 +78,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>
> @@ -669,8 +669,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
> {
> @@ -685,7 +683,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);
> @@ -765,7 +763,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, $1, /*config=*/NULL, $3, &@1, &@3);
> --
> 2.42.0.515.g380fc7ccd1-goog
>
On Thu, Oct 5, 2023 at 3:13 PM Ian Rogers <[email protected]> wrote:
>
> On Wed, Sep 27, 2023 at 5:44 PM Ian Rogers <[email protected]> wrote:
> >
> > 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: 6fd1e5191591 ("perf parse-events: Support PMUs for legacy cache events")
> > Signed-off-by: Ian Rogers <[email protected]>
Applied to perf-tools-next, thanks!