Thread (78 messages) 78 messages, 3 authors, 2021-11-08

Re: [PATCH 46/59] perf tools: Add add_numeric callback to struct parse_events_ops

From: Ian Rogers <irogers@google.com>
Date: 2021-11-08 18:27:28

On Mon, Nov 8, 2021 at 5:41 AM Jiri Olsa [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Adding add_numeric callback to struct parse_events_ops,
to allow custom numeric parsing code.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/lib/perf/include/internal/parse-events.h |  5 +++++
 tools/perf/util/parse-events.c                 |  2 ++
 tools/perf/util/parse-events.h                 |  4 ----
 tools/perf/util/parse-events.y                 | 12 ++++++++----
 4 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/tools/lib/perf/include/internal/parse-events.h b/tools/lib/perf/include/internal/parse-events.h
index 78dd3f989346..cbcf799f8969 100644
--- a/tools/lib/perf/include/internal/parse-events.h
+++ b/tools/lib/perf/include/internal/parse-events.h
@@ -102,6 +102,11 @@ struct parse_events_ops {
        int (*add_pmu_multi)(struct parse_events_state *parse_state,
                             char *str, struct list_head *head,
                             struct list_head **listp);
+
+       int (*add_numeric)(struct parse_events_state *parse_state,
+                          struct list_head *list,
+                          u32 type, u64 config,
+                          struct list_head *head_config);
 };

 struct parse_events_state {
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index c67634c9de0d..a05e1bdb4e60 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1306,6 +1306,7 @@ int parse_events_add_tracepoint(struct parse_events_state *parse_state,
                                            err, head_config);
 }

+static
 int parse_events_add_numeric(struct parse_events_state *parse_state,
                             struct list_head *list,
                             u32 type, u64 config,
@@ -2904,4 +2905,5 @@ static struct parse_events_ops parse_state_ops = {
        .perf_evsel__delete = perf_evsel__delete_helper,
        .add_pmu            = parse_events_add_pmu,
        .add_pmu_multi      = parse_events_multi_pmu_add,
+       .add_numeric        = parse_events_add_numeric,
Some documentation on the ops would be awesome :-) Especially as this
is allowing configuration and it is not immediately clear what that
could mean when changes happen.

Thanks,
Ian
quoted hunk ↗ jump to hunk
 };
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index fa03f8f70f33..40d192cace03 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -79,10 +79,6 @@ int parse_events_load_bpf_obj(struct parse_events_state *parse_state,
                              struct list_head *list,
                              struct bpf_object *obj,
                              struct list_head *head_config);
-int parse_events_add_numeric(struct parse_events_state *parse_state,
-                            struct list_head *list,
-                            u32 type, u64 config,
-                            struct list_head *head_config);
 int parse_events_add_tool(struct parse_events_state *parse_state,
                          struct list_head *list,
                          int tool_event);
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index f903690b3c8a..b23691397374 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -436,6 +436,7 @@ PE_VALUE_SYM_SW
 event_legacy_symbol:
 value_sym '/' event_config '/'
 {
+       struct parse_events_state *parse_state = _parse_state;
        struct list_head *list;
        int type = $1 >> 16;
        int config = $1 & 255;
@@ -443,7 +444,7 @@ value_sym '/' event_config '/'

        list = alloc_list();
        ABORT_ON(!list);
-       err = parse_events_add_numeric(_parse_state, list, type, config, $3);
+       err = parse_state->ops->add_numeric(parse_state, list, type, config, $3);
        parse_events_terms__delete($3);
        if (err) {
                free_list_evsel(_parse_state, list);
@@ -454,13 +455,14 @@ value_sym '/' event_config '/'
 |
 value_sym sep_slash_slash_dc
 {
+       struct parse_events_state *parse_state = _parse_state;
        struct list_head *list;
        int type = $1 >> 16;
        int config = $1 & 255;

        list = alloc_list();
        ABORT_ON(!list);
-       ABORT_ON(parse_events_add_numeric(_parse_state, list, type, config, NULL));
+       ABORT_ON(parse_state->ops->add_numeric(parse_state, list, type, config, NULL));
        $$ = list;
 }
 |
@@ -646,12 +648,13 @@ PE_NAME ':' PE_NAME
 event_legacy_numeric:
 PE_VALUE ':' PE_VALUE opt_event_config
 {
+       struct parse_events_state *parse_state = _parse_state;
        struct list_head *list;
        int err;

        list = alloc_list();
        ABORT_ON(!list);
-       err = parse_events_add_numeric(_parse_state, list, (u32)$1, $3, $4);
+       err = parse_state->ops->add_numeric(_parse_state, list, (u32)$1, $3, $4);
        parse_events_terms__delete($4);
        if (err) {
                free(list);
@@ -663,12 +666,13 @@ PE_VALUE ':' PE_VALUE opt_event_config
 event_legacy_raw:
 PE_RAW opt_event_config
 {
+       struct parse_events_state *parse_state = _parse_state;
        struct list_head *list;
        int err;

        list = alloc_list();
        ABORT_ON(!list);
-       err = parse_events_add_numeric(_parse_state, list, PERF_TYPE_RAW, $1, $2);
+       err = parse_state->ops->add_numeric(_parse_state, list, PERF_TYPE_RAW, $1, $2);
        parse_events_terms__delete($2);
        if (err) {
                free(list);
--
2.31.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help