From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752561AbcETRpd (ORCPT ); Fri, 20 May 2016 13:45:33 -0400 Received: from terminus.zytor.com ([198.137.202.10]:33506 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751087AbcETRpa (ORCPT ); Fri, 20 May 2016 13:45:30 -0400 Date: Fri, 20 May 2016 10:44:30 -0700 From: tip-bot for Arnaldo Carvalho de Melo Message-ID: Cc: vincent.weaver@maine.edu, adrian.hunter@intel.com, acme@redhat.com, mhiramat@kernel.org, milian.wolff@kdab.com, hpa@zytor.com, hekuang@huawei.com, fweisbec@gmail.com, brendan.d.gregg@gmail.com, mingo@kernel.org, tglx@linutronix.de, namhyung@kernel.org, alexander.shishkin@linux.intel.com, lizefan@huawei.com, peterz@infradead.org, jolsa@redhat.com, dsahern@gmail.com, ast@kernel.org, linux-kernel@vger.kernel.org, wangnan0@huawei.com, eranian@google.com Reply-To: jolsa@redhat.com, peterz@infradead.org, lizefan@huawei.com, eranian@google.com, wangnan0@huawei.com, ast@kernel.org, linux-kernel@vger.kernel.org, dsahern@gmail.com, brendan.d.gregg@gmail.com, fweisbec@gmail.com, hekuang@huawei.com, milian.wolff@kdab.com, hpa@zytor.com, mhiramat@kernel.org, acme@redhat.com, adrian.hunter@intel.com, vincent.weaver@maine.edu, alexander.shishkin@linux.intel.com, namhyung@kernel.org, mingo@kernel.org, tglx@linutronix.de To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] perf callchain: Stop validating callchains by the max_stack sysctl Git-Commit-ID: bf8bddbf1971d40549f33bc6f70623cf53bbfa2f 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: bf8bddbf1971d40549f33bc6f70623cf53bbfa2f Gitweb: http://git.kernel.org/tip/bf8bddbf1971d40549f33bc6f70623cf53bbfa2f Author: Arnaldo Carvalho de Melo AuthorDate: Thu, 19 May 2016 11:14:15 -0300 Committer: Arnaldo Carvalho de Melo CommitDate: Fri, 20 May 2016 11:43:56 -0300 perf callchain: Stop validating callchains by the max_stack sysctl As thread__resolve_callchain_sample can be used for handling perf.data files, that could've been recorded with a large max_stack sysctl setting than what the system used for analysis has set. Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Alexei Starovoitov Cc: Brendan Gregg Cc: David Ahern Cc: Frederic Weisbecker Cc: He Kuang Cc: Jiri Olsa Cc: Masami Hiramatsu Cc: Milian Wolff Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Stephane Eranian Cc: Thomas Gleixner Cc: Vince Weaver Cc: Wang Nan Cc: Zefan Li Link: http://lkml.kernel.org/n/tip-2995bt2g5yq2m05vga4kip6m@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/machine.c | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index bdc33ce..205d270 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -1771,11 +1771,6 @@ static int resolve_lbr_callchain_sample(struct thread *thread, */ int mix_chain_nr = i + 1 + lbr_nr + 1; - if (mix_chain_nr > (int)sysctl_perf_event_max_stack + PERF_MAX_BRANCH_DEPTH) { - pr_warning("corrupted callchain. skipping...\n"); - return 0; - } - for (j = 0; j < mix_chain_nr; j++) { if (callchain_param.order == ORDER_CALLEE) { if (j < i + 1) @@ -1815,7 +1810,7 @@ static int thread__resolve_callchain_sample(struct thread *thread, struct ip_callchain *chain = sample->callchain; int chain_nr = chain->nr; u8 cpumode = PERF_RECORD_MISC_USER; - int i, j, err, nr_entries, nr_contexts; + int i, j, err, nr_entries; int skip_idx = -1; int first_call = 0; @@ -1830,8 +1825,7 @@ static int thread__resolve_callchain_sample(struct thread *thread, * Based on DWARF debug information, some architectures skip * a callchain entry saved by the kernel. */ - if (chain_nr < sysctl_perf_event_max_stack) - skip_idx = arch_skip_callchain_idx(thread, chain); + skip_idx = arch_skip_callchain_idx(thread, chain); /* * Add branches to call stack for easier browsing. This gives @@ -1891,7 +1885,7 @@ static int thread__resolve_callchain_sample(struct thread *thread, } check_calls: - for (i = first_call, nr_entries = 0, nr_contexts = 0; + for (i = first_call, nr_entries = 0; i < chain_nr && nr_entries < max_stack; i++) { u64 ip; @@ -1906,13 +1900,8 @@ check_calls: #endif ip = chain->ips[j]; - if (ip >= PERF_CONTEXT_MAX) { - if (++nr_contexts > sysctl_perf_event_max_contexts_per_stack) - goto out_corrupted_callchain; - } else { - if (++nr_entries > sysctl_perf_event_max_stack) - goto out_corrupted_callchain; - } + if (ip < PERF_CONTEXT_MAX) + ++nr_entries; err = add_callchain_ip(thread, cursor, parent, root_al, &cpumode, ip); @@ -1921,10 +1910,6 @@ check_calls: } return 0; - -out_corrupted_callchain: - pr_warning("corrupted callchain. skipping...\n"); - return 0; } static int unwind_entry(struct unwind_entry *entry, void *arg)