Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf parse-events: Improve location for add pmu

Improve the location for add PMU for cases when PMUs aren't found.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20230627181030.95608-13-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
81a4e31f d81fa63b

+13 -11
+7 -5
tools/perf/util/parse-events.c
··· 1575 1575 int parse_events_add_pmu(struct parse_events_state *parse_state, 1576 1576 struct list_head *list, char *name, 1577 1577 struct list_head *head_config, 1578 - bool auto_merge_stats) 1578 + bool auto_merge_stats, void *loc_) 1579 1579 { 1580 1580 struct perf_event_attr attr; 1581 1581 struct perf_pmu_info info; 1582 1582 struct perf_pmu *pmu; 1583 1583 struct evsel *evsel; 1584 1584 struct parse_events_error *err = parse_state->error; 1585 + YYLTYPE *loc = loc_; 1585 1586 LIST_HEAD(config_terms); 1586 1587 1587 1588 pmu = parse_state->fake_pmu ?: perf_pmus__find(name); ··· 1606 1605 if (asprintf(&err_str, 1607 1606 "Cannot find PMU `%s'. Missing kernel support?", 1608 1607 name) >= 0) 1609 - parse_events_error__handle(err, 0, err_str, NULL); 1608 + parse_events_error__handle(err, loc->first_column, err_str, NULL); 1610 1609 return -EINVAL; 1611 1610 } 1612 1611 if (head_config) ··· 1692 1691 1693 1692 int parse_events_multi_pmu_add(struct parse_events_state *parse_state, 1694 1693 char *str, struct list_head *head, 1695 - struct list_head **listp) 1694 + struct list_head **listp, void *loc_) 1696 1695 { 1697 1696 struct parse_events_term *term; 1698 1697 struct list_head *list = NULL; 1699 1698 struct list_head *orig_head = NULL; 1700 1699 struct perf_pmu *pmu = NULL; 1700 + YYLTYPE *loc = loc_; 1701 1701 int ok = 0; 1702 1702 char *config; 1703 1703 ··· 1745 1743 parse_events_copy_term_list(head, &orig_head); 1746 1744 if (!parse_events_add_pmu(parse_state, list, 1747 1745 pmu->name, orig_head, 1748 - auto_merge_stats)) { 1746 + auto_merge_stats, loc)) { 1749 1747 pr_debug("%s -> %s/%s/\n", str, 1750 1748 pmu->name, alias->str); 1751 1749 parse_state->wild_card_pmus = true; ··· 1758 1756 1759 1757 if (parse_state->fake_pmu) { 1760 1758 if (!parse_events_add_pmu(parse_state, list, str, head, 1761 - /*auto_merge_stats=*/true)) { 1759 + /*auto_merge_stats=*/true, loc)) { 1762 1760 pr_debug("%s -> %s/%s/\n", str, "fake_pmu", str); 1763 1761 ok++; 1764 1762 }
+2 -2
tools/perf/util/parse-events.h
··· 202 202 int parse_events_add_pmu(struct parse_events_state *parse_state, 203 203 struct list_head *list, char *name, 204 204 struct list_head *head_config, 205 - bool auto_merge_stats); 205 + bool auto_merge_stats, void *loc); 206 206 207 207 struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr, 208 208 const char *name, const char *metric_id, ··· 211 211 int parse_events_multi_pmu_add(struct parse_events_state *parse_state, 212 212 char *str, 213 213 struct list_head *head_config, 214 - struct list_head **listp); 214 + struct list_head **listp, void *loc); 215 215 216 216 int parse_events_copy_term_list(struct list_head *old, 217 217 struct list_head **new);
+4 -4
tools/perf/util/parse-events.y
··· 313 313 YYNOMEM; 314 314 } 315 315 /* Attempt to add to list assuming $1 is a PMU name. */ 316 - if (parse_events_add_pmu(parse_state, list, $1, $2, /*auto_merge_stats=*/false)) { 316 + if (parse_events_add_pmu(parse_state, list, $1, $2, /*auto_merge_stats=*/false, &@1)) { 317 317 struct perf_pmu *pmu = NULL; 318 318 int ok = 0; 319 319 ··· 341 341 YYNOMEM; 342 342 } 343 343 if (!parse_events_add_pmu(parse_state, list, pmu->name, terms, 344 - auto_merge_stats)) { 344 + auto_merge_stats, &@1)) { 345 345 ok++; 346 346 parse_state->wild_card_pmus = true; 347 347 } ··· 352 352 if (!ok) { 353 353 /* Failure to add, assume $1 is an event name. */ 354 354 zfree(&list); 355 - ok = !parse_events_multi_pmu_add(parse_state, $1, $2, &list); 355 + ok = !parse_events_multi_pmu_add(parse_state, $1, $2, &list, &@1); 356 356 $2 = NULL; 357 357 } 358 358 if (!ok) { ··· 379 379 struct list_head *list; 380 380 int err; 381 381 382 - err = parse_events_multi_pmu_add(_parse_state, $1, NULL, &list); 382 + err = parse_events_multi_pmu_add(_parse_state, $1, NULL, &list, &@1); 383 383 if (err < 0) { 384 384 struct parse_events_state *parse_state = _parse_state; 385 385 struct parse_events_error *error = parse_state->error;