Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965177AbcDYV3c (ORCPT ); Mon, 25 Apr 2016 17:29:32 -0400 Received: from mail.kernel.org ([198.145.29.136]:41270 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965153AbcDYV3b (ORCPT ); Mon, 25 Apr 2016 17:29:31 -0400 Date: Tue, 26 Apr 2016 06:29:25 +0900 From: Masami Hiramatsu To: Ravi Bangoria Cc: linux-kernel@vger.kernel.org, acme@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, masami.hiramatsu.pt@hitachi.com, wangnan0@huawei.com, namhyung@kernel.org, srikar@linux.vnet.ibm.com, naveen.n.rao@linux.vnet.ibm.com Subject: Re: [RFC] perf probe: Fix module probe issue if no dwarf support Message-Id: <20160426062925.9dbfda280af62f077a27e297@kernel.org> In-Reply-To: <1461580708-15169-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com> References: <1461580708-15169-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com> <1461580708-15169-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com> X-Mailer: Sylpheed 3.4.3 (GTK+ 2.24.28; x86_64-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2980 Lines: 94 On Mon, 25 Apr 2016 16:08:28 +0530 Ravi Bangoria wrote: > Perf is not able to register probe in kernel module when dwarf supprt > is not there(and so it goes for symtab). Perf passes full path of > module where only module name is required which is causing the problem. > This patch fixes this issue. > > Before applying patch: > > $ dpkg -s libdw-dev > dpkg-query: package 'libdw-dev' is not installed ... > > $ ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show > Added new event: > probe:foo_show (on foo_show in /linux/samples/kobject/kobject-example.ko) > > You can now use it in all perf tools, such as: > > perf record -e probe:foo_show -aR sleep 1 > > $ cat /sys/kernel/debug/tracing/kprobe_events > p:probe/foo_show /linux/samples/kobject/kobject-example.ko:foo_show > > After applying patch: > > $ ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show > Added new event: > probe:foo_show (on foo_show in kobject_example) > > You can now use it in all perf tools, such as: > > perf record -e probe:foo_show -aR sleep 1 > > $ cat /sys/kernel/debug/tracing/kprobe_events > p:probe/foo_show kobject_example:foo_show > Looks good to me :) However, it seems that this patch depends on your previous patch ("perf probe: Fix offline module name missmatch issue") In that case, could you make these a series of patches? Acked-by: Masami Hiramatsu Thanks, > Signed-off-by: Ravi Bangoria > --- > tools/perf/util/probe-event.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c > index 05d0905..54e6a5a 100644 > --- a/tools/perf/util/probe-event.c > +++ b/tools/perf/util/probe-event.c > @@ -2566,6 +2566,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev, > struct probe_trace_point *tp; > int num_matched_functions; > int ret, i, j, skipped = 0; > + char *mod_name; > > map = get_target_map(pev->target, pev->uprobes); > if (!map) { > @@ -2650,9 +2651,19 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev, > tp->realname = strdup_or_goto(sym->name, nomem_out); > > tp->retprobe = pp->retprobe; > - if (pev->target) > - tev->point.module = strdup_or_goto(pev->target, > - nomem_out); > + if (pev->target) { > + if (pev->uprobes) { > + tev->point.module = strdup_or_goto(pev->target, > + nomem_out); > + } else { > + mod_name = find_module_name(pev->target); > + tev->point.module = > + strdup(mod_name ? mod_name : pev->target); > + free(mod_name); > + if (!tev->point.module) > + goto nomem_out; > + } > + } > tev->uprobes = pev->uprobes; > tev->nargs = pev->nargs; > if (tev->nargs) { > -- > 2.1.4 > -- Masami Hiramatsu