mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-26 03:52:41 +00:00
perf parse-events: Introduce 'struct parse_events_terms'
parse_events_terms() existed in function names but was passed a 'struct list_head'. As many parse_events functions take an evsel_config list as well as a parse_event_term list, and the naming head_terms and head_config is inconsistent, there's a potential to switch the lists and get errors. Introduce a 'struct parse_events_terms', that just wraps a list_head, to avoid this. Add the regular init/exit functions and transition the code to use them. Reviewed-by: James Clark <james.clark@arm.com> Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.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: Rob Herring <robh@kernel.org> Link: https://lore.kernel.org/r/20230901233949.2930562-6-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
727adeed06
commit
0d3f0e6f94
@@ -44,7 +44,6 @@ static inline int parse_events(struct evlist *evlist, const char *str,
|
||||
|
||||
int parse_event(struct evlist *evlist, const char *str);
|
||||
|
||||
int parse_events_terms(struct list_head *terms, const char *str, FILE *input);
|
||||
int parse_filter(const struct option *opt, const char *str, int unset);
|
||||
int exclude_perf(const struct option *opt, const char *arg, int unset);
|
||||
|
||||
@@ -140,6 +139,11 @@ struct parse_events_error {
|
||||
char *first_help;
|
||||
};
|
||||
|
||||
/* A wrapper around a list of terms for the sake of better type safety. */
|
||||
struct parse_events_terms {
|
||||
struct list_head terms;
|
||||
};
|
||||
|
||||
struct parse_events_state {
|
||||
/* The list parsed events are placed on. */
|
||||
struct list_head list;
|
||||
@@ -148,7 +152,7 @@ struct parse_events_state {
|
||||
/* Error information. */
|
||||
struct parse_events_error *error;
|
||||
/* Holds returned terms for term parsing. */
|
||||
struct list_head *terms;
|
||||
struct parse_events_terms *terms;
|
||||
/* Start token. */
|
||||
int stoken;
|
||||
/* Special fake PMU marker for testing. */
|
||||
@@ -181,35 +185,38 @@ int parse_events_term__term(struct parse_events_term **term,
|
||||
int parse_events_term__clone(struct parse_events_term **new,
|
||||
struct parse_events_term *term);
|
||||
void parse_events_term__delete(struct parse_events_term *term);
|
||||
void parse_events_terms__delete(struct list_head *terms);
|
||||
void parse_events_terms__purge(struct list_head *terms);
|
||||
int parse_events_term__to_strbuf(struct list_head *term_list, struct strbuf *sb);
|
||||
|
||||
void parse_events_terms__delete(struct parse_events_terms *terms);
|
||||
void parse_events_terms__init(struct parse_events_terms *terms);
|
||||
void parse_events_terms__exit(struct parse_events_terms *terms);
|
||||
int parse_events_terms(struct parse_events_terms *terms, const char *str, FILE *input);
|
||||
int parse_events_terms__to_strbuf(const struct parse_events_terms *terms, struct strbuf *sb);
|
||||
int parse_events__modifier_event(struct list_head *list, char *str, bool add);
|
||||
int parse_events__modifier_group(struct list_head *list, char *event_mod);
|
||||
int parse_events_name(struct list_head *list, const char *name);
|
||||
int parse_events_add_tracepoint(struct list_head *list, int *idx,
|
||||
const char *sys, const char *event,
|
||||
struct parse_events_error *error,
|
||||
struct list_head *head_config, void *loc);
|
||||
struct parse_events_terms *head_config, void *loc);
|
||||
int parse_events_add_numeric(struct parse_events_state *parse_state,
|
||||
struct list_head *list,
|
||||
u32 type, u64 config,
|
||||
struct list_head *head_config,
|
||||
struct parse_events_terms *head_config,
|
||||
bool wildcard);
|
||||
int parse_events_add_tool(struct parse_events_state *parse_state,
|
||||
struct list_head *list,
|
||||
int tool_event);
|
||||
int parse_events_add_cache(struct list_head *list, int *idx, const char *name,
|
||||
struct parse_events_state *parse_state,
|
||||
struct list_head *head_config);
|
||||
struct parse_events_terms *head_config);
|
||||
int parse_events__decode_legacy_cache(const char *name, int pmu_type, __u64 *config);
|
||||
int parse_events_add_breakpoint(struct parse_events_state *parse_state,
|
||||
struct list_head *list,
|
||||
u64 addr, char *type, u64 len,
|
||||
struct list_head *head_config);
|
||||
struct parse_events_terms *head_config);
|
||||
int parse_events_add_pmu(struct parse_events_state *parse_state,
|
||||
struct list_head *list, const char *name,
|
||||
const struct list_head *const_head_terms,
|
||||
const struct parse_events_terms *const_parsed_terms,
|
||||
bool auto_merge_stats, void *loc);
|
||||
|
||||
struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
|
||||
@@ -218,7 +225,7 @@ struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
|
||||
|
||||
int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
|
||||
const char *event_name,
|
||||
const struct list_head *head_terms,
|
||||
const struct parse_events_terms *const_parsed_terms,
|
||||
struct list_head **listp, void *loc);
|
||||
|
||||
void parse_events__set_leader(char *name, struct list_head *list);
|
||||
|
||||
Reference in New Issue
Block a user