perf parse-events: Tidy the setting of the default event name
authorIan Rogers <irogers@google.com>
Tue, 16 Apr 2024 06:15:32 +0000 (23:15 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 27 Apr 2024 01:07:21 +0000 (22:07 -0300)
Add comments. Pass ownership of the event name to save on a strdup.

Signed-off-by: Ian Rogers <irogers@google.com>
Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
Tested-by: Atish Patra <atishp@rivosinc.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Beeman Strong <beeman@rivosinc.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240416061533.921723-17-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/parse-events.c
tools/perf/util/parse-events.h
tools/perf/util/parse-events.l
tools/perf/util/parse-events.y

index 1c1b1bcb78e8aa31e48762e1497bbe1204ba1247..0f308b4db2b972f635e3c103613a02e1f3931881 100644 (file)
@@ -1836,18 +1836,21 @@ int parse_events__modifier_event(struct parse_events_state *parse_state, void *l
        return parse_events__modifier_list(parse_state, loc, list, mod, /*group=*/false);
 }
 
-int parse_events_name(struct list_head *list, const char *name)
+int parse_events__set_default_name(struct list_head *list, char *name)
 {
        struct evsel *evsel;
+       bool used_name = false;
 
        __evlist__for_each_entry(list, evsel) {
                if (!evsel->name) {
-                       evsel->name = strdup(name);
+                       evsel->name = used_name ? strdup(name) : name;
+                       used_name = true;
                        if (!evsel->name)
                                return -ENOMEM;
                }
        }
-
+       if (!used_name)
+               free(name);
        return 0;
 }
 
index 0bb5f0c80a5e6e7abacb892cacdd5f1840088a11..5695308efab981f601afb4ec019e9041da382365 100644 (file)
@@ -207,7 +207,7 @@ int parse_events__modifier_event(struct parse_events_state *parse_state, void *l
                                 struct list_head *list, struct parse_events_modifier mod);
 int parse_events__modifier_group(struct parse_events_state *parse_state, void *loc,
                                 struct list_head *list, struct parse_events_modifier mod);
-int parse_events_name(struct list_head *list, const char *name);
+int parse_events__set_default_name(struct list_head *list, char *name);
 int parse_events_add_tracepoint(struct list_head *list, int *idx,
                                const char *sys, const char *event,
                                struct parse_events_error *error,
index 4aaf0c53d9b6dceff689bf12b5747fca42f849ed..08ea2d845dc361d4137edf4ccf0b2a86367559ee 100644 (file)
@@ -96,6 +96,11 @@ static int drv_str(yyscan_t scanner, int token)
        return token;
 }
 
+/*
+ * Use yyless to return all the characaters to the input. Update the column for
+ * location debugging. If __alloc is non-zero set yylval to the text for the
+ * returned token's value.
+ */
 #define REWIND(__alloc)                                \
 do {                                                           \
        YYSTYPE *__yylval = parse_events_get_lval(yyscanner);   \
index 6f1042272dda30d09844fa0799f3b919987295e8..68b3b06c7ff06b2757069bb1fcc056508666247f 100644 (file)
@@ -247,10 +247,14 @@ event_name
 event_name:
 PE_EVENT_NAME event_def
 {
-       int err;
+       /*
+        * When an event is parsed the text is rewound and the entire text of
+        * the event is set to the str of PE_EVENT_NAME token matched here. If
+        * no name was on an event via a term, set the name to the entire text
+        * taking ownership of the allocation.
+        */
+       int err = parse_events__set_default_name($2, $1);
 
-       err = parse_events_name($2, $1);
-       free($1);
        if (err) {
                free_list_evsel($2);
                YYNOMEM;