mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
perf evsel: Allow evsel__newtp without libtraceevent
Switch from reading the tracepoint format to reading the id directly for the evsel config. This avoids the need to initialize libtraceevent, plugins, etc. It is sufficient for many tracepoint commands to work like: $ perf stat -e sched:sched_switch true To populate evsel->tp_format, do lazy initialization using libtraceevent in the evsel__tp_format function (the sys and name are saved in evsel__newtp_idx for this purpose). Reading the id should be indicative of the format failing to load, but if not an error is reported in evsel__tp_format. This could happen for a tracepoint with a format that fails to parse. As tracepoints can be parsed without libtraceevent with this, remove the associated #ifdefs in parse-events.c. By only lazily parsing the tracepoint format information it is hoped this will help improve the performance of code using tracepoints but not the format information. It also cuts down on the build and ifdef logic. Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Ben Gainey <ben.gainey@arm.com> Cc: Colin Ian King <colin.i.king@gmail.com> Cc: Dominique Martinet <asmadeus@codewreck.org> Cc: Ilkka Koskinen <ilkka@os.amperecomputing.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Oliver Upton <oliver.upton@linux.dev> Cc: Paran Lee <p4ranlee@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Steven Rostedt (VMware) <rostedt@goodmis.org> Cc: Thomas Falcon <thomas.falcon@intel.com> Cc: Weilin Wang <weilin.wang@intel.com> Cc: Yang Jihong <yangjihong@bytedance.com> Cc: Yang Li <yang.lee@linux.alibaba.com> Cc: Ze Gao <zegao2021@gmail.com> Cc: Zixian Cai <fzczx123@gmail.com> Cc: zhaimingbing <zhaimingbing@cmss.chinamobile.com> Link: https://lore.kernel.org/r/20241118225345.889810-7-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
c46d634a03
commit
6c8310e838
@@ -489,7 +489,6 @@ int parse_events_add_cache(struct list_head *list, int *idx, const char *name,
|
||||
return found_supported ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBTRACEEVENT
|
||||
static void tracepoint_error(struct parse_events_error *e, int err,
|
||||
const char *sys, const char *name, int column)
|
||||
{
|
||||
@@ -644,7 +643,6 @@ static int add_tracepoint_multi_sys(struct parse_events_state *parse_state,
|
||||
closedir(events_dir);
|
||||
return ret;
|
||||
}
|
||||
#endif /* HAVE_LIBTRACEEVENT */
|
||||
|
||||
size_t default_breakpoint_len(void)
|
||||
{
|
||||
@@ -1066,7 +1064,6 @@ static int config_term_pmu(struct perf_event_attr *attr,
|
||||
return config_term_common(attr, term, err);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBTRACEEVENT
|
||||
static int config_term_tracepoint(struct perf_event_attr *attr,
|
||||
struct parse_events_term *term,
|
||||
struct parse_events_error *err)
|
||||
@@ -1111,7 +1108,6 @@ static int config_term_tracepoint(struct perf_event_attr *attr,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int config_attr(struct perf_event_attr *attr,
|
||||
const struct parse_events_terms *head,
|
||||
@@ -1303,7 +1299,7 @@ int parse_events_add_tracepoint(struct parse_events_state *parse_state,
|
||||
struct parse_events_terms *head_config, void *loc_)
|
||||
{
|
||||
YYLTYPE *loc = loc_;
|
||||
#ifdef HAVE_LIBTRACEEVENT
|
||||
|
||||
if (head_config) {
|
||||
struct perf_event_attr attr;
|
||||
|
||||
@@ -1318,16 +1314,6 @@ int parse_events_add_tracepoint(struct parse_events_state *parse_state,
|
||||
else
|
||||
return add_tracepoint_event(parse_state, list, sys, event,
|
||||
err, head_config, loc);
|
||||
#else
|
||||
(void)parse_state;
|
||||
(void)list;
|
||||
(void)sys;
|
||||
(void)event;
|
||||
(void)head_config;
|
||||
parse_events_error__handle(err, loc->first_column, strdup("unsupported tracepoint"),
|
||||
strdup("libtraceevent is necessary for tracepoint support"));
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int __parse_events_add_numeric(struct parse_events_state *parse_state,
|
||||
|
||||
Reference in New Issue
Block a user