aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2016-07-14 04:34:33 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-07-15 12:38:06 -0400
commit32a951b4fd6bbe60ef5d65930b1712321e241b27 (patch)
tree6900abcdecfb044b93de799a1f7fcc01e9893ad4 /tools/perf
parentdb49120a32b347fb93aea3319305932657dd118c (diff)
perf evlist: Drop redundant evsel->overwrite indicator
evsel->overwrite indicator means an event should be put into overwritable ring buffer. In current implementation, it equals to evsel->attr.write_backward. To reduce compliexity, remove evsel->overwrite, use evsel->attr.write_backward instead. In addition, in __perf_evsel__open(), if kernel doesn't support write_backward and user explicitly set it in evsel, don't fallback like other missing feature, since it is meaningless to fall back to a forward ring buffer in this case: we are unable to stably read from an forward overwritable ring buffer. Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nilay Vaish <nilayvaish@gmail.com> Cc: Wang Nan <wangnan0@huawei.com> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1468485287-33422-2-git-send-email-wangnan0@huawei.com Signed-off-by: Wang Nan <wangnan0@huawei.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/tests/backward-ring-buffer.c1
-rw-r--r--tools/perf/util/evlist.c4
-rw-r--r--tools/perf/util/evsel.c12
-rw-r--r--tools/perf/util/evsel.h1
4 files changed, 8 insertions, 10 deletions
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c
index f20ea4c0d0cb..5cee3873f2b5 100644
--- a/tools/perf/tests/backward-ring-buffer.c
+++ b/tools/perf/tests/backward-ring-buffer.c
@@ -101,6 +101,7 @@ int test__backward_ring_buffer(int subtest __maybe_unused)
101 return TEST_FAIL; 101 return TEST_FAIL;
102 } 102 }
103 103
104 evlist->backward = true;
104 err = perf_evlist__create_maps(evlist, &opts.target); 105 err = perf_evlist__create_maps(evlist, &opts.target);
105 if (err < 0) { 106 if (err < 0) {
106 pr_debug("Not enough memory to create thread/cpu maps\n"); 107 pr_debug("Not enough memory to create thread/cpu maps\n");
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 862e69c2690d..6803f5ccd15e 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1003,7 +1003,7 @@ static bool
1003perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, 1003perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused,
1004 struct perf_evsel *evsel) 1004 struct perf_evsel *evsel)
1005{ 1005{
1006 if (evsel->overwrite) 1006 if (evsel->attr.write_backward)
1007 return false; 1007 return false;
1008 return true; 1008 return true;
1009} 1009}
@@ -1018,7 +1018,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx,
1018 evlist__for_each_entry(evlist, evsel) { 1018 evlist__for_each_entry(evlist, evsel) {
1019 int fd; 1019 int fd;
1020 1020
1021 if (evsel->overwrite != (evlist->overwrite && evlist->backward)) 1021 if (!!evsel->attr.write_backward != (evlist->overwrite && evlist->backward))
1022 continue; 1022 continue;
1023 1023
1024 if (evsel->system_wide && thread) 1024 if (evsel->system_wide && thread)
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index ba0f59fa3d5d..9ac2f92ce88d 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1377,6 +1377,9 @@ static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
1377 int pid = -1, err; 1377 int pid = -1, err;
1378 enum { NO_CHANGE, SET_TO_MAX, INCREASED_MAX } set_rlimit = NO_CHANGE; 1378 enum { NO_CHANGE, SET_TO_MAX, INCREASED_MAX } set_rlimit = NO_CHANGE;
1379 1379
1380 if (perf_missing_features.write_backward && evsel->attr.write_backward)
1381 return -EINVAL;
1382
1380 if (evsel->system_wide) 1383 if (evsel->system_wide)
1381 nthreads = 1; 1384 nthreads = 1;
1382 else 1385 else
@@ -1407,11 +1410,6 @@ fallback_missing_features:
1407 if (perf_missing_features.lbr_flags) 1410 if (perf_missing_features.lbr_flags)
1408 evsel->attr.branch_sample_type &= ~(PERF_SAMPLE_BRANCH_NO_FLAGS | 1411 evsel->attr.branch_sample_type &= ~(PERF_SAMPLE_BRANCH_NO_FLAGS |
1409 PERF_SAMPLE_BRANCH_NO_CYCLES); 1412 PERF_SAMPLE_BRANCH_NO_CYCLES);
1410 if (perf_missing_features.write_backward) {
1411 if (evsel->overwrite)
1412 return -EINVAL;
1413 evsel->attr.write_backward = false;
1414 }
1415retry_sample_id: 1413retry_sample_id:
1416 if (perf_missing_features.sample_id_all) 1414 if (perf_missing_features.sample_id_all)
1417 evsel->attr.sample_id_all = 0; 1415 evsel->attr.sample_id_all = 0;
@@ -1513,7 +1511,7 @@ try_fallback:
1513 */ 1511 */
1514 if (!perf_missing_features.write_backward && evsel->attr.write_backward) { 1512 if (!perf_missing_features.write_backward && evsel->attr.write_backward) {
1515 perf_missing_features.write_backward = true; 1513 perf_missing_features.write_backward = true;
1516 goto fallback_missing_features; 1514 goto out_close;
1517 } else if (!perf_missing_features.clockid_wrong && evsel->attr.use_clockid) { 1515 } else if (!perf_missing_features.clockid_wrong && evsel->attr.use_clockid) {
1518 perf_missing_features.clockid_wrong = true; 1516 perf_missing_features.clockid_wrong = true;
1519 goto fallback_missing_features; 1517 goto fallback_missing_features;
@@ -2422,7 +2420,7 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,
2422 "We found oprofile daemon running, please stop it and try again."); 2420 "We found oprofile daemon running, please stop it and try again.");
2423 break; 2421 break;
2424 case EINVAL: 2422 case EINVAL:
2425 if (evsel->overwrite && perf_missing_features.write_backward) 2423 if (evsel->attr.write_backward && perf_missing_features.write_backward)
2426 return scnprintf(msg, size, "Reading from overwrite event is not supported by this kernel."); 2424 return scnprintf(msg, size, "Reading from overwrite event is not supported by this kernel.");
2427 if (perf_missing_features.clockid) 2425 if (perf_missing_features.clockid)
2428 return scnprintf(msg, size, "clockid feature not supported."); 2426 return scnprintf(msg, size, "clockid feature not supported.");
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index d73391e8740e..e60cbfc2cd35 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -114,7 +114,6 @@ struct perf_evsel {
114 bool tracking; 114 bool tracking;
115 bool per_pkg; 115 bool per_pkg;
116 bool precise_max; 116 bool precise_max;
117 bool overwrite;
118 /* parse modifier helper */ 117 /* parse modifier helper */
119 int exclude_GH; 118 int exclude_GH;
120 int nr_members; 119 int nr_members;