Hi Namhyung and Arnaldo,

I changed my testing related patches in my local git tree. All
changed combined together is at the end of this mail. I remove
all stderr output, and improve debug message. Please have a look
at it.

Thank you.


diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c
index 5a6290a..453eff8 100644
--- a/tools/perf/tests/bpf.c
+++ b/tools/perf/tests/bpf.c
@@ -49,7 +49,7 @@ static struct bpf_object *prepare_bpf(const char *name, void *obj_buf,

     obj = bpf__prepare_load_buffer(obj_buf, obj_buf_sz, name);
     if (IS_ERR(obj)) {
-        fprintf(stderr, " (compile failed)");
+        pr_debug("Compile BPF program failed.\n");
         return NULL;
     }
     return obj;
@@ -82,7 +82,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void), int expect)

err = parse_events_load_bpf_obj(&parse_evlist, &parse_evlist.list, obj);
     if (err || list_empty(&parse_evlist.list)) {
-        fprintf(stderr, " (Failed to add events selected by BPF)");
+        pr_debug("Failed to add events selected by BPF\n");
         if (!err)
             err = -EINVAL;
         goto out;
@@ -140,7 +140,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void), int expect)
     }

     if (count != expect) {
- fprintf(stderr, " (filter result incorrect: %d != %d)", count, expect);
+        pr_debug("BPF filter result incorrect: %d != %d\n", count, expect);
         err = -EBADF;
     }

@@ -164,16 +164,14 @@ static int __test__bpf(int index, const char *name,

     test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz, index);
     if (!obj_buf || !obj_buf_sz) {
-        if (verbose == 0)
-            fprintf(stderr, " (%s)", message_compile);
+        pr_debug("Failed to compile: %s\n", message_compile);
         return TEST_SKIP;
     }

     obj = prepare_bpf(name, obj_buf, obj_buf_sz);
     if (!obj) {
         err = -EINVAL;
-        if ((verbose == 0) && (message_load[0] != '\0'))
-            fprintf(stderr, " (%s)", message_load);
+        pr_debug("Failed to load: %s", message_load);
         goto out;
     }

@@ -192,7 +190,7 @@ int test__bpf(void)
     int err;

     if (geteuid() != 0) {
-        fprintf(stderr, " (try run as root)");
+        pr_debug("Only root can run BPF test\n");
         return TEST_SKIP;
     }

@@ -214,7 +212,7 @@ int test__bpf(void)
               (NR_ITERS + 1) / 4);
     return err;
 #else
-    fprintf(stderr, " (skip BPF prologue test)");
+    pr_debug("BPF prologue is disabled when compiling, skip this test\n");
     return TEST_OK;
 #endif
 }
diff --git a/tools/perf/tests/llvm.c b/tools/perf/tests/llvm.c
index e722e8a..7c3b2c3 100644
--- a/tools/perf/tests/llvm.c
+++ b/tools/perf/tests/llvm.c
@@ -13,19 +13,23 @@
 struct llvm_testcase {
     const char *source;
     const char *errmsg;
+    const char *hintmsg;
     struct test_llvm__bpf_result *result;
     bool tried;
 } llvm_testcases[NR_LLVM_TESTCASES + 1] = {
     [LLVM_TESTCASE_BASE]    = {.source = test_llvm__bpf_prog,
                    .errmsg = "Basic LLVM compiling failed",
+ .hintmsg = "Check llvm.clang-path option in ~/.perfconfig",
                    .tried = false},
[LLVM_TESTCASE_KBUILD] = {.source = test_llvm__bpf_test_kbuild_prog,
-                   .errmsg = "llvm.kbuild-dir can be fixed",
+                   .errmsg = "Unable to find usable kbuild dir",
+ .hintmsg = "Check llvm.kbuild-dir option in ~/.perfconfig",
                    .tried = false},
     /* Don't output if this one fail. */
     [LLVM_TESTCASE_BPF_PROLOGUE]    = {
                    .source = test_llvm__bpf_test_prologue_prog,
-                   .errmsg = "failed for unknown reason",
+ .errmsg = "Unable to compile BPF prologue testing program", + .hintmsg = "This is an internal error, please report it",
                    .tried = false},
     {.source = NULL}
 };
@@ -43,16 +47,16 @@ static int test__bpf_parsing(void *obj_buf, size_t obj_buf_sz)

     obj = bpf_object__open_buffer(obj_buf, obj_buf_sz, NULL);
     if (!obj)
-        return -1;
+        return TEST_FAIL;
     bpf_object__close(obj);
-    return 0;
+    return TEST_OK;
 }
 #else
 static int test__bpf_parsing(void *obj_buf __maybe_unused,
                  size_t obj_buf_sz __maybe_unused)
 {
-    fprintf(stderr, " (skip bpf parsing)");
-    return 0;
+    pr_debug("BPF support is not compiled, skip BPF parsing\n");
+    return TEST_SKIP;
 }
 #endif

@@ -70,8 +74,8 @@ compose_source(const char *raw_source)
     err = sscanf(utsname.release, "%d.%d.%d",
              &version, &patchlevel, &sublevel);
     if (err != 3) {
-        fprintf(stderr, " (Can't get kernel version from uname '%s')",
-            utsname.release);
+        pr_debug("Unablt to get kernel version from uname '%s'\n",
+             utsname.release);
         return NULL;
     }

@@ -104,7 +108,7 @@ static int __test__llvm(int i)
      * and clang is not found in $PATH, and this is not perf test -v
      */
if (verbose == 0 && !llvm_param.user_set_param && llvm__search_clang()) {
-        fprintf(stderr, " (no clang, try 'perf test -v LLVM')");
+        pr_debug("Unable to find workable clang\n");
         return TEST_SKIP;
     }

@@ -155,7 +159,7 @@ static int __test__llvm(int i)

     verbose = old_verbose;
     if (err)
-        return -1;
+        return TEST_FAIL;

     err = test__bpf_parsing(obj_buf, obj_buf_sz);
     if (!err && result) {
@@ -181,13 +185,12 @@ int test__llvm(void)
              * First testcase tests basic LLVM compiling. If it
              * fails, no need to check others.
              */
-            if (!verbose)
-                fprintf(stderr, " (use -v to see error message)");
-            return ret;
+            return TEST_FAIL;
         } else if (ret) {
-            if (!verbose && llvm_testcases[i].errmsg)
-                fprintf(stderr, " (%s)", llvm_testcases[i].errmsg);
-            return 0;
+            pr_debug("%s\n", llvm_testcases[i].errmsg);
+            if (llvm_testcases[i].hintmsg)
+                pr_debug("Hint:\t%s\n", llvm_testcases[i].hintmsg);
+            return TEST_SKIP;
         }
     }
     return 0;
@@ -199,12 +202,15 @@ void test__llvm_prepare(void)

     for (i = 0; llvm_testcases[i].source; i++) {
         struct test_llvm__bpf_result *result;
+        void *p;

-        result = mmap(NULL, SHARED_BUF_INIT_SIZE,
-                  PROT_READ | PROT_WRITE,
-                  MAP_SHARED | MAP_ANONYMOUS, -1, 0);
-        if (!result)
+        p = mmap(NULL, SHARED_BUF_INIT_SIZE,
+             PROT_READ | PROT_WRITE,
+             MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+        if (p == MAP_FAILED)
             return;
+
+        result = p;
         memset((void *)result, '\0', SHARED_BUF_INIT_SIZE);

         llvm_testcases[i].result = result;
diff --git a/tools/perf/util/bpf-prologue.c b/tools/perf/util/bpf-prologue.c
index e4adb18..36093d9 100644
--- a/tools/perf/util/bpf-prologue.c
+++ b/tools/perf/util/bpf-prologue.c
@@ -337,8 +337,10 @@ int bpf__gen_prologue(struct probe_trace_arg *args, int nargs,
         return 0;
     }

-    if (nargs > BPF_PROLOGUE_MAX_ARGS)
+    if (nargs > BPF_PROLOGUE_MAX_ARGS) {
+        pr_warning("bpf: prologue: too many arguments\n");
         nargs = BPF_PROLOGUE_MAX_ARGS;
+    }
     if (cnt_space > BPF_MAXINSNS)
         cnt_space = BPF_MAXINSNS;



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
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