Skip to content

Commit

Permalink
perf evlist: Always do automatic allocation of pollfd and mmap struct…
Browse files Browse the repository at this point in the history
…ures

At first tools were required to do that, but while writing the python
bindings to simplify the API I made them auto-allocate when needed.

This just makes record, stat and top use that auto allocation,
simplifying them a bit.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-iokhcvkzzijr3keioubx8hlq@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Nov 29, 2011
1 parent ee29be6 commit 806fb63
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 27 deletions.
6 changes: 0 additions & 6 deletions tools/perf/builtin-record.c
Original file line number Diff line number Diff line change
Expand Up @@ -778,16 +778,10 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
usage_with_options(record_usage, record_options);

list_for_each_entry(pos, &evsel_list->entries, node) {
if (perf_evsel__alloc_fd(pos, evsel_list->cpus->nr,
evsel_list->threads->nr) < 0)
goto out_free_fd;
if (perf_header__push_event(pos->attr.config, event_name(pos)))
goto out_free_fd;
}

if (perf_evlist__alloc_pollfd(evsel_list) < 0)
goto out_free_fd;

if (rec->opts.user_interval != ULLONG_MAX)
rec->opts.default_interval = rec->opts.user_interval;
if (rec->opts.user_freq != UINT_MAX)
Expand Down
3 changes: 1 addition & 2 deletions tools/perf/builtin-stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -1240,8 +1240,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)

list_for_each_entry(pos, &evsel_list->entries, node) {
if (perf_evsel__alloc_stat_priv(pos) < 0 ||
perf_evsel__alloc_counts(pos, evsel_list->cpus->nr) < 0 ||
perf_evsel__alloc_fd(pos, evsel_list->cpus->nr, evsel_list->threads->nr) < 0)
perf_evsel__alloc_counts(pos, evsel_list->cpus->nr) < 0)
goto out_free_fd;
}

Expand Down
19 changes: 4 additions & 15 deletions tools/perf/builtin-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -1034,9 +1034,7 @@ parse_callchain_opt(const struct option *opt, const char *arg, int unset)
symbol_conf.use_callchain = false;

return 0;
}

else
} else
return -1;

/* get the min percentage */
Expand Down Expand Up @@ -1225,22 +1223,13 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
}

list_for_each_entry(pos, &top.evlist->entries, node) {
if (perf_evsel__alloc_fd(pos, top.evlist->cpus->nr,
top.evlist->threads->nr) < 0)
goto out_free_fd;
/*
* Fill in the ones not specifically initialized via -c:
*/
if (pos->attr.sample_period)
continue;

pos->attr.sample_period = top.default_interval;
if (!pos->attr.sample_period)
pos->attr.sample_period = top.default_interval;
}

if (perf_evlist__alloc_pollfd(top.evlist) < 0 ||
perf_evlist__alloc_mmap(top.evlist) < 0)
goto out_free_fd;

top.sym_evsel = list_entry(top.evlist->entries.next, struct perf_evsel, node);

symbol_conf.priv_size = sizeof(struct annotation);
Expand Down Expand Up @@ -1270,7 +1259,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
}

status = __cmd_top(&top);
out_free_fd:

perf_evlist__delete(top.evlist);

return status;
Expand Down
4 changes: 2 additions & 2 deletions tools/perf/util/evlist.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ void perf_evlist__enable(struct perf_evlist *evlist)
}
}

int perf_evlist__alloc_pollfd(struct perf_evlist *evlist)
static int perf_evlist__alloc_pollfd(struct perf_evlist *evlist)
{
int nfds = evlist->cpus->nr * evlist->threads->nr * evlist->nr_entries;
evlist->pollfd = malloc(sizeof(struct pollfd) * nfds);
Expand Down Expand Up @@ -431,7 +431,7 @@ void perf_evlist__munmap(struct perf_evlist *evlist)
evlist->mmap = NULL;
}

int perf_evlist__alloc_mmap(struct perf_evlist *evlist)
static int perf_evlist__alloc_mmap(struct perf_evlist *evlist)
{
evlist->nr_mmaps = evlist->cpus->nr;
if (evlist->cpus->map[0] == -1)
Expand Down
2 changes: 0 additions & 2 deletions tools/perf/util/evlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist,
void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel,
int cpu, int thread, u64 id);

int perf_evlist__alloc_pollfd(struct perf_evlist *evlist);
void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd);

struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id);
Expand All @@ -89,7 +88,6 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist,
const char *argv[]);
int perf_evlist__start_workload(struct perf_evlist *evlist);

int perf_evlist__alloc_mmap(struct perf_evlist *evlist);
int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
bool overwrite);
void perf_evlist__munmap(struct perf_evlist *evlist);
Expand Down

0 comments on commit 806fb63

Please sign in to comment.