|
@@ -34,7 +34,7 @@
|
|
|
#ifdef PARSER_DEBUG
|
|
|
extern int parse_events_debug;
|
|
|
#endif
|
|
|
-int parse_events_parse(void *data, void *scanner);
|
|
|
+int parse_events_parse(void *parse_state, void *scanner);
|
|
|
static int get_config_terms(struct list_head *head_config,
|
|
|
struct list_head *head_terms __maybe_unused);
|
|
|
|
|
@@ -589,7 +589,7 @@ static int add_tracepoint_multi_sys(struct list_head *list, int *idx,
|
|
|
}
|
|
|
|
|
|
struct __add_bpf_event_param {
|
|
|
- struct parse_events_evlist *data;
|
|
|
+ struct parse_events_state *parse_state;
|
|
|
struct list_head *list;
|
|
|
struct list_head *head_config;
|
|
|
};
|
|
@@ -599,7 +599,7 @@ static int add_bpf_event(const char *group, const char *event, int fd,
|
|
|
{
|
|
|
LIST_HEAD(new_evsels);
|
|
|
struct __add_bpf_event_param *param = _param;
|
|
|
- struct parse_events_evlist *evlist = param->data;
|
|
|
+ struct parse_events_state *parse_state = param->parse_state;
|
|
|
struct list_head *list = param->list;
|
|
|
struct perf_evsel *pos;
|
|
|
int err;
|
|
@@ -607,8 +607,8 @@ static int add_bpf_event(const char *group, const char *event, int fd,
|
|
|
pr_debug("add bpf event %s:%s and attach bpf program %d\n",
|
|
|
group, event, fd);
|
|
|
|
|
|
- err = parse_events_add_tracepoint(&new_evsels, &evlist->idx, group,
|
|
|
- event, evlist->error,
|
|
|
+ err = parse_events_add_tracepoint(&new_evsels, &parse_state->idx, group,
|
|
|
+ event, parse_state->error,
|
|
|
param->head_config);
|
|
|
if (err) {
|
|
|
struct perf_evsel *evsel, *tmp;
|
|
@@ -632,14 +632,14 @@ static int add_bpf_event(const char *group, const char *event, int fd,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int parse_events_load_bpf_obj(struct parse_events_evlist *data,
|
|
|
+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 err;
|
|
|
char errbuf[BUFSIZ];
|
|
|
- struct __add_bpf_event_param param = {data, list, head_config};
|
|
|
+ struct __add_bpf_event_param param = {parse_state, list, head_config};
|
|
|
static bool registered_unprobe_atexit = false;
|
|
|
|
|
|
if (IS_ERR(obj) || !obj) {
|
|
@@ -680,13 +680,13 @@ int parse_events_load_bpf_obj(struct parse_events_evlist *data,
|
|
|
|
|
|
return 0;
|
|
|
errout:
|
|
|
- data->error->help = strdup("(add -v to see detail)");
|
|
|
- data->error->str = strdup(errbuf);
|
|
|
+ parse_state->error->help = strdup("(add -v to see detail)");
|
|
|
+ parse_state->error->str = strdup(errbuf);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-parse_events_config_bpf(struct parse_events_evlist *data,
|
|
|
+parse_events_config_bpf(struct parse_events_state *parse_state,
|
|
|
struct bpf_object *obj,
|
|
|
struct list_head *head_config)
|
|
|
{
|
|
@@ -705,28 +705,28 @@ parse_events_config_bpf(struct parse_events_evlist *data,
|
|
|
"Invalid config term for BPF object");
|
|
|
errbuf[BUFSIZ - 1] = '\0';
|
|
|
|
|
|
- data->error->idx = term->err_term;
|
|
|
- data->error->str = strdup(errbuf);
|
|
|
+ parse_state->error->idx = term->err_term;
|
|
|
+ parse_state->error->str = strdup(errbuf);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- err = bpf__config_obj(obj, term, data->evlist, &error_pos);
|
|
|
+ err = bpf__config_obj(obj, term, parse_state->evlist, &error_pos);
|
|
|
if (err) {
|
|
|
- bpf__strerror_config_obj(obj, term, data->evlist,
|
|
|
+ bpf__strerror_config_obj(obj, term, parse_state->evlist,
|
|
|
&error_pos, err, errbuf,
|
|
|
sizeof(errbuf));
|
|
|
- data->error->help = strdup(
|
|
|
+ parse_state->error->help = strdup(
|
|
|
"Hint:\tValid config terms:\n"
|
|
|
" \tmap:[<arraymap>].value<indices>=[value]\n"
|
|
|
" \tmap:[<eventmap>].event<indices>=[event]\n"
|
|
|
"\n"
|
|
|
" \twhere <indices> is something like [0,3...5] or [all]\n"
|
|
|
" \t(add -v to see detail)");
|
|
|
- data->error->str = strdup(errbuf);
|
|
|
+ parse_state->error->str = strdup(errbuf);
|
|
|
if (err == -BPF_LOADER_ERRNO__OBJCONF_MAP_VALUE)
|
|
|
- data->error->idx = term->err_val;
|
|
|
+ parse_state->error->idx = term->err_val;
|
|
|
else
|
|
|
- data->error->idx = term->err_term + error_pos;
|
|
|
+ parse_state->error->idx = term->err_term + error_pos;
|
|
|
return err;
|
|
|
}
|
|
|
}
|
|
@@ -762,7 +762,7 @@ split_bpf_config_terms(struct list_head *evt_head_config,
|
|
|
list_move_tail(&term->list, obj_head_config);
|
|
|
}
|
|
|
|
|
|
-int parse_events_load_bpf(struct parse_events_evlist *data,
|
|
|
+int parse_events_load_bpf(struct parse_events_state *parse_state,
|
|
|
struct list_head *list,
|
|
|
char *bpf_file_name,
|
|
|
bool source,
|
|
@@ -790,15 +790,15 @@ int parse_events_load_bpf(struct parse_events_evlist *data,
|
|
|
-err, errbuf,
|
|
|
sizeof(errbuf));
|
|
|
|
|
|
- data->error->help = strdup("(add -v to see detail)");
|
|
|
- data->error->str = strdup(errbuf);
|
|
|
+ parse_state->error->help = strdup("(add -v to see detail)");
|
|
|
+ parse_state->error->str = strdup(errbuf);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- err = parse_events_load_bpf_obj(data, list, obj, head_config);
|
|
|
+ err = parse_events_load_bpf_obj(parse_state, list, obj, head_config);
|
|
|
if (err)
|
|
|
return err;
|
|
|
- err = parse_events_config_bpf(data, obj, &obj_head_config);
|
|
|
+ err = parse_events_config_bpf(parse_state, obj, &obj_head_config);
|
|
|
|
|
|
/*
|
|
|
* Caller doesn't know anything about obj_head_config,
|
|
@@ -1184,7 +1184,7 @@ int parse_events_add_tracepoint(struct list_head *list, int *idx,
|
|
|
err, head_config);
|
|
|
}
|
|
|
|
|
|
-int parse_events_add_numeric(struct parse_events_evlist *data,
|
|
|
+int parse_events_add_numeric(struct parse_events_state *parse_state,
|
|
|
struct list_head *list,
|
|
|
u32 type, u64 config,
|
|
|
struct list_head *head_config)
|
|
@@ -1197,7 +1197,7 @@ int parse_events_add_numeric(struct parse_events_evlist *data,
|
|
|
attr.config = config;
|
|
|
|
|
|
if (head_config) {
|
|
|
- if (config_attr(&attr, head_config, data->error,
|
|
|
+ if (config_attr(&attr, head_config, parse_state->error,
|
|
|
config_term_common))
|
|
|
return -EINVAL;
|
|
|
|
|
@@ -1205,11 +1205,11 @@ int parse_events_add_numeric(struct parse_events_evlist *data,
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- return add_event(list, &data->idx, &attr,
|
|
|
+ return add_event(list, &parse_state->idx, &attr,
|
|
|
get_config_name(head_config), &config_terms);
|
|
|
}
|
|
|
|
|
|
-int parse_events_add_pmu(struct parse_events_evlist *data,
|
|
|
+int parse_events_add_pmu(struct parse_events_state *parse_state,
|
|
|
struct list_head *list, char *name,
|
|
|
struct list_head *head_config)
|
|
|
{
|
|
@@ -1232,7 +1232,7 @@ int parse_events_add_pmu(struct parse_events_evlist *data,
|
|
|
|
|
|
if (!head_config) {
|
|
|
attr.type = pmu->type;
|
|
|
- evsel = __add_event(list, &data->idx, &attr, NULL, pmu->cpus, NULL);
|
|
|
+ evsel = __add_event(list, &parse_state->idx, &attr, NULL, pmu->cpus, NULL);
|
|
|
return evsel ? 0 : -ENOMEM;
|
|
|
}
|
|
|
|
|
@@ -1243,16 +1243,16 @@ int parse_events_add_pmu(struct parse_events_evlist *data,
|
|
|
* Configure hardcoded terms first, no need to check
|
|
|
* return value when called with fail == 0 ;)
|
|
|
*/
|
|
|
- if (config_attr(&attr, head_config, data->error, config_term_pmu))
|
|
|
+ if (config_attr(&attr, head_config, parse_state->error, config_term_pmu))
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (get_config_terms(head_config, &config_terms))
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- if (perf_pmu__config(pmu, &attr, head_config, data->error))
|
|
|
+ if (perf_pmu__config(pmu, &attr, head_config, parse_state->error))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- evsel = __add_event(list, &data->idx, &attr,
|
|
|
+ evsel = __add_event(list, &parse_state->idx, &attr,
|
|
|
get_config_name(head_config), pmu->cpus,
|
|
|
&config_terms);
|
|
|
if (evsel) {
|
|
@@ -1267,7 +1267,7 @@ int parse_events_add_pmu(struct parse_events_evlist *data,
|
|
|
return evsel ? 0 : -ENOMEM;
|
|
|
}
|
|
|
|
|
|
-int parse_events_multi_pmu_add(struct parse_events_evlist *data,
|
|
|
+int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
|
|
|
char *str, struct list_head **listp)
|
|
|
{
|
|
|
struct list_head *head;
|
|
@@ -1296,7 +1296,7 @@ int parse_events_multi_pmu_add(struct parse_events_evlist *data,
|
|
|
return -1;
|
|
|
list_add_tail(&term->list, head);
|
|
|
|
|
|
- if (!parse_events_add_pmu(data, list,
|
|
|
+ if (!parse_events_add_pmu(parse_state, list,
|
|
|
pmu->name, head)) {
|
|
|
pr_debug("%s -> %s/%s/\n", str,
|
|
|
pmu->name, alias->str);
|
|
@@ -1628,7 +1628,7 @@ perf_pmu__parse_check(const char *name)
|
|
|
return r ? r->type : PMU_EVENT_SYMBOL_ERR;
|
|
|
}
|
|
|
|
|
|
-static int parse_events__scanner(const char *str, void *data, int start_token)
|
|
|
+static int parse_events__scanner(const char *str, void *parse_state, int start_token)
|
|
|
{
|
|
|
YY_BUFFER_STATE buffer;
|
|
|
void *scanner;
|
|
@@ -1643,7 +1643,7 @@ static int parse_events__scanner(const char *str, void *data, int start_token)
|
|
|
#ifdef PARSER_DEBUG
|
|
|
parse_events_debug = 1;
|
|
|
#endif
|
|
|
- ret = parse_events_parse(data, scanner);
|
|
|
+ ret = parse_events_parse(parse_state, scanner);
|
|
|
|
|
|
parse_events__flush_buffer(buffer, scanner);
|
|
|
parse_events__delete_buffer(buffer, scanner);
|
|
@@ -1656,45 +1656,45 @@ static int parse_events__scanner(const char *str, void *data, int start_token)
|
|
|
*/
|
|
|
int parse_events_terms(struct list_head *terms, const char *str)
|
|
|
{
|
|
|
- struct parse_events_terms data = {
|
|
|
+ struct parse_events_state parse_state = {
|
|
|
.terms = NULL,
|
|
|
};
|
|
|
int ret;
|
|
|
|
|
|
- ret = parse_events__scanner(str, &data, PE_START_TERMS);
|
|
|
+ ret = parse_events__scanner(str, &parse_state, PE_START_TERMS);
|
|
|
if (!ret) {
|
|
|
- list_splice(data.terms, terms);
|
|
|
- zfree(&data.terms);
|
|
|
+ list_splice(parse_state.terms, terms);
|
|
|
+ zfree(&parse_state.terms);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- parse_events_terms__delete(data.terms);
|
|
|
+ parse_events_terms__delete(parse_state.terms);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
int parse_events(struct perf_evlist *evlist, const char *str,
|
|
|
struct parse_events_error *err)
|
|
|
{
|
|
|
- struct parse_events_evlist data = {
|
|
|
- .list = LIST_HEAD_INIT(data.list),
|
|
|
+ struct parse_events_state parse_state = {
|
|
|
+ .list = LIST_HEAD_INIT(parse_state.list),
|
|
|
.idx = evlist->nr_entries,
|
|
|
.error = err,
|
|
|
.evlist = evlist,
|
|
|
};
|
|
|
int ret;
|
|
|
|
|
|
- ret = parse_events__scanner(str, &data, PE_START_EVENTS);
|
|
|
+ ret = parse_events__scanner(str, &parse_state, PE_START_EVENTS);
|
|
|
perf_pmu__parse_cleanup();
|
|
|
if (!ret) {
|
|
|
struct perf_evsel *last;
|
|
|
|
|
|
- if (list_empty(&data.list)) {
|
|
|
+ if (list_empty(&parse_state.list)) {
|
|
|
WARN_ONCE(true, "WARNING: event parser found nothing");
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- perf_evlist__splice_list_tail(evlist, &data.list);
|
|
|
- evlist->nr_groups += data.nr_groups;
|
|
|
+ perf_evlist__splice_list_tail(evlist, &parse_state.list);
|
|
|
+ evlist->nr_groups += parse_state.nr_groups;
|
|
|
last = perf_evlist__last(evlist);
|
|
|
last->cmdline_group_boundary = true;
|
|
|
|
|
@@ -2520,10 +2520,10 @@ void parse_events__clear_array(struct parse_events_array *a)
|
|
|
zfree(&a->ranges);
|
|
|
}
|
|
|
|
|
|
-void parse_events_evlist_error(struct parse_events_evlist *data,
|
|
|
+void parse_events_evlist_error(struct parse_events_state *parse_state,
|
|
|
int idx, const char *str)
|
|
|
{
|
|
|
- struct parse_events_error *err = data->error;
|
|
|
+ struct parse_events_error *err = parse_state->error;
|
|
|
|
|
|
if (!err)
|
|
|
return;
|