Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753709AbcD0PjD (ORCPT ); Wed, 27 Apr 2016 11:39:03 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51438 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753511AbcD0Pi7 (ORCPT ); Wed, 27 Apr 2016 11:38:59 -0400 Date: Wed, 27 Apr 2016 08:38:17 -0700 From: tip-bot for Ravi Bangoria Message-ID: Cc: hpa@zytor.com, wangnan0@huawei.com, ravi.bangoria@linux.vnet.ibm.com, tglx@linutronix.de, naveen.n.rao@linux.vnet.ibm.com, mhiramat@kernel.org, acme@redhat.com, linux-kernel@vger.kernel.org, srikar@linux.vnet.ibm.com, alexander.shishkin@linux.intel.com, namhyung@kernel.org, mingo@kernel.org, peterz@infradead.org Reply-To: peterz@infradead.org, mingo@kernel.org, namhyung@kernel.org, alexander.shishkin@linux.intel.com, srikar@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, acme@redhat.com, mhiramat@kernel.org, naveen.n.rao@linux.vnet.ibm.com, tglx@linutronix.de, ravi.bangoria@linux.vnet.ibm.com, wangnan0@huawei.com, hpa@zytor.com In-Reply-To: <1461680741-12517-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com> References: <1461680741-12517-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf probe: Fix offline module name missmatch issue Git-Commit-ID: 63a29613d7c69f17b6a3266bfc338986698b2546 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 Content-Length: 4319 Lines: 138 Commit-ID: 63a29613d7c69f17b6a3266bfc338986698b2546 Gitweb: http://git.kernel.org/tip/63a29613d7c69f17b6a3266bfc338986698b2546 Author: Ravi Bangoria AuthorDate: Tue, 26 Apr 2016 19:55:41 +0530 Committer: Arnaldo Carvalho de Melo CommitDate: Tue, 26 Apr 2016 13:15:01 -0300 perf probe: Fix offline module name missmatch issue Perf can add a probe on kernel module which has not been loaded yet. The current implementation finds the module name from path. But if the filename is different from the actual module name then perf fails to register a probe while loading module because of mismatch in the names. For example, samples/kobject/kobject-example.ko is loaded as kobject_example. Before applying patch: $ sudo ./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 $ insmod kobject-example.ko $ lsmod Module Size Used by kobject_example 16384 0 Generate read to /sys/kernel/kobject_example/foo while recording data with below command $ sudo ./perf record -e probe:foo_show -a [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.093 MB perf.data ] $./perf report --stdio -F overhead,comm,dso,sym Error: The perf.data.old file has no samples! After applying patch: $ sudo ./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 $ sudo cat /sys/kernel/debug/tracing/kprobe_events p:probe/foo_show kobject_example:foo_show $ insmod kobject-example.ko $ lsmod Module Size Used by kobject_example 16384 0 Generate read to /sys/kernel/kobject_example/foo while recording data with below command $ sudo ./perf record -e probe:foo_show -a [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.097 MB perf.data (8 samples) ] $ sudo ./perf report --stdio -F overhead,comm,dso,sym ... # Samples: 8 of event 'probe:foo_show' # Event count (approx.): 8 # # Overhead Command Shared Object Symbol # ........ ....... ................. ............ # 100.00% cat [kobject_example] [k] foo_show Signed-off-by: Ravi Bangoria Acked-by: Masami Hiramatsu Cc: Alexander Shishkin Cc: Namhyung Kim Cc: Naveen N. Rao Cc: Peter Zijlstra Cc: Srikar Dronamraju Cc: Wang Nan Link: http://lkml.kernel.org/r/1461680741-12517-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/probe-event.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 0de5d10..bc2eb7c 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -588,32 +588,23 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs, int ntevs, const char *module) { int i, ret = 0; - char *tmp; + char *mod_name = NULL; if (!module) return 0; - tmp = strrchr(module, '/'); - if (tmp) { - /* This is a module path -- get the module name */ - module = strdup(tmp + 1); - if (!module) - return -ENOMEM; - tmp = strchr(module, '.'); - if (tmp) - *tmp = '\0'; - tmp = (char *)module; /* For free() */ - } + mod_name = find_module_name(module); for (i = 0; i < ntevs; i++) { - tevs[i].point.module = strdup(module); + tevs[i].point.module = + strdup(mod_name ? mod_name : module); if (!tevs[i].point.module) { ret = -ENOMEM; break; } } - free(tmp); + free(mod_name); return ret; }