perf tests attr: Add test_attr__ready function
authorJiri Olsa <jolsa@kernel.org>
Mon, 3 Jul 2017 14:50:18 +0000 (16:50 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 19 Jul 2017 02:14:15 +0000 (23:14 -0300)
We create many test events before the real ones just to test specific
features. But there's no way for attr tests to separate those test
events from those it needs to check.

Adding 'ready' call from the events open interface to trigger/start
events collection for attr test.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20170703145030.12903-4-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/perf.h
tools/perf/tests/attr.c
tools/perf/util/evsel.c

index 806c216a1078210a028167c26eb442cec8e219b9..2c010dd6a79d3d9e063b908ae405f6737f90fcfc 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/perf_event.h>
 
 extern bool test_attr__enabled;
+void test_attr__ready(void);
 void test_attr__init(void);
 void test_attr__open(struct perf_event_attr *attr, pid_t pid, int cpu,
                     int fd, int group_fd, unsigned long flags);
index 08b1d5ce9020b0aaff0dda4e0e2b5999376ba6c2..84c0eb598a67176a470a3aaeacc325bf82600f6c 100644 (file)
@@ -36,6 +36,7 @@
 #define ENV "PERF_TEST_ATTR"
 
 static char *dir;
+static bool ready;
 
 void test_attr__init(void)
 {
@@ -67,6 +68,9 @@ static int store_event(struct perf_event_attr *attr, pid_t pid, int cpu,
        FILE *file;
        char path[PATH_MAX];
 
+       if (!ready)
+               return 0;
+
        snprintf(path, PATH_MAX, "%s/event-%d-%llu-%d", dir,
                 attr->type, attr->config, fd);
 
@@ -144,6 +148,12 @@ void test_attr__open(struct perf_event_attr *attr, pid_t pid, int cpu,
        errno = errno_saved;
 }
 
+void test_attr__ready(void)
+{
+       if (unlikely(test_attr__enabled) && !ready)
+               ready = true;
+}
+
 static int run_dir(const char *d, const char *perf)
 {
        char v[] = "-vvvvv";
index df567e478a0ebbda27133fca48831f72bb411fa4..6dd069a41ac3088f55a649b7080d850a2c757f18 100644 (file)
@@ -58,6 +58,8 @@ static int perf_evsel__no_extra_init(struct perf_evsel *evsel __maybe_unused)
        return 0;
 }
 
+void __weak test_attr__ready(void) { }
+
 static void perf_evsel__no_extra_fini(struct perf_evsel *evsel __maybe_unused)
 {
 }
@@ -1572,6 +1574,8 @@ retry_open:
                        pr_debug2("sys_perf_event_open: pid %d  cpu %d  group_fd %d  flags %#lx",
                                  pid, cpus->map[cpu], group_fd, flags);
 
+                       test_attr__ready();
+
                        fd = sys_perf_event_open(&evsel->attr, pid, cpus->map[cpu],
                                                 group_fd, flags);