* [PATCH v4 0/3] perf tool: 'config3' attribute support @ 2022-10-04 19:12 Rob Herring 2022-10-04 19:12 ` [PATCH v4 1/3] perf: Skip and warn on unknown format 'configN' attrs Rob Herring ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Rob Herring @ 2022-10-04 19:12 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa Cc: linux-kernel, linux-perf-users, Leo Yan, James Clark, Namhyung Kim This series is a fix to allow unknown 'configN' attrs and then extends perf tool to support a new config3 attr. The config3 support is RFC for context as the kernel side support[1] is not yet accepted. Patch 1 is intended for 6.1. [1] https://lore.kernel.org/all/20220825-arm-spe-v8-7-v1-0-c75b8d92e692@kernel.org/ Signed-off-by: Rob Herring <robh@kernel.org> --- Changes in v4: - Fix event parsing test segfault - Add 'config3' in event parsing tests - Link to v3: https://lore.kernel.org/r/20220914-arm-perf-tool-spe1-2-v2-v3-0-8189fc04dcc6@kernel.org --- Rob Herring (3): perf: Skip and warn on unknown format 'configN' attrs perf tools: Sync perf_event_attr::config3 addition perf: Add support for perf_event_attr::config3 include/uapi/linux/perf_event.h | 3 +++ tools/include/uapi/linux/perf_event.h | 3 +++ tools/perf/tests/parse-events.c | 13 ++++++++++++- tools/perf/util/parse-events.c | 9 +++++++++ tools/perf/util/parse-events.h | 1 + tools/perf/util/parse-events.l | 1 + tools/perf/util/pmu.c | 20 ++++++++++++++++++++ tools/perf/util/pmu.h | 3 +++ tools/perf/util/pmu.l | 2 -- tools/perf/util/pmu.y | 15 ++++----------- 10 files changed, 56 insertions(+), 14 deletions(-) --- base-commit: 1c23f9e627a7b412978b4e852793c5e3c3efc555 change-id: 20220914-arm-perf-tool-spe1-2-v2-cab789c5d598 Best regards, -- Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 1/3] perf: Skip and warn on unknown format 'configN' attrs 2022-10-04 19:12 [PATCH v4 0/3] perf tool: 'config3' attribute support Rob Herring @ 2022-10-04 19:12 ` Rob Herring 2022-10-04 19:12 ` [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition Rob Herring ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Rob Herring @ 2022-10-04 19:12 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa Cc: linux-kernel, linux-perf-users, Leo Yan, James Clark, Namhyung Kim If the kernel exposes a new perf_event_attr field in a format attr, perf will return an error stating the specified PMU can't be found. For example, a format attr with 'config3:0-63' causes an error as config3 is unknown to perf. This causes a compatibility issue between a newer kernel with older perf tool. Before this change with a kernel adding 'config3' I get: $ perf record -e arm_spe// -- true event syntax error: 'arm_spe//' \___ Cannot find PMU `arm_spe'. Missing kernel support? Run 'perf list' for a list of valid events Usage: perf record [<options>] [<command>] or: perf record [<options>] -- <command> [<options>] -e, --event <event> event selector. use 'perf list' to list available events After this change, I get: $ perf record -e arm_spe// -- true WARNING: 'arm_spe_0' format 'inv_event_filter' requires 'perf_event_attr::config3' which is not supported by this version of perf! [ perf record: Woken up 2 times to write data ] [ perf record: Captured and wrote 0.091 MB perf.data ] To support unknown configN formats, rework the YACC implementation to pass any config[0-9]+ format to perf_pmu__new_format() to handle with a warning. Cc: stable@vger.kernel.org Tested-by: Leo Yan <leo.yan@linaro.org> Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Rob Herring <robh@kernel.org> --- v4: - Skip format list check for fake pmu v3: - https://lore.kernel.org/r/20220914-arm-perf-tool-spe1-2-v2-v3-0-8189fc04dcc6@kernel.org - Move warning from format scanning to when PMU is selected - Add and use PERF_PMU_FORMAT_VALUE_CONFIG_END v2: - https://lore.kernel.org/all/20220909204509.2169512-1-robh@kernel.org/ - Rework YACC code to handle configN formats in C code - Add a warning when an unknown configN attr is found v1: - https://lore.kernel.org/all/20220901184709.2179309-1-robh@kernel.org/ --- tools/perf/util/parse-events.c | 3 +++ tools/perf/util/pmu.c | 17 +++++++++++++++++ tools/perf/util/pmu.h | 2 ++ tools/perf/util/pmu.l | 2 -- tools/perf/util/pmu.y | 15 ++++----------- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index f05e15acd33f..e2305fca0f95 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -215,6 +215,9 @@ __add_event(struct list_head *list, int *idx, struct perf_cpu_map *cpus = pmu ? perf_cpu_map__get(pmu->cpus) : cpu_list ? perf_cpu_map__new(cpu_list) : NULL; + if (pmu) + perf_pmu__warn_invalid_formats(pmu); + if (pmu && attr->type == PERF_TYPE_RAW) perf_pmu__warn_invalid_config(pmu, attr->config, name); diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 89655d53117a..82455b073c2f 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1005,6 +1005,23 @@ static struct perf_pmu *pmu_lookup(const char *lookup_name) return NULL; } +void perf_pmu__warn_invalid_formats(struct perf_pmu *pmu) +{ + struct perf_pmu_format *format; + + /* fake pmu doesn't have format list */ + if (pmu == &perf_pmu__fake) + return; + + list_for_each_entry(format, &pmu->format, list) + if (format->value >= PERF_PMU_FORMAT_VALUE_CONFIG_END) { + pr_warning("WARNING: '%s' format '%s' requires 'perf_event_attr::config%d'" + "which is not supported by this version of perf!\n", + pmu->name, format->name, format->value); + return; + } +} + static struct perf_pmu *pmu_find(const char *name) { struct perf_pmu *pmu; diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index a7b0f9507510..68e15c38ae71 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -17,6 +17,7 @@ enum { PERF_PMU_FORMAT_VALUE_CONFIG, PERF_PMU_FORMAT_VALUE_CONFIG1, PERF_PMU_FORMAT_VALUE_CONFIG2, + PERF_PMU_FORMAT_VALUE_CONFIG_END, }; #define PERF_PMU_FORMAT_BITS 64 @@ -139,6 +140,7 @@ int perf_pmu__caps_parse(struct perf_pmu *pmu); void perf_pmu__warn_invalid_config(struct perf_pmu *pmu, __u64 config, const char *name); +void perf_pmu__warn_invalid_formats(struct perf_pmu *pmu); bool perf_pmu__has_hybrid(void); int perf_pmu__match(char *pattern, char *name, char *tok); diff --git a/tools/perf/util/pmu.l b/tools/perf/util/pmu.l index a15d9fbd7c0e..58b4926cfaca 100644 --- a/tools/perf/util/pmu.l +++ b/tools/perf/util/pmu.l @@ -27,8 +27,6 @@ num_dec [0-9]+ {num_dec} { return value(10); } config { return PP_CONFIG; } -config1 { return PP_CONFIG1; } -config2 { return PP_CONFIG2; } - { return '-'; } : { return ':'; } , { return ','; } diff --git a/tools/perf/util/pmu.y b/tools/perf/util/pmu.y index bfd7e8509869..283efe059819 100644 --- a/tools/perf/util/pmu.y +++ b/tools/perf/util/pmu.y @@ -20,7 +20,7 @@ do { \ %} -%token PP_CONFIG PP_CONFIG1 PP_CONFIG2 +%token PP_CONFIG %token PP_VALUE PP_ERROR %type <num> PP_VALUE %type <bits> bit_term @@ -47,18 +47,11 @@ PP_CONFIG ':' bits $3)); } | -PP_CONFIG1 ':' bits +PP_CONFIG PP_VALUE ':' bits { ABORT_ON(perf_pmu__new_format(format, name, - PERF_PMU_FORMAT_VALUE_CONFIG1, - $3)); -} -| -PP_CONFIG2 ':' bits -{ - ABORT_ON(perf_pmu__new_format(format, name, - PERF_PMU_FORMAT_VALUE_CONFIG2, - $3)); + $2, + $4)); } bits: -- b4 0.11.0-dev ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition 2022-10-04 19:12 [PATCH v4 0/3] perf tool: 'config3' attribute support Rob Herring 2022-10-04 19:12 ` [PATCH v4 1/3] perf: Skip and warn on unknown format 'configN' attrs Rob Herring @ 2022-10-04 19:12 ` Rob Herring 2022-10-14 21:51 ` Arnaldo Carvalho de Melo 2022-10-04 19:12 ` [PATCH v4 3/3] perf: Add support for perf_event_attr::config3 Rob Herring 2022-10-14 15:25 ` [PATCH v4 0/3] perf tool: 'config3' attribute support Arnaldo Carvalho de Melo 3 siblings, 1 reply; 7+ messages in thread From: Rob Herring @ 2022-10-04 19:12 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa Cc: linux-kernel, linux-perf-users, Leo Yan, James Clark, Namhyung Kim Arm SPEv1.2 adds another 64-bits of event filtering control. As the existing perf_event_attr::configN fields are all used up for SPE PMU, an additional field is needed. Add a new 'config3' field. Signed-off-by: Rob Herring <robh@kernel.org> --- This patch is dependent on the kernel side landing first. --- include/uapi/linux/perf_event.h | 3 +++ tools/include/uapi/linux/perf_event.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index 03b370062741..b53f9b958235 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h @@ -333,6 +333,7 @@ enum perf_event_read_format { #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ #define PERF_ATTR_SIZE_VER6 120 /* add: aux_sample_size */ #define PERF_ATTR_SIZE_VER7 128 /* add: sig_data */ +#define PERF_ATTR_SIZE_VER8 136 /* add: config3 */ /* * Hardware event_id to monitor via a performance monitoring event: @@ -474,6 +475,8 @@ struct perf_event_attr { * truncated accordingly on 32 bit architectures. */ __u64 sig_data; + + __u64 config3; /* extension of config2 */ }; /* diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h index 581ed4bdc062..7fad17853310 100644 --- a/tools/include/uapi/linux/perf_event.h +++ b/tools/include/uapi/linux/perf_event.h @@ -333,6 +333,7 @@ enum perf_event_read_format { #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ #define PERF_ATTR_SIZE_VER6 120 /* add: aux_sample_size */ #define PERF_ATTR_SIZE_VER7 128 /* add: sig_data */ +#define PERF_ATTR_SIZE_VER8 136 /* add: config3 */ /* * Hardware event_id to monitor via a performance monitoring event: @@ -474,6 +475,8 @@ struct perf_event_attr { * truncated accordingly on 32 bit architectures. */ __u64 sig_data; + + __u64 config3; /* extension of config2 */ }; /* -- b4 0.11.0-dev ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition 2022-10-04 19:12 ` [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition Rob Herring @ 2022-10-14 21:51 ` Arnaldo Carvalho de Melo 2022-10-14 22:05 ` Rob Herring 0 siblings, 1 reply; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-10-14 21:51 UTC (permalink / raw) To: Rob Herring Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Alexander Shishkin, Jiri Olsa, linux-kernel, linux-perf-users, Leo Yan, James Clark Em Tue, Oct 04, 2022 at 02:12:36PM -0500, Rob Herring escreveu: > Arm SPEv1.2 adds another 64-bits of event filtering control. As the > existing perf_event_attr::configN fields are all used up for SPE PMU, an > additional field is needed. Add a new 'config3' field. > > Signed-off-by: Rob Herring <robh@kernel.org> > --- > This patch is dependent on the kernel side landing first. > --- > include/uapi/linux/perf_event.h | 3 +++ > tools/include/uapi/linux/perf_event.h | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h > index 03b370062741..b53f9b958235 100644 > --- a/include/uapi/linux/perf_event.h > +++ b/include/uapi/linux/perf_event.h > @@ -333,6 +333,7 @@ enum perf_event_read_format { > #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ > #define PERF_ATTR_SIZE_VER6 120 /* add: aux_sample_size */ > #define PERF_ATTR_SIZE_VER7 128 /* add: sig_data */ > +#define PERF_ATTR_SIZE_VER8 136 /* add: config3 */ > > /* > * Hardware event_id to monitor via a performance monitoring event: > @@ -474,6 +475,8 @@ struct perf_event_attr { > * truncated accordingly on 32 bit architectures. > */ > __u64 sig_data; > + > + __u64 config3; /* extension of config2 */ > }; > > /* I'm removing the above part, as this is for the kernel, not for tooling. Was this part submitted upstream? I couldn't find, so far, where it was submitted, can you please clarify? - Arnaldo > diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h > index 581ed4bdc062..7fad17853310 100644 > --- a/tools/include/uapi/linux/perf_event.h > +++ b/tools/include/uapi/linux/perf_event.h > @@ -333,6 +333,7 @@ enum perf_event_read_format { > #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ > #define PERF_ATTR_SIZE_VER6 120 /* add: aux_sample_size */ > #define PERF_ATTR_SIZE_VER7 128 /* add: sig_data */ > +#define PERF_ATTR_SIZE_VER8 136 /* add: config3 */ > > /* > * Hardware event_id to monitor via a performance monitoring event: > @@ -474,6 +475,8 @@ struct perf_event_attr { > * truncated accordingly on 32 bit architectures. > */ > __u64 sig_data; > + > + __u64 config3; /* extension of config2 */ > }; > > /* > > -- > b4 0.11.0-dev -- - Arnaldo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition 2022-10-14 21:51 ` Arnaldo Carvalho de Melo @ 2022-10-14 22:05 ` Rob Herring 0 siblings, 0 replies; 7+ messages in thread From: Rob Herring @ 2022-10-14 22:05 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Alexander Shishkin, Jiri Olsa, linux-kernel, linux-perf-users, Leo Yan, James Clark On Fri, Oct 14, 2022 at 4:51 PM Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Tue, Oct 04, 2022 at 02:12:36PM -0500, Rob Herring escreveu: > > Arm SPEv1.2 adds another 64-bits of event filtering control. As the > > existing perf_event_attr::configN fields are all used up for SPE PMU, an > > additional field is needed. Add a new 'config3' field. > > > > Signed-off-by: Rob Herring <robh@kernel.org> > > --- > > This patch is dependent on the kernel side landing first. > > --- > > include/uapi/linux/perf_event.h | 3 +++ > > tools/include/uapi/linux/perf_event.h | 3 +++ > > 2 files changed, 6 insertions(+) > > > > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h > > index 03b370062741..b53f9b958235 100644 > > --- a/include/uapi/linux/perf_event.h > > +++ b/include/uapi/linux/perf_event.h > > @@ -333,6 +333,7 @@ enum perf_event_read_format { > > #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ > > #define PERF_ATTR_SIZE_VER6 120 /* add: aux_sample_size */ > > #define PERF_ATTR_SIZE_VER7 128 /* add: sig_data */ > > +#define PERF_ATTR_SIZE_VER8 136 /* add: config3 */ > > > > /* > > * Hardware event_id to monitor via a performance monitoring event: > > @@ -474,6 +475,8 @@ struct perf_event_attr { > > * truncated accordingly on 32 bit architectures. > > */ > > __u64 sig_data; > > + > > + __u64 config3; /* extension of config2 */ > > }; > > > > /* > > > I'm removing the above part, as this is for the kernel, not for tooling. Oops, yes. > > Was this part submitted upstream? I couldn't find, so far, where it was > submitted, can you please clarify? I have to respin it after rc1. I'm waiting on patch 1 to be accepted first. You should only take patch 1 (for 6.1/stable) as I've noted in the patches. I sent the whole thing because Leo asked to see the whole thing... Rob ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] perf: Add support for perf_event_attr::config3 2022-10-04 19:12 [PATCH v4 0/3] perf tool: 'config3' attribute support Rob Herring 2022-10-04 19:12 ` [PATCH v4 1/3] perf: Skip and warn on unknown format 'configN' attrs Rob Herring 2022-10-04 19:12 ` [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition Rob Herring @ 2022-10-04 19:12 ` Rob Herring 2022-10-14 15:25 ` [PATCH v4 0/3] perf tool: 'config3' attribute support Arnaldo Carvalho de Melo 3 siblings, 0 replies; 7+ messages in thread From: Rob Herring @ 2022-10-04 19:12 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa Cc: linux-kernel, linux-perf-users, Leo Yan, James Clark, Namhyung Kim perf_event_attr has gained a new field, config3, so add support for it extending the existing configN support. Signed-off-by: Rob Herring <robh@kernel.org> --- This patch is dependent on the kernel side landing first. v4: - Add config3 to event parsing tests --- tools/perf/tests/parse-events.c | 13 ++++++++++++- tools/perf/util/parse-events.c | 6 ++++++ tools/perf/util/parse-events.h | 1 + tools/perf/util/parse-events.l | 1 + tools/perf/util/pmu.c | 3 +++ tools/perf/util/pmu.h | 1 + 6 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 459afdb256a1..ddd5bdfe5723 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -444,6 +444,7 @@ static int test__checkevent_pmu(struct evlist *evlist) TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); + TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); /* * The period value gets configured within evlist__config, * while this test executes only parse events method. @@ -464,6 +465,7 @@ static int test__checkevent_list(struct evlist *evlist) TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); + TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); @@ -625,6 +627,15 @@ static int test__checkterms_simple(struct list_head *terms) TEST_ASSERT_VAL("wrong val", term->val.num == 3); TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); + /* config3=4 */ + term = list_entry(term->list.next, struct parse_events_term, list); + TEST_ASSERT_VAL("wrong type term", + term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); + TEST_ASSERT_VAL("wrong type val", + term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); + TEST_ASSERT_VAL("wrong val", term->val.num == 4); + TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); + /* umask=1*/ term = list_entry(term->list.next, struct parse_events_term, list); TEST_ASSERT_VAL("wrong type term", @@ -1983,7 +1994,7 @@ struct terms_test { static const struct terms_test test__terms[] = { [0] = { - .str = "config=10,config1,config2=3,umask=1,read,r0xead", + .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", .check = test__checkterms_simple, }, }; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index e2305fca0f95..c843434981d0 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -913,6 +913,7 @@ static const char *config_term_names[__PARSE_EVENTS__TERM_TYPE_NR] = { [PARSE_EVENTS__TERM_TYPE_CONFIG] = "config", [PARSE_EVENTS__TERM_TYPE_CONFIG1] = "config1", [PARSE_EVENTS__TERM_TYPE_CONFIG2] = "config2", + [PARSE_EVENTS__TERM_TYPE_CONFIG3] = "config3", [PARSE_EVENTS__TERM_TYPE_NAME] = "name", [PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD] = "period", [PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ] = "freq", @@ -952,6 +953,7 @@ config_term_avail(int term_type, struct parse_events_error *err) case PARSE_EVENTS__TERM_TYPE_CONFIG: case PARSE_EVENTS__TERM_TYPE_CONFIG1: case PARSE_EVENTS__TERM_TYPE_CONFIG2: + case PARSE_EVENTS__TERM_TYPE_CONFIG3: case PARSE_EVENTS__TERM_TYPE_NAME: case PARSE_EVENTS__TERM_TYPE_METRIC_ID: case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: @@ -997,6 +999,10 @@ do { \ CHECK_TYPE_VAL(NUM); attr->config2 = term->val.num; break; + case PARSE_EVENTS__TERM_TYPE_CONFIG3: + CHECK_TYPE_VAL(NUM); + attr->config3 = term->val.num; + break; case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: CHECK_TYPE_VAL(NUM); break; diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 7e6a601d9cd0..fa9460900abf 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -59,6 +59,7 @@ enum { PARSE_EVENTS__TERM_TYPE_CONFIG, PARSE_EVENTS__TERM_TYPE_CONFIG1, PARSE_EVENTS__TERM_TYPE_CONFIG2, + PARSE_EVENTS__TERM_TYPE_CONFIG3, PARSE_EVENTS__TERM_TYPE_NAME, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ, diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index 3a9ce96c8bce..51fe0a9fb3de 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l @@ -285,6 +285,7 @@ modifier_bp [rwx]{1,3} config { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); } config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); } config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); } +config3 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG3); } name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); } period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } freq { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ); } diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 82455b073c2f..9c0a4b9973a4 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1278,6 +1278,9 @@ static int pmu_config_term(const char *pmu_name, case PERF_PMU_FORMAT_VALUE_CONFIG2: vp = &attr->config2; break; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + vp = &attr->config3; + break; default: return -EINVAL; } diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 68e15c38ae71..2e6bd1bf304a 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -17,6 +17,7 @@ enum { PERF_PMU_FORMAT_VALUE_CONFIG, PERF_PMU_FORMAT_VALUE_CONFIG1, PERF_PMU_FORMAT_VALUE_CONFIG2, + PERF_PMU_FORMAT_VALUE_CONFIG3, PERF_PMU_FORMAT_VALUE_CONFIG_END, }; -- b4 0.11.0-dev ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 0/3] perf tool: 'config3' attribute support 2022-10-04 19:12 [PATCH v4 0/3] perf tool: 'config3' attribute support Rob Herring ` (2 preceding siblings ...) 2022-10-04 19:12 ` [PATCH v4 3/3] perf: Add support for perf_event_attr::config3 Rob Herring @ 2022-10-14 15:25 ` Arnaldo Carvalho de Melo 3 siblings, 0 replies; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2022-10-14 15:25 UTC (permalink / raw) To: Rob Herring Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Namhyung Kim, Alexander Shishkin, Jiri Olsa, linux-kernel, linux-perf-users, Leo Yan, James Clark Em Tue, Oct 04, 2022 at 02:12:34PM -0500, Rob Herring escreveu: > This series is a fix to allow unknown 'configN' attrs and then extends > perf tool to support a new config3 attr. > > The config3 support is RFC for context as the kernel side support[1] is > not yet accepted. Patch 1 is intended for 6.1. > > [1] https://lore.kernel.org/all/20220825-arm-spe-v8-7-v1-0-c75b8d92e692@kernel.org/ > > Signed-off-by: Rob Herring <robh@kernel.org> > --- > Changes in v4: > - Fix event parsing test segfault > - Add 'config3' in event parsing tests > - Link to v3: https://lore.kernel.org/r/20220914-arm-perf-tool-spe1-2-v2-v3-0-8189fc04dcc6@kernel.org Thanks, applied. - Arnaldo > --- > Rob Herring (3): > perf: Skip and warn on unknown format 'configN' attrs > perf tools: Sync perf_event_attr::config3 addition > perf: Add support for perf_event_attr::config3 > > include/uapi/linux/perf_event.h | 3 +++ > tools/include/uapi/linux/perf_event.h | 3 +++ > tools/perf/tests/parse-events.c | 13 ++++++++++++- > tools/perf/util/parse-events.c | 9 +++++++++ > tools/perf/util/parse-events.h | 1 + > tools/perf/util/parse-events.l | 1 + > tools/perf/util/pmu.c | 20 ++++++++++++++++++++ > tools/perf/util/pmu.h | 3 +++ > tools/perf/util/pmu.l | 2 -- > tools/perf/util/pmu.y | 15 ++++----------- > 10 files changed, 56 insertions(+), 14 deletions(-) > --- > base-commit: 1c23f9e627a7b412978b4e852793c5e3c3efc555 > change-id: 20220914-arm-perf-tool-spe1-2-v2-cab789c5d598 > > Best regards, > -- > Rob Herring <robh@kernel.org> -- - Arnaldo ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-10-14 22:05 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-10-04 19:12 [PATCH v4 0/3] perf tool: 'config3' attribute support Rob Herring 2022-10-04 19:12 ` [PATCH v4 1/3] perf: Skip and warn on unknown format 'configN' attrs Rob Herring 2022-10-04 19:12 ` [PATCH v4 2/3] perf tools: Sync perf_event_attr::config3 addition Rob Herring 2022-10-14 21:51 ` Arnaldo Carvalho de Melo 2022-10-14 22:05 ` Rob Herring 2022-10-04 19:12 ` [PATCH v4 3/3] perf: Add support for perf_event_attr::config3 Rob Herring 2022-10-14 15:25 ` [PATCH v4 0/3] perf tool: 'config3' attribute support Arnaldo Carvalho de Melo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).