Skip to content

Commit

Permalink
perf evsel: Remove idx parm from constructor
Browse files Browse the repository at this point in the history
Most uses of the evsel constructor are followed by a call to
perf_evlist__add with an idex of evlist->nr_entries, so make rename
the current constructor to perf_evsel__new_idx and remove the need
for passing the constructor for the common case.

We still need the new_idx variant because the way groups are handled,
with evsel->nr_members holding the number of entries in an evlist,
partitioning the evlist into sublists inside a single linked list.

This asks for a clarifying refactoring, but for now simplify the non
parser cases, so that tool writers don't have to bother with evsel idx
setting.

Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
acmel committed Nov 11, 2013
1 parent d53e57d commit ef50383
Show file tree
Hide file tree
Showing 12 changed files with 37 additions and 28 deletions.
13 changes: 5 additions & 8 deletions tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,9 @@ static void perf_evsel__delete_priv(struct perf_evsel *evsel)
perf_evsel__delete(evsel);
}

static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction,
void *handler, int idx)
static struct perf_evsel *perf_evsel__syscall_newtp(const char *direction, void *handler)
{
struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction, idx);
struct perf_evsel *evsel = perf_evsel__newtp("raw_syscalls", direction);

if (evsel) {
evsel->priv = malloc(sizeof(struct syscall_tp));
Expand Down Expand Up @@ -186,17 +185,16 @@ static int perf_evlist__add_syscall_newtp(struct perf_evlist *evlist,
void *sys_exit_handler)
{
int ret = -1;
int idx = evlist->nr_entries;
struct perf_evsel *sys_enter, *sys_exit;

sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler, idx++);
sys_enter = perf_evsel__syscall_newtp("sys_enter", sys_enter_handler);
if (sys_enter == NULL)
goto out;

if (perf_evsel__init_sc_tp_ptr_field(sys_enter, args))
goto out_delete_sys_enter;

sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler, idx++);
sys_exit = perf_evsel__syscall_newtp("sys_exit", sys_exit_handler);
if (sys_exit == NULL)
goto out_delete_sys_enter;

Expand Down Expand Up @@ -1824,8 +1822,7 @@ static size_t trace__fprintf_thread_summary(struct trace *trace, FILE *fp);

static void perf_evlist__add_vfs_getname(struct perf_evlist *evlist)
{
struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname",
evlist->nr_entries);
struct perf_evsel *evsel = perf_evsel__newtp("probe", "vfs_getname");
if (evsel == NULL)
return;

Expand Down
4 changes: 2 additions & 2 deletions tools/perf/tests/evsel-tp-sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name,

int test__perf_evsel__tp_sched_test(void)
{
struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch", 0);
struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch");
int ret = 0;

if (evsel == NULL) {
Expand Down Expand Up @@ -63,7 +63,7 @@ int test__perf_evsel__tp_sched_test(void)

perf_evsel__delete(evsel);

evsel = perf_evsel__newtp("sched", "sched_wakeup", 0);
evsel = perf_evsel__newtp("sched", "sched_wakeup");

if (perf_evsel__test_field(evsel, "comm", 16, true))
ret = -1;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/tests/mmap-basic.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ int test__basic_mmap(void)
char name[64];

snprintf(name, sizeof(name), "sys_enter_%s", syscall_names[i]);
evsels[i] = perf_evsel__newtp("syscalls", name, i);
evsels[i] = perf_evsel__newtp("syscalls", name);
if (evsels[i] == NULL) {
pr_debug("perf_evsel__new\n");
goto out_free_evlist;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/tests/open-syscall-all-cpus.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int test__open_syscall_event_on_all_cpus(void)

CPU_ZERO(&cpu_set);

evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
if (evsel == NULL) {
pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
goto out_thread_map_delete;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/tests/open-syscall-tp-fields.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ int test__syscall_open_tp_fields(void)
goto out;
}

evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
if (evsel == NULL) {
pr_debug("%s: perf_evsel__newtp\n", __func__);
goto out_delete_evlist;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/tests/open-syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ int test__open_syscall_event(void)
return -1;
}

evsel = perf_evsel__newtp("syscalls", "sys_enter_open", 0);
evsel = perf_evsel__newtp("syscalls", "sys_enter_open");
if (evsel == NULL) {
pr_debug("is debugfs mounted on /sys/kernel/debug?\n");
goto out_thread_map_delete;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/tests/sw-clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
return -1;
}

evsel = perf_evsel__new(&attr, 0);
evsel = perf_evsel__new(&attr);
if (evsel == NULL) {
pr_debug("perf_evsel__new\n");
goto out_free_evlist;
Expand Down
9 changes: 5 additions & 4 deletions tools/perf/util/evlist.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ void perf_evlist__delete(struct perf_evlist *evlist)
void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
{
list_add_tail(&entry->node, &evlist->entries);
entry->idx = evlist->nr_entries;

if (!evlist->nr_entries++)
perf_evlist__set_id_pos(evlist);
}
Expand Down Expand Up @@ -165,7 +167,7 @@ int perf_evlist__add_default(struct perf_evlist *evlist)

event_attr_init(&attr);

evsel = perf_evsel__new(&attr, 0);
evsel = perf_evsel__new(&attr);
if (evsel == NULL)
goto error;

Expand All @@ -190,7 +192,7 @@ static int perf_evlist__add_attrs(struct perf_evlist *evlist,
size_t i;

for (i = 0; i < nr_attrs; i++) {
evsel = perf_evsel__new(attrs + i, evlist->nr_entries + i);
evsel = perf_evsel__new_idx(attrs + i, evlist->nr_entries + i);
if (evsel == NULL)
goto out_delete_partial_list;
list_add_tail(&evsel->node, &head);
Expand Down Expand Up @@ -249,9 +251,8 @@ perf_evlist__find_tracepoint_by_name(struct perf_evlist *evlist,
int perf_evlist__add_newtp(struct perf_evlist *evlist,
const char *sys, const char *name, void *handler)
{
struct perf_evsel *evsel;
struct perf_evsel *evsel = perf_evsel__newtp(sys, name);

evsel = perf_evsel__newtp(sys, name, evlist->nr_entries);
if (evsel == NULL)
return -1;

Expand Down
4 changes: 2 additions & 2 deletions tools/perf/util/evsel.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ void perf_evsel__init(struct perf_evsel *evsel,
perf_evsel__calc_id_pos(evsel);
}

struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx)
struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx)
{
struct perf_evsel *evsel = zalloc(sizeof(*evsel));

Expand Down Expand Up @@ -219,7 +219,7 @@ struct event_format *event_format__new(const char *sys, const char *name)
return format;
}

struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx)
struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx)
{
struct perf_evsel *evsel = zalloc(sizeof(*evsel));

Expand Down
15 changes: 13 additions & 2 deletions tools/perf/util/evsel.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,19 @@ struct thread_map;
struct perf_evlist;
struct perf_record_opts;

struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx);
struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name, int idx);
struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx);

static inline struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr)
{
return perf_evsel__new_idx(attr, 0);
}

struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int idx);

static inline struct perf_evsel *perf_evsel__newtp(const char *sys, const char *name)
{
return perf_evsel__newtp_idx(sys, name, 0);
}

struct event_format *event_format__new(const char *sys, const char *name);

Expand Down
4 changes: 2 additions & 2 deletions tools/perf/util/header.c
Original file line number Diff line number Diff line change
Expand Up @@ -2797,7 +2797,7 @@ int perf_session__read_header(struct perf_session *session)
perf_event__attr_swap(&f_attr.attr);

tmp = lseek(fd, 0, SEEK_CUR);
evsel = perf_evsel__new(&f_attr.attr, i);
evsel = perf_evsel__new(&f_attr.attr);

if (evsel == NULL)
goto out_delete_evlist;
Expand Down Expand Up @@ -2916,7 +2916,7 @@ int perf_event__process_attr(struct perf_tool *tool __maybe_unused,
return -ENOMEM;
}

evsel = perf_evsel__new(&event->attr.attr, evlist->nr_entries);
evsel = perf_evsel__new(&event->attr.attr);
if (evsel == NULL)
return -ENOMEM;

Expand Down
6 changes: 3 additions & 3 deletions tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ static int __add_event(struct list_head *list, int *idx,

event_attr_init(attr);

evsel = perf_evsel__new(attr, (*idx)++);
evsel = perf_evsel__new_idx(attr, (*idx)++);
if (!evsel)
return -ENOMEM;

Expand Down Expand Up @@ -378,7 +378,7 @@ static int add_tracepoint(struct list_head *list, int *idx,
{
struct perf_evsel *evsel;

evsel = perf_evsel__newtp(sys_name, evt_name, (*idx)++);
evsel = perf_evsel__newtp_idx(sys_name, evt_name, (*idx)++);
if (!evsel)
return -ENOMEM;

Expand Down Expand Up @@ -1097,7 +1097,7 @@ static bool is_event_supported(u8 type, unsigned config)
.threads = { 0 },
};

evsel = perf_evsel__new(&attr, 0);
evsel = perf_evsel__new(&attr);
if (evsel) {
ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
perf_evsel__delete(evsel);
Expand Down

0 comments on commit ef50383

Please sign in to comment.