mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
perf evlist: Always do automatic allocation of pollfd and mmap structures
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>
This commit is contained in:
parent
ee29be625b
commit
806fb63007
5 changed files with 7 additions and 27 deletions
|
@ -778,16 +778,10 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
|
||||||
usage_with_options(record_usage, record_options);
|
usage_with_options(record_usage, record_options);
|
||||||
|
|
||||||
list_for_each_entry(pos, &evsel_list->entries, node) {
|
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)))
|
if (perf_header__push_event(pos->attr.config, event_name(pos)))
|
||||||
goto out_free_fd;
|
goto out_free_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perf_evlist__alloc_pollfd(evsel_list) < 0)
|
|
||||||
goto out_free_fd;
|
|
||||||
|
|
||||||
if (rec->opts.user_interval != ULLONG_MAX)
|
if (rec->opts.user_interval != ULLONG_MAX)
|
||||||
rec->opts.default_interval = rec->opts.user_interval;
|
rec->opts.default_interval = rec->opts.user_interval;
|
||||||
if (rec->opts.user_freq != UINT_MAX)
|
if (rec->opts.user_freq != UINT_MAX)
|
||||||
|
|
|
@ -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) {
|
list_for_each_entry(pos, &evsel_list->entries, node) {
|
||||||
if (perf_evsel__alloc_stat_priv(pos) < 0 ||
|
if (perf_evsel__alloc_stat_priv(pos) < 0 ||
|
||||||
perf_evsel__alloc_counts(pos, evsel_list->cpus->nr) < 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)
|
|
||||||
goto out_free_fd;
|
goto out_free_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1034,9 +1034,7 @@ parse_callchain_opt(const struct option *opt, const char *arg, int unset)
|
||||||
symbol_conf.use_callchain = false;
|
symbol_conf.use_callchain = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
} else
|
||||||
|
|
||||||
else
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* get the min percentage */
|
/* get the min percentage */
|
||||||
|
@ -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) {
|
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:
|
* Fill in the ones not specifically initialized via -c:
|
||||||
*/
|
*/
|
||||||
if (pos->attr.sample_period)
|
if (!pos->attr.sample_period)
|
||||||
continue;
|
|
||||||
|
|
||||||
pos->attr.sample_period = top.default_interval;
|
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);
|
top.sym_evsel = list_entry(top.evlist->entries.next, struct perf_evsel, node);
|
||||||
|
|
||||||
symbol_conf.priv_size = sizeof(struct annotation);
|
symbol_conf.priv_size = sizeof(struct annotation);
|
||||||
|
@ -1270,7 +1259,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
|
||||||
}
|
}
|
||||||
|
|
||||||
status = __cmd_top(&top);
|
status = __cmd_top(&top);
|
||||||
out_free_fd:
|
|
||||||
perf_evlist__delete(top.evlist);
|
perf_evlist__delete(top.evlist);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
|
|
@ -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;
|
int nfds = evlist->cpus->nr * evlist->threads->nr * evlist->nr_entries;
|
||||||
evlist->pollfd = malloc(sizeof(struct pollfd) * nfds);
|
evlist->pollfd = malloc(sizeof(struct pollfd) * nfds);
|
||||||
|
@ -431,7 +431,7 @@ void perf_evlist__munmap(struct perf_evlist *evlist)
|
||||||
evlist->mmap = NULL;
|
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;
|
evlist->nr_mmaps = evlist->cpus->nr;
|
||||||
if (evlist->cpus->map[0] == -1)
|
if (evlist->cpus->map[0] == -1)
|
||||||
|
|
|
@ -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,
|
void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel,
|
||||||
int cpu, int thread, u64 id);
|
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);
|
void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd);
|
||||||
|
|
||||||
struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id);
|
struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id);
|
||||||
|
@ -89,7 +88,6 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist,
|
||||||
const char *argv[]);
|
const char *argv[]);
|
||||||
int perf_evlist__start_workload(struct perf_evlist *evlist);
|
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,
|
int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
|
||||||
bool overwrite);
|
bool overwrite);
|
||||||
void perf_evlist__munmap(struct perf_evlist *evlist);
|
void perf_evlist__munmap(struct perf_evlist *evlist);
|
||||||
|
|
Loading…
Reference in a new issue