diff options
Diffstat (limited to 'tools/perf/bench/numa.c')
-rw-r--r-- | tools/perf/bench/numa.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c index 30d1c3225b46..d4c83c60b9b2 100644 --- a/tools/perf/bench/numa.c +++ b/tools/perf/bench/numa.c | |||
@@ -429,14 +429,14 @@ static int parse_cpu_list(const char *arg) | |||
429 | return 0; | 429 | return 0; |
430 | } | 430 | } |
431 | 431 | ||
432 | static void parse_setup_cpu_list(void) | 432 | static int parse_setup_cpu_list(void) |
433 | { | 433 | { |
434 | struct thread_data *td; | 434 | struct thread_data *td; |
435 | char *str0, *str; | 435 | char *str0, *str; |
436 | int t; | 436 | int t; |
437 | 437 | ||
438 | if (!g->p.cpu_list_str) | 438 | if (!g->p.cpu_list_str) |
439 | return; | 439 | return 0; |
440 | 440 | ||
441 | dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); | 441 | dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); |
442 | 442 | ||
@@ -500,8 +500,12 @@ static void parse_setup_cpu_list(void) | |||
500 | 500 | ||
501 | dprintf("CPUs: %d_%d-%d#%dx%d\n", bind_cpu_0, bind_len, bind_cpu_1, step, mul); | 501 | dprintf("CPUs: %d_%d-%d#%dx%d\n", bind_cpu_0, bind_len, bind_cpu_1, step, mul); |
502 | 502 | ||
503 | BUG_ON(bind_cpu_0 < 0 || bind_cpu_0 >= g->p.nr_cpus); | 503 | if (bind_cpu_0 >= g->p.nr_cpus || bind_cpu_1 >= g->p.nr_cpus) { |
504 | BUG_ON(bind_cpu_1 < 0 || bind_cpu_1 >= g->p.nr_cpus); | 504 | printf("\nTest not applicable, system has only %d CPUs.\n", g->p.nr_cpus); |
505 | return -1; | ||
506 | } | ||
507 | |||
508 | BUG_ON(bind_cpu_0 < 0 || bind_cpu_1 < 0); | ||
505 | BUG_ON(bind_cpu_0 > bind_cpu_1); | 509 | BUG_ON(bind_cpu_0 > bind_cpu_1); |
506 | 510 | ||
507 | for (bind_cpu = bind_cpu_0; bind_cpu <= bind_cpu_1; bind_cpu += step) { | 511 | for (bind_cpu = bind_cpu_0; bind_cpu <= bind_cpu_1; bind_cpu += step) { |
@@ -541,6 +545,7 @@ out: | |||
541 | printf("# NOTE: %d tasks bound, %d tasks unbound\n", t, g->p.nr_tasks - t); | 545 | printf("# NOTE: %d tasks bound, %d tasks unbound\n", t, g->p.nr_tasks - t); |
542 | 546 | ||
543 | free(str0); | 547 | free(str0); |
548 | return 0; | ||
544 | } | 549 | } |
545 | 550 | ||
546 | static int parse_cpus_opt(const struct option *opt __maybe_unused, | 551 | static int parse_cpus_opt(const struct option *opt __maybe_unused, |
@@ -561,14 +566,14 @@ static int parse_node_list(const char *arg) | |||
561 | return 0; | 566 | return 0; |
562 | } | 567 | } |
563 | 568 | ||
564 | static void parse_setup_node_list(void) | 569 | static int parse_setup_node_list(void) |
565 | { | 570 | { |
566 | struct thread_data *td; | 571 | struct thread_data *td; |
567 | char *str0, *str; | 572 | char *str0, *str; |
568 | int t; | 573 | int t; |
569 | 574 | ||
570 | if (!g->p.node_list_str) | 575 | if (!g->p.node_list_str) |
571 | return; | 576 | return 0; |
572 | 577 | ||
573 | dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); | 578 | dprintf("g->p.nr_tasks: %d\n", g->p.nr_tasks); |
574 | 579 | ||
@@ -619,8 +624,12 @@ static void parse_setup_node_list(void) | |||
619 | 624 | ||
620 | dprintf("NODEs: %d-%d #%d\n", bind_node_0, bind_node_1, step); | 625 | dprintf("NODEs: %d-%d #%d\n", bind_node_0, bind_node_1, step); |
621 | 626 | ||
622 | BUG_ON(bind_node_0 < 0 || bind_node_0 >= g->p.nr_nodes); | 627 | if (bind_node_0 >= g->p.nr_nodes || bind_node_1 >= g->p.nr_nodes) { |
623 | BUG_ON(bind_node_1 < 0 || bind_node_1 >= g->p.nr_nodes); | 628 | printf("\nTest not applicable, system has only %d nodes.\n", g->p.nr_nodes); |
629 | return -1; | ||
630 | } | ||
631 | |||
632 | BUG_ON(bind_node_0 < 0 || bind_node_1 < 0); | ||
624 | BUG_ON(bind_node_0 > bind_node_1); | 633 | BUG_ON(bind_node_0 > bind_node_1); |
625 | 634 | ||
626 | for (bind_node = bind_node_0; bind_node <= bind_node_1; bind_node += step) { | 635 | for (bind_node = bind_node_0; bind_node <= bind_node_1; bind_node += step) { |
@@ -651,6 +660,7 @@ out: | |||
651 | printf("# NOTE: %d tasks mem-bound, %d tasks unbound\n", t, g->p.nr_tasks - t); | 660 | printf("# NOTE: %d tasks mem-bound, %d tasks unbound\n", t, g->p.nr_tasks - t); |
652 | 661 | ||
653 | free(str0); | 662 | free(str0); |
663 | return 0; | ||
654 | } | 664 | } |
655 | 665 | ||
656 | static int parse_nodes_opt(const struct option *opt __maybe_unused, | 666 | static int parse_nodes_opt(const struct option *opt __maybe_unused, |
@@ -1110,7 +1120,7 @@ static void *worker_thread(void *__tdata) | |||
1110 | /* Check whether our max runtime timed out: */ | 1120 | /* Check whether our max runtime timed out: */ |
1111 | if (g->p.nr_secs) { | 1121 | if (g->p.nr_secs) { |
1112 | timersub(&stop, &start0, &diff); | 1122 | timersub(&stop, &start0, &diff); |
1113 | if (diff.tv_sec >= g->p.nr_secs) { | 1123 | if ((u32)diff.tv_sec >= g->p.nr_secs) { |
1114 | g->stop_work = true; | 1124 | g->stop_work = true; |
1115 | break; | 1125 | break; |
1116 | } | 1126 | } |
@@ -1157,7 +1167,7 @@ static void *worker_thread(void *__tdata) | |||
1157 | runtime_ns_max += diff.tv_usec * 1000; | 1167 | runtime_ns_max += diff.tv_usec * 1000; |
1158 | 1168 | ||
1159 | if (details >= 0) { | 1169 | if (details >= 0) { |
1160 | printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n", | 1170 | printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016"PRIx64"]\n", |
1161 | process_nr, thread_nr, runtime_ns_max / bytes_done, val); | 1171 | process_nr, thread_nr, runtime_ns_max / bytes_done, val); |
1162 | } | 1172 | } |
1163 | fflush(stdout); | 1173 | fflush(stdout); |
@@ -1356,8 +1366,8 @@ static int init(void) | |||
1356 | init_thread_data(); | 1366 | init_thread_data(); |
1357 | 1367 | ||
1358 | tprintf("#\n"); | 1368 | tprintf("#\n"); |
1359 | parse_setup_cpu_list(); | 1369 | if (parse_setup_cpu_list() || parse_setup_node_list()) |
1360 | parse_setup_node_list(); | 1370 | return -1; |
1361 | tprintf("#\n"); | 1371 | tprintf("#\n"); |
1362 | 1372 | ||
1363 | print_summary(); | 1373 | print_summary(); |
@@ -1600,7 +1610,6 @@ static int run_bench_numa(const char *name, const char **argv) | |||
1600 | return 0; | 1610 | return 0; |
1601 | 1611 | ||
1602 | err: | 1612 | err: |
1603 | usage_with_options(numa_usage, options); | ||
1604 | return -1; | 1613 | return -1; |
1605 | } | 1614 | } |
1606 | 1615 | ||
@@ -1701,8 +1710,7 @@ static int bench_all(void) | |||
1701 | BUG_ON(ret < 0); | 1710 | BUG_ON(ret < 0); |
1702 | 1711 | ||
1703 | for (i = 0; i < nr; i++) { | 1712 | for (i = 0; i < nr; i++) { |
1704 | if (run_bench_numa(tests[i][0], tests[i] + 1)) | 1713 | run_bench_numa(tests[i][0], tests[i] + 1); |
1705 | return -1; | ||
1706 | } | 1714 | } |
1707 | 1715 | ||
1708 | printf("\n"); | 1716 | printf("\n"); |