perf target: Consolidate target task/cpu checking
authorNamhyung Kim <namhyung.kim@lge.com>
Mon, 7 May 2012 05:09:03 +0000 (14:09 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 7 May 2012 20:52:05 +0000 (17:52 -0300)
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>
tools/perf/builtin-record.c
tools/perf/builtin-stat.c
tools/perf/builtin-top.c
tools/perf/util/evlist.c
tools/perf/util/evsel.c
tools/perf/util/target.h

index c8bf6ea000da53826385889291e9d38694a53b4c..42e24149c79198554f718b3570c78051d8f9238c 100644 (file)
@@ -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,
                            PARSE_OPT_STOP_AT_NON_OPTION);
-       if (!argc && !rec->opts.target.pid && !rec->opts.target.tid &&
-           !rec->opts.target.system_wide && !rec->opts.target.cpu_list &&
-           !rec->opts.target.uid_str)
+       if (!argc && perf_target__none(&rec->opts.target))
                usage_with_options(record_usage, record_options);
 
        if (rec->force && rec->append_file) {
index bb7723221c0d75c7fe34a90272a52c38f1b56837..d9ff24637eebffa91c0acd7b3ef0b2f50c96065a 100644 (file)
@@ -290,10 +290,10 @@ static int create_perf_stat_counter(struct perf_evsel *evsel,
 
        attr->inherit = !no_inherit;
 
-       if (target.system_wide)
+       if (!perf_target__no_cpu(&target))
                return perf_evsel__open_per_cpu(evsel, evsel_list->cpus,
                                                group, group_fd);
-       if (!target.pid && !target.tid && (!group || evsel == first)) {
+       if (perf_target__no_task(&target) && (!group || evsel == first)) {
                attr->disabled = 1;
                attr->enable_on_exec = 1;
        }
@@ -443,7 +443,7 @@ static int run_perf_stat(int argc __used, const char **argv)
                        exit(-1);
                }
 
-               if (!target.tid && !target.pid && !target.system_wide)
+               if (perf_target__none(&target))
                        evsel_list->threads->map[0] = child_pid;
 
                /*
@@ -965,7 +965,7 @@ static void print_stat(int argc, const char **argv)
        if (!csv_output) {
                fprintf(output, "\n");
                fprintf(output, " Performance counter stats for ");
-               if (!target.pid && !target.tid) {
+               if (perf_target__no_task(&target)) {
                        fprintf(output, "\'%s", argv[0]);
                        for (i = 1; i < argc; 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 */
                big_num = false;
 
-       if (!argc && !target.pid && !target.tid)
+       if (!argc && perf_target__no_task(&target))
                usage_with_options(stat_usage, options);
        if (run_count <= 0)
                usage_with_options(stat_usage, options);
 
        /* 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 "
                        "modes only available in system-wide mode\n");
 
index 7ba0f03c01322187225e893403feeba28f540b43..e4ca827f687916064eb1559cd526043ea16b1537 100644 (file)
@@ -1016,7 +1016,7 @@ static int __cmd_top(struct perf_top *top)
        if (ret)
                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__process,
                                                  &top->session->host_machine);
index 183b199b0d0952e7256fb85db02e35b3ae408711..1201daf717194a9740cd65c06008a3c90aa3e6e1 100644 (file)
@@ -609,12 +609,10 @@ int perf_evlist__create_maps(struct perf_evlist *evlist,
        if (evlist->threads == NULL)
                return -1;
 
-       if (target->uid != UINT_MAX || target->tid)
-               evlist->cpus = cpu_map__dummy_new();
-       else if (!target->system_wide && target->cpu_list == NULL)
-               evlist->cpus = cpu_map__dummy_new();
-       else
+       if (!perf_target__no_cpu(target))
                evlist->cpus = cpu_map__new(target->cpu_list);
+       else
+               evlist->cpus = cpu_map__dummy_new();
 
        if (evlist->cpus == NULL)
                goto out_delete_threads;
@@ -831,7 +829,7 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist,
                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;
 
        close(child_ready_pipe[1]);
index bb785a098cedc9ed5b7b06bdc65c9d9606ecc769..21eaab2403965193b10e305c903205861c7b1c1e 100644 (file)
@@ -114,8 +114,8 @@ void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts,
                attr->sample_type       |= PERF_SAMPLE_PERIOD;
 
        if (!opts->sample_id_all_missing &&
-           (opts->sample_time || opts->target.system_wide ||
-            !opts->no_inherit || opts->target.cpu_list))
+           (opts->sample_time || !opts->no_inherit ||
+            !perf_target__no_cpu(&opts->target)))
                attr->sample_type       |= PERF_SAMPLE_TIME;
 
        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->comm = track;
 
-       if (!opts->target.pid && !opts->target.tid &&
-           !opts->target.system_wide && (!opts->group || evsel == first)) {
+       if (perf_target__none(&opts->target) &&
+           (!opts->group || evsel == first)) {
                attr->disabled = 1;
                attr->enable_on_exec = 1;
        }
index 6fcd01c440a97abdde030a37497f964d119c7750..127cff3f8cede431bbb1e5c37dc20bde44ae8e61 100644 (file)
@@ -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,
                          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 */