Skip to content

Commit a7d212f

Browse files
ahunter6acmel
authored andcommitted
perf tools: Factor out copy_config_terms() and free_config_terms()
Factor out copy_config_terms() and free_config_terms() so that they can be reused. Signed-off-by: Adrian Hunter <[email protected]> Acked-by: Jiri Olsa <[email protected]> Cc: Jin Yao <[email protected]> Cc: Kan Liang <[email protected]> Link: https //lore.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent eb34363 commit a7d212f

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

tools/perf/util/evsel.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,11 +333,11 @@ struct evsel *evsel__new_cycles(bool precise, __u32 type, __u64 config)
333333
goto out;
334334
}
335335

336-
static int evsel__copy_config_terms(struct evsel *dst, struct evsel *src)
336+
int copy_config_terms(struct list_head *dst, struct list_head *src)
337337
{
338338
struct evsel_config_term *pos, *tmp;
339339

340-
list_for_each_entry(pos, &src->config_terms, list) {
340+
list_for_each_entry(pos, src, list) {
341341
tmp = malloc(sizeof(*tmp));
342342
if (tmp == NULL)
343343
return -ENOMEM;
@@ -350,11 +350,16 @@ static int evsel__copy_config_terms(struct evsel *dst, struct evsel *src)
350350
return -ENOMEM;
351351
}
352352
}
353-
list_add_tail(&tmp->list, &dst->config_terms);
353+
list_add_tail(&tmp->list, dst);
354354
}
355355
return 0;
356356
}
357357

358+
static int evsel__copy_config_terms(struct evsel *dst, struct evsel *src)
359+
{
360+
return copy_config_terms(&dst->config_terms, &src->config_terms);
361+
}
362+
358363
/**
359364
* evsel__clone - create a new evsel copied from @orig
360365
* @orig: original evsel
@@ -1385,18 +1390,23 @@ int evsel__disable(struct evsel *evsel)
13851390
return err;
13861391
}
13871392

1388-
static void evsel__free_config_terms(struct evsel *evsel)
1393+
void free_config_terms(struct list_head *config_terms)
13891394
{
13901395
struct evsel_config_term *term, *h;
13911396

1392-
list_for_each_entry_safe(term, h, &evsel->config_terms, list) {
1397+
list_for_each_entry_safe(term, h, config_terms, list) {
13931398
list_del_init(&term->list);
13941399
if (term->free_str)
13951400
zfree(&term->val.str);
13961401
free(term);
13971402
}
13981403
}
13991404

1405+
static void evsel__free_config_terms(struct evsel *evsel)
1406+
{
1407+
free_config_terms(&evsel->config_terms);
1408+
}
1409+
14001410
void evsel__exit(struct evsel *evsel)
14011411
{
14021412
assert(list_empty(&evsel->core.node));

tools/perf/util/evsel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ static inline struct evsel *evsel__new(struct perf_event_attr *attr)
213213
struct evsel *evsel__clone(struct evsel *orig);
214214
struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx);
215215

216+
int copy_config_terms(struct list_head *dst, struct list_head *src);
217+
void free_config_terms(struct list_head *config_terms);
218+
216219
/*
217220
* Returns pointer with encoded error via <linux/err.h> interface.
218221
*/

tools/perf/util/parse-events.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1608,14 +1608,7 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
16081608
}
16091609

16101610
if (!parse_state->fake_pmu && perf_pmu__config(pmu, &attr, head_config, parse_state->error)) {
1611-
struct evsel_config_term *pos, *tmp;
1612-
1613-
list_for_each_entry_safe(pos, tmp, &config_terms, list) {
1614-
list_del_init(&pos->list);
1615-
if (pos->free_str)
1616-
zfree(&pos->val.str);
1617-
free(pos);
1618-
}
1611+
free_config_terms(&config_terms);
16191612
return -EINVAL;
16201613
}
16211614

0 commit comments

Comments
 (0)