Received: by 10.223.185.111 with SMTP id b44csp1259235wrg; Sat, 10 Mar 2018 01:52:21 -0800 (PST) X-Google-Smtp-Source: AG47ELuYyhe60DsDI+IEmXCgNwQVKd1LzTkcouf6wml8+poeGxefRvU0QbzY/Ikx6H3jBgxmvEu5 X-Received: by 10.99.42.83 with SMTP id q80mr1284921pgq.115.1520675541222; Sat, 10 Mar 2018 01:52:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520675541; cv=none; d=google.com; s=arc-20160816; b=H+fAxeqDZcAkY4+vBxr+9z7JuYy5yNq5d0DS1JQYW+yohzBuu17Qsplg9Xjwc226bb wjmHIn4RO2ab6e6aQcZQReXbzcISra7WP3K5KOGvsSqMP7YqxZApLlavK9yBl/PqSH+g T0IV7o1x0VIQGF7pfU5zrzAbck7aJbdaJ6IVBe0PZvK0tqgXjgN23QXNWObXLBteqXPr FLqSPbmtgK+1Os3XnZPgwo+myw4jKsCWCLbKucE97BzPHQrU/V3Ac81gXnylJDeGgw0i E7Groy7QoAYrGAw5cxi4WiMEhq00KFNUguaAIOI+zIZ6O5/xvM9SkykdmLF065SYSWDN 5IYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=mjEa/wOwCA2DQyM1lxEv88+mCUo/GGGNZ/zoetmDjlc=; b=c/eQR4zd0gwtE0mn7q7+Bl19aBW8VcbWlrMa4NwUwOuNzZviaqta8edUYwtVTKdObn +CRz1+FwKasX/sE+lLoyTJlx3xJoHUkEguXBYFfP0ZRYG3/5eTmZBpBAWOPNOKOlOpAP Ru8cY8cF5NVjpp6DYLAs9AJtVglzqS7BiKJUCOQ4BzcwR7p8sfLiiCldI6qi9IfFSJVH Xbm6L6RmhpUkzpKI2Gv4MsccUWyjioT6GuTN5koQkYB9YPHwqXVKqliYT9YPkuo0jYDQ wxki8jE9V5k4DOw/2eyCRuP3R2Dqq7ZJbj7Hs9cib9SYHPi3mY3lHDWQTYpleYeRxOj+ IiuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=KB6zsPYj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y101-v6si2524600plh.419.2018.03.10.01.52.06; Sat, 10 Mar 2018 01:52:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=KB6zsPYj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751933AbeCJJvN (ORCPT + 99 others); Sat, 10 Mar 2018 04:51:13 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:37715 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751012AbeCJJvL (ORCPT ); Sat, 10 Mar 2018 04:51:11 -0500 Received: by mail-wm0-f67.google.com with SMTP id 139so7949616wmn.2 for ; Sat, 10 Mar 2018 01:51:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=mjEa/wOwCA2DQyM1lxEv88+mCUo/GGGNZ/zoetmDjlc=; b=KB6zsPYjvOEeOvRwAn+8l8SI7gMH+RXjc7870k//PD9pgtXB5eCgjrkQdyLQHy4LoG EZujEqCD8STTYK5JKlmW99K1rTufnux0b/p64eWD0mJWd02T5y3fE1op5sxbPCOyWcA4 /WsO+PM2F4A5jj6mOPuB5Dj8jpIp4wJnAKlvk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=mjEa/wOwCA2DQyM1lxEv88+mCUo/GGGNZ/zoetmDjlc=; b=HC3xMTBzwpz+SM9e38mETCefC00iiTDqczAYDFED3Vc0Xd3NAXn/X01aa0k/TmKpPF YLcFF/tc3zCJqDyJifmTOtKmoE+WAxga4+v2mmkFwgALY0mZO32X7Pg7zB8mg71EAEYv jHrgToZWf2+7G7bUjTT4LTdi8WIYfqZFibsU5WFYdEdwgpDdcc4De7e2TmN0X/BPjuE1 w5R77C1a8sIwBoeT4rdZCRTMqZVAW6NaXXUaEfE5rXfp8E+BlTZYL6B7fWpops+eVOmB MxV/CgXbvmVvSfuOtvwO5NY+iYNCgul8UJxpf8/shqmUWqvskjG0QFpw0hYvD+3XCumV kJkA== X-Gm-Message-State: AElRT7FfmaThDCwvAQT1yqqCp0n4TMlO/JC64XBS7PwT45vWrTQSHUC4 OvB0XaOzX+32O1o2KWnrkCOs2g== X-Received: by 10.28.223.212 with SMTP id w203mr830167wmg.96.1520675470415; Sat, 10 Mar 2018 01:51:10 -0800 (PST) Received: from leoy-ThinkPad-X240s (li622-172.members.linode.com. [212.71.249.172]) by smtp.gmail.com with ESMTPSA id k2sm434325wmf.10.2018.03.10.01.51.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 10 Mar 2018 01:51:09 -0800 (PST) Date: Sat, 10 Mar 2018 17:50:56 +0800 From: Leo Yan To: Jiri Olsa Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Alexander Shishkin , Namhyung Kim , linux-kernel@vger.kernel.org, Mathieu Poirier Subject: Re: [PATCH v2] perf machine: Fix load kernel symbol with '-k' option Message-ID: <20180310095056.GA10251@leoy-ThinkPad-X240s> References: <1520575523-3838-1-git-send-email-leo.yan@linaro.org> <20180309205600.GB16890@krava> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180309205600.GB16890@krava> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jiri, On Fri, Mar 09, 2018 at 09:56:00PM +0100, Jiri Olsa wrote: > On Fri, Mar 09, 2018 at 02:05:23PM +0800, Leo Yan wrote: > > On Hikey arm64 octa A53 platform, when use command './perf report -v > > -k vmlinux --stdio' it outputs below error info, and it skips to load > > kernel symbol and doesn't print symbol for event: > > Failed to open [kernel.kallsyms]_text, continuing without symbols. > > > > The regression is introduced by commit ("8c7f1bb37b29 perf machine: Move > > kernel mmap name into struct machine"), which changes the logic for > > machine mmap_name by removing function machine__mmap_name() and always > > use 'machine->mmap_name'. Comparing difference between > > machine__mmap_name() and 'machine->mmap_name', the later one includes > > the string for specified kernel vmlinux string with option '-k' in > > command, but the old function machine__mmap_name() ignores vmlinux > > path string. As result, event's mmap file name doesn't match with > > machine mmap file name anymore and it skips to load kernel symbol from > > vmlinux file. > > > > To resolve this issue, this patch adds extra checking for > > 'symbol_conf.vmlinux_name', when it has been set string so we can know > > it includes vmlinux path string specified for option '-k'. For this > > case it sets 'is_kernel_mmap' to true and run into flow to load kernel > > symbol from vmlinux. > > > > This patch has been verified with two commands: './perf report -v > > -k vmlinux --stdio' and './perf script -v -F cpu,event,ip,sym,symoff > > -k vmlinux'. > > > > Suggested-by: Mathieu Poirier > > Signed-off-by: Leo Yan > > --- > > tools/perf/util/machine.c | 15 ++++++++++++--- > > 1 file changed, 12 insertions(+), 3 deletions(-) > > > > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > > index 12b7427..3125871 100644 > > --- a/tools/perf/util/machine.c > > +++ b/tools/perf/util/machine.c > > @@ -1299,9 +1299,18 @@ static int machine__process_kernel_mmap_event(struct machine *machine, > > else > > kernel_type = DSO_TYPE_GUEST_KERNEL; > > > > - is_kernel_mmap = memcmp(event->mmap.filename, > > - machine->mmap_name, > > - strlen(machine->mmap_name) - 1) == 0; > > + /* > > + * When symbol_conf.vmlinux_name is not NULL, it includes the specified > > + * kernel vmlinux path with option '-k'. So set 'is_kernel_mmap' to > > + * true for creating machine symbol map. > > + */ > > + if (symbol_conf.vmlinux_name) > > + is_kernel_mmap = true; > > + else > > + is_kernel_mmap = memcmp(event->mmap.filename, > > + machine->mmap_name, > > + strlen(machine->mmap_name) - 1) == 0; > > + > > if (event->mmap.filename[0] == '/' || > > (!is_kernel_mmap && event->mmap.filename[0] == '[')) { > > map = machine__findnew_module_map(machine, event->mmap.start, > > right, the mmap gets confused with the vmlinux path, but I wonder > the fix should be not to include symbol_conf.vmlinux_name in the > mmap_name like below.. untested I tested below fixing at my side, and confirm your fixing also can resolve this issue. After reviewing the change, it's more neat than my own change . So you could add my test tag :) Tested-by: Leo Yan BTW, I have a minor comment for code refactoring, it's up to you if need or not and if need use a new patch for refactoring, please see below inline comment. Thanks, Leo Yan > --- > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index 43fbbee409ec..f0cb72022177 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -51,15 +51,9 @@ static void machine__threads_init(struct machine *machine) > static int machine__set_mmap_name(struct machine *machine) > { > if (machine__is_host(machine)) { > - if (symbol_conf.vmlinux_name) > - machine->mmap_name = strdup(symbol_conf.vmlinux_name); > - else > - machine->mmap_name = strdup("[kernel.kallsyms]"); > + machine->mmap_name = strdup("[kernel.kallsyms]"); > } else if (machine__is_default_guest(machine)) { > - if (symbol_conf.default_guest_vmlinux_name) > - machine->mmap_name = strdup(symbol_conf.default_guest_vmlinux_name); > - else > - machine->mmap_name = strdup("[guest.kernel.kallsyms]"); > + machine->mmap_name = strdup("[guest.kernel.kallsyms]"); > } else { > if (asprintf(&machine->mmap_name, "[guest.kernel.kallsyms.%d]", > machine->pid) < 0) Do you think below format is better or not? static int machine__set_mmap_name(struct machine *machine) { - if (machine__is_host(machine)) { - if (symbol_conf.vmlinux_name) - machine->mmap_name = strdup(symbol_conf.vmlinux_name); - else - machine->mmap_name = strdup("[kernel.kallsyms]"); - } else if (machine__is_default_guest(machine)) { - if (symbol_conf.default_guest_vmlinux_name) - machine->mmap_name = strdup(symbol_conf.default_guest_vmlinux_name); - else - machine->mmap_name = strdup("[guest.kernel.kallsyms]"); - } else { - if (asprintf(&machine->mmap_name, "[guest.kernel.kallsyms.%d]", - machine->pid) < 0) - machine->mmap_name = NULL; - } + if (machine__is_host(machine)) + machine->mmap_name = strdup("[kernel.kallsyms]"); + else if (machine__is_default_guest(machine)) + machine->mmap_name = strdup("[guest.kernel.kallsyms]"); + else if (asprintf(&machine->mmap_name, "[guest.kernel.kallsyms.%d]", + machine->pid) < 0) + machine->mmap_name = NULL; return machine->mmap_name ? 0 : -ENOMEM; } > @@ -794,9 +788,15 @@ static struct dso *machine__get_kernel(struct machine *machine) > struct dso *kernel; > > if (machine__is_host(machine)) { > + if (symbol_conf.vmlinux_name) > + vmlinux_name = symbol_conf.vmlinux_name; > + > kernel = machine__findnew_kernel(machine, vmlinux_name, > "[kernel]", DSO_TYPE_KERNEL); > } else { > + if (symbol_conf.default_guest_vmlinux_name) > + vmlinux_name = symbol_conf.default_guest_vmlinux_name; > + > kernel = machine__findnew_kernel(machine, vmlinux_name, > "[guest.kernel]", > DSO_TYPE_GUEST_KERNEL);