perf target: Consolidate target task/cpu checking
There are places that check whether target task/cpu is given or not and some of them didn't check newly introduced uid or cpu list. Add and use three of helper functions to treat them properly. Signed-off-by: Namhyung Kim <namhyung.kim@lge.com> Reviewed-by: David Ahern <dsahern@gmail.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1336367344-28071-7-git-send-email-namhyung.kim@lge.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
16ad2ffb82
commit
d67356e7f8
|
@ -843,9 +843,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
|
||||||
|
|
||||||
argc = parse_options(argc, argv, record_options, record_usage,
|
argc = parse_options(argc, argv, record_options, record_usage,
|
||||||
PARSE_OPT_STOP_AT_NON_OPTION);
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||||
if (!argc && !rec->opts.target.pid && !rec->opts.target.tid &&
|
if (!argc && perf_target__none(&rec->opts.target))
|
||||||
!rec->opts.target.system_wide && !rec->opts.target.cpu_list &&
|
|
||||||
!rec->opts.target.uid_str)
|
|
||||||
usage_with_options(record_usage, record_options);
|
usage_with_options(record_usage, record_options);
|
||||||
|
|
||||||
if (rec->force && rec->append_file) {
|
if (rec->force && rec->append_file) {
|
||||||
|
|
|
@ -290,10 +290,10 @@ static int create_perf_stat_counter(struct perf_evsel *evsel,
|
||||||
|
|
||||||
attr->inherit = !no_inherit;
|
attr->inherit = !no_inherit;
|
||||||
|
|
||||||
if (target.system_wide)
|
if (!perf_target__no_cpu(&target))
|
||||||
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus,
|
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus,
|
||||||
group, group_fd);
|
group, group_fd);
|
||||||
if (!target.pid && !target.tid && (!group || evsel == first)) {
|
if (perf_target__no_task(&target) && (!group || evsel == first)) {
|
||||||
attr->disabled = 1;
|
attr->disabled = 1;
|
||||||
attr->enable_on_exec = 1;
|
attr->enable_on_exec = 1;
|
||||||
}
|
}
|
||||||
|
@ -443,7 +443,7 @@ static int run_perf_stat(int argc __used, const char **argv)
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!target.tid && !target.pid && !target.system_wide)
|
if (perf_target__none(&target))
|
||||||
evsel_list->threads->map[0] = child_pid;
|
evsel_list->threads->map[0] = child_pid;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -965,7 +965,7 @@ static void print_stat(int argc, const char **argv)
|
||||||
if (!csv_output) {
|
if (!csv_output) {
|
||||||
fprintf(output, "\n");
|
fprintf(output, "\n");
|
||||||
fprintf(output, " Performance counter stats for ");
|
fprintf(output, " Performance counter stats for ");
|
||||||
if (!target.pid && !target.tid) {
|
if (perf_target__no_task(&target)) {
|
||||||
fprintf(output, "\'%s", argv[0]);
|
fprintf(output, "\'%s", argv[0]);
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
fprintf(output, " %s", argv[i]);
|
fprintf(output, " %s", argv[i]);
|
||||||
|
@ -1187,13 +1187,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
|
||||||
} else if (big_num_opt == 0) /* User passed --no-big-num */
|
} else if (big_num_opt == 0) /* User passed --no-big-num */
|
||||||
big_num = false;
|
big_num = false;
|
||||||
|
|
||||||
if (!argc && !target.pid && !target.tid)
|
if (!argc && perf_target__no_task(&target))
|
||||||
usage_with_options(stat_usage, options);
|
usage_with_options(stat_usage, options);
|
||||||
if (run_count <= 0)
|
if (run_count <= 0)
|
||||||
usage_with_options(stat_usage, options);
|
usage_with_options(stat_usage, options);
|
||||||
|
|
||||||
/* no_aggr, cgroup are for system-wide only */
|
/* no_aggr, cgroup are for system-wide only */
|
||||||
if ((no_aggr || nr_cgroups) && !target.system_wide) {
|
if ((no_aggr || nr_cgroups) && perf_target__no_cpu(&target)) {
|
||||||
fprintf(stderr, "both cgroup and no-aggregation "
|
fprintf(stderr, "both cgroup and no-aggregation "
|
||||||
"modes only available in system-wide mode\n");
|
"modes only available in system-wide mode\n");
|
||||||
|
|
||||||
|
|
|
@ -1016,7 +1016,7 @@ static int __cmd_top(struct perf_top *top)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_delete;
|
goto out_delete;
|
||||||
|
|
||||||
if (top->target.tid || top->target.uid != UINT_MAX)
|
if (!perf_target__no_task(&top->target))
|
||||||
perf_event__synthesize_thread_map(&top->tool, top->evlist->threads,
|
perf_event__synthesize_thread_map(&top->tool, top->evlist->threads,
|
||||||
perf_event__process,
|
perf_event__process,
|
||||||
&top->session->host_machine);
|
&top->session->host_machine);
|
||||||
|
|
|
@ -609,12 +609,10 @@ int perf_evlist__create_maps(struct perf_evlist *evlist,
|
||||||
if (evlist->threads == NULL)
|
if (evlist->threads == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (target->uid != UINT_MAX || target->tid)
|
if (!perf_target__no_cpu(target))
|
||||||
evlist->cpus = cpu_map__dummy_new();
|
|
||||||
else if (!target->system_wide && target->cpu_list == NULL)
|
|
||||||
evlist->cpus = cpu_map__dummy_new();
|
|
||||||
else
|
|
||||||
evlist->cpus = cpu_map__new(target->cpu_list);
|
evlist->cpus = cpu_map__new(target->cpu_list);
|
||||||
|
else
|
||||||
|
evlist->cpus = cpu_map__dummy_new();
|
||||||
|
|
||||||
if (evlist->cpus == NULL)
|
if (evlist->cpus == NULL)
|
||||||
goto out_delete_threads;
|
goto out_delete_threads;
|
||||||
|
@ -831,7 +829,7 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist,
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!opts->target.system_wide && !opts->target.tid && !opts->target.pid)
|
if (perf_target__none(&opts->target))
|
||||||
evlist->threads->map[0] = evlist->workload.pid;
|
evlist->threads->map[0] = evlist->workload.pid;
|
||||||
|
|
||||||
close(child_ready_pipe[1]);
|
close(child_ready_pipe[1]);
|
||||||
|
|
|
@ -114,8 +114,8 @@ void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts,
|
||||||
attr->sample_type |= PERF_SAMPLE_PERIOD;
|
attr->sample_type |= PERF_SAMPLE_PERIOD;
|
||||||
|
|
||||||
if (!opts->sample_id_all_missing &&
|
if (!opts->sample_id_all_missing &&
|
||||||
(opts->sample_time || opts->target.system_wide ||
|
(opts->sample_time || !opts->no_inherit ||
|
||||||
!opts->no_inherit || opts->target.cpu_list))
|
!perf_target__no_cpu(&opts->target)))
|
||||||
attr->sample_type |= PERF_SAMPLE_TIME;
|
attr->sample_type |= PERF_SAMPLE_TIME;
|
||||||
|
|
||||||
if (opts->raw_samples) {
|
if (opts->raw_samples) {
|
||||||
|
@ -136,8 +136,8 @@ void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts,
|
||||||
attr->mmap = track;
|
attr->mmap = track;
|
||||||
attr->comm = track;
|
attr->comm = track;
|
||||||
|
|
||||||
if (!opts->target.pid && !opts->target.tid &&
|
if (perf_target__none(&opts->target) &&
|
||||||
!opts->target.system_wide && (!opts->group || evsel == first)) {
|
(!opts->group || evsel == first)) {
|
||||||
attr->disabled = 1;
|
attr->disabled = 1;
|
||||||
attr->enable_on_exec = 1;
|
attr->enable_on_exec = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,4 +46,19 @@ enum perf_target_errno perf_target__parse_uid(struct perf_target *target);
|
||||||
int perf_target__strerror(struct perf_target *target, int errnum, char *buf,
|
int perf_target__strerror(struct perf_target *target, int errnum, char *buf,
|
||||||
size_t buflen);
|
size_t buflen);
|
||||||
|
|
||||||
|
static inline bool perf_target__no_task(struct perf_target *target)
|
||||||
|
{
|
||||||
|
return !target->pid && !target->tid && !target->uid_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool perf_target__no_cpu(struct perf_target *target)
|
||||||
|
{
|
||||||
|
return !target->system_wide && !target->cpu_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool perf_target__none(struct perf_target *target)
|
||||||
|
{
|
||||||
|
return perf_target__no_task(target) && perf_target__no_cpu(target);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _PERF_TARGET_H */
|
#endif /* _PERF_TARGET_H */
|
||||||
|
|
Loading…
Reference in New Issue