From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755269AbbCCG0R (ORCPT ); Tue, 3 Mar 2015 01:26:17 -0500 Received: from terminus.zytor.com ([198.137.202.10]:49334 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755184AbbCCG0N (ORCPT ); Tue, 3 Mar 2015 01:26:13 -0500 Date: Mon, 2 Mar 2015 22:25:51 -0800 From: tip-bot for Masami Hiramatsu Message-ID: Cc: acme@redhat.com, mingo@kernel.org, jolsa@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, masami.hiramatsu.pt@hitachi.com, dsahern@gmail.com Reply-To: dsahern@gmail.com, masami.hiramatsu.pt@hitachi.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, hpa@zytor.com, jolsa@redhat.com, mingo@kernel.org, acme@redhat.com In-Reply-To: <20150228025329.32106.70581.stgit@localhost.localdomain> References: <20150228025329.32106.70581.stgit@localhost.localdomain> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf probe: Warn if given uprobe event accesses memory on older kernel Git-Commit-ID: 79702f614187f652a814061e8f5875ddcc9e732d 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: 79702f614187f652a814061e8f5875ddcc9e732d Gitweb: http://git.kernel.org/tip/79702f614187f652a814061e8f5875ddcc9e732d Author: Masami Hiramatsu AuthorDate: Sat, 28 Feb 2015 11:53:29 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Mon, 2 Mar 2015 12:27:43 -0300 perf probe: Warn if given uprobe event accesses memory on older kernel Warn if given uprobe event accesses memory on older kernel. Until 3.14, uprobe event only supports accessing registers so this warns to upgrade kernel if uprobe-event returns -EINVAL and an argument of the event accesses memory ($stack, @+offset, and +|-offs() symtax). With this patch (on 3.10.0-123.13.2.el7.x86_64); ----- # ./perf probe -x ./perf warn_uprobe_event_compat stack=-0\(%sp\) Added new event: Failed to write event: Invalid argument Please upgrade your kernel to at least 3.14 to have access to feature -0(%sp) Error: Failed to add events. ----- Suggested-by: Arnaldo Carvalho de Melo Signed-off-by: Masami Hiramatsu Cc: David Ahern Cc: Jiri Olsa Link: http://lkml.kernel.org/r/20150228025329.32106.70581.stgit@localhost.localdomain Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/probe-event.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 7c0e765..1c570c2 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -2199,6 +2199,27 @@ static int get_new_event_name(char *buf, size_t len, const char *base, return ret; } +/* Warn if the current kernel's uprobe implementation is old */ +static void warn_uprobe_event_compat(struct probe_trace_event *tev) +{ + int i; + char *buf = synthesize_probe_trace_command(tev); + + /* Old uprobe event doesn't support memory dereference */ + if (!tev->uprobes || tev->nargs == 0 || !buf) + goto out; + + for (i = 0; i < tev->nargs; i++) + if (strglobmatch(tev->args[i].value, "[$@+-]*")) { + pr_warning("Please upgrade your kernel to at least " + "3.14 to have access to feature %s\n", + tev->args[i].value); + break; + } +out: + free(buf); +} + static int __add_probe_trace_events(struct perf_probe_event *pev, struct probe_trace_event *tevs, int ntevs, bool allow_suffix) @@ -2295,6 +2316,8 @@ static int __add_probe_trace_events(struct perf_probe_event *pev, */ allow_suffix = true; } + if (ret == -EINVAL && pev->uprobes) + warn_uprobe_event_compat(tev); /* Note that it is possible to skip all events because of blacklist */ if (ret >= 0 && tev->event) {