From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752077AbcGPUpx (ORCPT ); Sat, 16 Jul 2016 16:45:53 -0400 Received: from terminus.zytor.com ([198.137.202.10]:38556 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751733AbcGPUpw (ORCPT ); Sat, 16 Jul 2016 16:45:52 -0400 Date: Sat, 16 Jul 2016 13:45:41 -0700 From: tip-bot for Arnaldo Carvalho de Melo Message-ID: Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, jolsa@kernel.org, wangnan0@huawei.com, lizefan@huawei.com, hekuang@huawei.com, nilayvaish@gmail.com, hpa@zytor.com, namhyung@kernel.org, tglx@linutronix.de, acme@redhat.com, mhiramat@kernel.org Reply-To: namhyung@kernel.org, tglx@linutronix.de, hpa@zytor.com, acme@redhat.com, mhiramat@kernel.org, nilayvaish@gmail.com, linux-kernel@vger.kernel.org, jolsa@kernel.org, wangnan0@huawei.com, lizefan@huawei.com, hekuang@huawei.com, mingo@kernel.org In-Reply-To: <1468485287-33422-2-git-send-email-wangnan0@huawei.com> References: <1468485287-33422-2-git-send-email-wangnan0@huawei.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf evlist: Drop redundant evsel->overwrite indicator Git-Commit-ID: 32a951b4fd6bbe60ef5d65930b1712321e241b27 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 32a951b4fd6bbe60ef5d65930b1712321e241b27 Gitweb: http://git.kernel.org/tip/32a951b4fd6bbe60ef5d65930b1712321e241b27 Author: Arnaldo Carvalho de Melo AuthorDate: Thu, 14 Jul 2016 08:34:33 +0000 Committer: Arnaldo Carvalho de Melo CommitDate: Fri, 15 Jul 2016 13:38:06 -0300 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 Cc: Jiri Olsa Cc: Masami Hiramatsu Cc: Namhyung Kim Cc: Nilay Vaish Cc: Wang Nan Cc: Zefan Li Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1468485287-33422-2-git-send-email-wangnan0@huawei.com Signed-off-by: Wang Nan Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/tests/backward-ring-buffer.c | 1 + tools/perf/util/evlist.c | 4 ++-- tools/perf/util/evsel.c | 12 +++++------- tools/perf/util/evsel.h | 1 - 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 f20ea4c..5cee387 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) return TEST_FAIL; } + evlist->backward = true; err = perf_evlist__create_maps(evlist, &opts.target); if (err < 0) { 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 862e69c..6803f5c 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1003,7 +1003,7 @@ static bool perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, struct perf_evsel *evsel) { - if (evsel->overwrite) + if (evsel->attr.write_backward) return false; return true; } @@ -1018,7 +1018,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, evlist__for_each_entry(evlist, evsel) { int fd; - if (evsel->overwrite != (evlist->overwrite && evlist->backward)) + if (!!evsel->attr.write_backward != (evlist->overwrite && evlist->backward)) continue; if (evsel->system_wide && thread) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ba0f59f..9ac2f92 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, int pid = -1, err; enum { NO_CHANGE, SET_TO_MAX, INCREASED_MAX } set_rlimit = NO_CHANGE; + if (perf_missing_features.write_backward && evsel->attr.write_backward) + return -EINVAL; + if (evsel->system_wide) nthreads = 1; else @@ -1407,11 +1410,6 @@ fallback_missing_features: if (perf_missing_features.lbr_flags) evsel->attr.branch_sample_type &= ~(PERF_SAMPLE_BRANCH_NO_FLAGS | PERF_SAMPLE_BRANCH_NO_CYCLES); - if (perf_missing_features.write_backward) { - if (evsel->overwrite) - return -EINVAL; - evsel->attr.write_backward = false; - } retry_sample_id: if (perf_missing_features.sample_id_all) evsel->attr.sample_id_all = 0; @@ -1513,7 +1511,7 @@ try_fallback: */ if (!perf_missing_features.write_backward && evsel->attr.write_backward) { perf_missing_features.write_backward = true; - goto fallback_missing_features; + goto out_close; } else if (!perf_missing_features.clockid_wrong && evsel->attr.use_clockid) { perf_missing_features.clockid_wrong = true; goto fallback_missing_features; @@ -2422,7 +2420,7 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target, "We found oprofile daemon running, please stop it and try again."); break; case EINVAL: - if (evsel->overwrite && perf_missing_features.write_backward) + if (evsel->attr.write_backward && perf_missing_features.write_backward) return scnprintf(msg, size, "Reading from overwrite event is not supported by this kernel."); if (perf_missing_features.clockid) return scnprintf(msg, size, "clockid feature not supported."); diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index d73391e..e60cbfc 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -114,7 +114,6 @@ struct perf_evsel { bool tracking; bool per_pkg; bool precise_max; - bool overwrite; /* parse modifier helper */ int exclude_GH; int nr_members;