diff options
Diffstat (limited to 'tools/perf/builtin-stat.c')
| -rw-r--r-- | tools/perf/builtin-stat.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 9a39ca3c3ac4..a6b4d44f9502 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
| @@ -69,7 +69,7 @@ static struct perf_event_attr default_attrs[] = { | |||
| 69 | }; | 69 | }; |
| 70 | 70 | ||
| 71 | static bool system_wide = false; | 71 | static bool system_wide = false; |
| 72 | static unsigned int nr_cpus = 0; | 72 | static int nr_cpus = 0; |
| 73 | static int run_idx = 0; | 73 | static int run_idx = 0; |
| 74 | 74 | ||
| 75 | static int run_count = 1; | 75 | static int run_count = 1; |
| @@ -82,6 +82,7 @@ static int thread_num = 0; | |||
| 82 | static pid_t child_pid = -1; | 82 | static pid_t child_pid = -1; |
| 83 | static bool null_run = false; | 83 | static bool null_run = false; |
| 84 | static bool big_num = false; | 84 | static bool big_num = false; |
| 85 | static const char *cpu_list; | ||
| 85 | 86 | ||
| 86 | 87 | ||
| 87 | static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; | 88 | static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; |
| @@ -158,7 +159,7 @@ static int create_perf_stat_counter(int counter) | |||
| 158 | PERF_FORMAT_TOTAL_TIME_RUNNING; | 159 | PERF_FORMAT_TOTAL_TIME_RUNNING; |
| 159 | 160 | ||
| 160 | if (system_wide) { | 161 | if (system_wide) { |
| 161 | unsigned int cpu; | 162 | int cpu; |
| 162 | 163 | ||
| 163 | for (cpu = 0; cpu < nr_cpus; cpu++) { | 164 | for (cpu = 0; cpu < nr_cpus; cpu++) { |
| 164 | fd[cpu][counter][0] = sys_perf_event_open(attr, | 165 | fd[cpu][counter][0] = sys_perf_event_open(attr, |
| @@ -208,7 +209,7 @@ static inline int nsec_counter(int counter) | |||
| 208 | static void read_counter(int counter) | 209 | static void read_counter(int counter) |
| 209 | { | 210 | { |
| 210 | u64 count[3], single_count[3]; | 211 | u64 count[3], single_count[3]; |
| 211 | unsigned int cpu; | 212 | int cpu; |
| 212 | size_t res, nv; | 213 | size_t res, nv; |
| 213 | int scaled; | 214 | int scaled; |
| 214 | int i, thread; | 215 | int i, thread; |
| @@ -542,6 +543,8 @@ static const struct option options[] = { | |||
| 542 | "null run - dont start any counters"), | 543 | "null run - dont start any counters"), |
| 543 | OPT_BOOLEAN('B', "big-num", &big_num, | 544 | OPT_BOOLEAN('B', "big-num", &big_num, |
| 544 | "print large numbers with thousands\' separators"), | 545 | "print large numbers with thousands\' separators"), |
| 546 | OPT_STRING('C', "cpu", &cpu_list, "cpu", | ||
| 547 | "list of cpus to monitor in system-wide"), | ||
| 545 | OPT_END() | 548 | OPT_END() |
| 546 | }; | 549 | }; |
| 547 | 550 | ||
| @@ -566,10 +569,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) | |||
| 566 | } | 569 | } |
| 567 | 570 | ||
| 568 | if (system_wide) | 571 | if (system_wide) |
| 569 | nr_cpus = read_cpu_map(); | 572 | nr_cpus = read_cpu_map(cpu_list); |
| 570 | else | 573 | else |
| 571 | nr_cpus = 1; | 574 | nr_cpus = 1; |
| 572 | 575 | ||
| 576 | if (nr_cpus < 1) | ||
| 577 | usage_with_options(stat_usage, options); | ||
| 578 | |||
| 573 | if (target_pid != -1) { | 579 | if (target_pid != -1) { |
| 574 | target_tid = target_pid; | 580 | target_tid = target_pid; |
| 575 | thread_num = find_all_tid(target_pid, &all_tids); | 581 | thread_num = find_all_tid(target_pid, &all_tids); |
