When numa for perf bench is compiled will have core dump.

| #./perf bench numa all
| # Running numa/mem benchmark...
|
| Segmentation fault (core dumped)
| # ./perf bench all
| # Running numa/mem benchmark...
|
| Segmentation fault (core dumped)

Fix it by adding own handler for numa bench. all_suite()
will search and find handler call it first, if can not
find it, will fallback the old way.

Also fix argv setting in that function, we should use [0]
as argc is 1.

Signed-off-by: Yinghai Lu <ying...@kernel.org>

---
 tools/perf/bench/bench.h   |    1 +
 tools/perf/bench/numa.c    |    5 +++--
 tools/perf/builtin-bench.c |   19 +++++++++++++++++--
 3 files changed, 21 insertions(+), 4 deletions(-)

Index: linux-2.6/tools/perf/bench/bench.h
===================================================================
--- linux-2.6.orig/tools/perf/bench/bench.h
+++ linux-2.6/tools/perf/bench/bench.h
@@ -26,6 +26,7 @@
 #endif
 
 extern int bench_numa(int argc, const char **argv, const char *prefix);
+int bench_numa_all(int argc, const char **argv, const char *prefix);
 extern int bench_sched_messaging(int argc, const char **argv, const char 
*prefix);
 extern int bench_sched_pipe(int argc, const char **argv, const char *prefix);
 extern int bench_mem_memcpy(int argc, const char **argv,
Index: linux-2.6/tools/perf/bench/numa.c
===================================================================
--- linux-2.6.orig/tools/perf/bench/numa.c
+++ linux-2.6/tools/perf/bench/numa.c
@@ -1691,7 +1691,8 @@ static const char *tests[][MAX_ARGS] = {
                          "mem",  "-p",  "2", "-t", "16", "-T",  "192", 
OPT_BW_NOTHP },
 };
 
-static int bench_all(void)
+int bench_numa_all(int argc __maybe_unused, const char **argv __maybe_unused,
+                        const char *prefix __maybe_unused)
 {
        int nr = ARRAY_SIZE(tests);
        int ret;
@@ -1718,7 +1719,7 @@ int bench_numa(int argc, const char **ar
                goto err;
 
        if (p0.run_all)
-               return bench_all();
+               return bench_numa_all(argc, argv, prefix);
 
        if (__bench_numa(NULL))
                goto err;
Index: linux-2.6/tools/perf/builtin-bench.c
===================================================================
--- linux-2.6.orig/tools/perf/builtin-bench.c
+++ linux-2.6/tools/perf/builtin-bench.c
@@ -40,7 +40,7 @@ static struct bench_suite numa_suites[]
        { "mem",
          "Benchmark for NUMA workloads",
          bench_numa },
-       suite_all,
+       { "all", "Test all benchmark suites", bench_numa_all },
        { NULL,
          NULL,
          NULL                  }
@@ -166,6 +166,21 @@ static void all_suite(struct bench_subsy
        struct bench_suite *suites = subsys->suites;
 
        argv[1] = NULL;
+
+       /* own all handling ? */
+       for (i = 0; suites[i].fn; i++) {
+               if (!strcmp("all", suites[i].name)) {
+                       printf("# Running %s/%s benchmark...\n",
+                              subsys->name,
+                              suites[i].name);
+                       fflush(stdout);
+
+                       argv[0] = suites[i].name;
+                       suites[i].fn(1, argv, NULL);
+                       return;
+               }
+       }
+
        /*
         * TODO:
         * preparing preset parameters for
@@ -178,7 +193,7 @@ static void all_suite(struct bench_subsy
                       suites[i].name);
                fflush(stdout);
 
-               argv[1] = suites[i].name;
+               argv[0] = suites[i].name;
                suites[i].fn(1, argv, NULL);
                printf("\n");
        }
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to