From patchwork Fri Feb 26 09:31:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Nan X-Patchwork-Id: 63003 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp612423lbc; Fri, 26 Feb 2016 01:39:27 -0800 (PST) X-Received: by 10.66.163.40 with SMTP id yf8mr578900pab.148.1456479566934; Fri, 26 Feb 2016 01:39:26 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x77si18837887pfa.33.2016.02.26.01.39.24; Fri, 26 Feb 2016 01:39:26 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753418AbcBZJik (ORCPT + 30 others); Fri, 26 Feb 2016 04:38:40 -0500 Received: from szxga01-in.huawei.com ([58.251.152.64]:40860 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753193AbcBZJeU (ORCPT ); Fri, 26 Feb 2016 04:34:20 -0500 Received: from 172.24.1.51 (EHLO szxeml422-hub.china.huawei.com) ([172.24.1.51]) by szxrg01-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id DFG44959; Fri, 26 Feb 2016 17:32:53 +0800 (CST) Received: from linux-4hy3.site (10.107.193.248) by szxeml422-hub.china.huawei.com (10.82.67.152) with Microsoft SMTP Server id 14.3.235.1; Fri, 26 Feb 2016 17:32:41 +0800 From: Wang Nan To: Alexei Starovoitov , Arnaldo Carvalho de Melo , Arnaldo Carvalho de Melo CC: Jiri Olsa , Li Zefan , "Peter Zijlstra" , , Wang Nan , Subject: [PATCH 04/46] perf trace: Improve error message when receive non-tracepoint events Date: Fri, 26 Feb 2016 09:31:52 +0000 Message-ID: <1456479154-136027-5-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1456479154-136027-1-git-send-email-wangnan0@huawei.com> References: <1456479154-136027-1-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.107.193.248] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090203.56D01BC5.00F2, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 0877a7862b1a8ad1ce685df2711ddcc2 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Before this patch, strange error message is provided if passed a non-tracepoint event to 'perf trace': # perf trace -a --ev cycles sleep 1 Failed to set filter "common_pid != 27500" on event cycles with 22 (Invalid argument) This is because 'perf trace' accepts all valid event during cmdline parsing, but since it need setting filter to events, actually user can pass tracepoints with '--ev' only. This patch validate evlist, report error earlier: # ./perf trace -a --ev cycles sleep 1 Only support tracepoint events! Signed-off-by: Wang Nan Cc: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Li Zefan Cc: pi3orama@163.com --- tools/perf/builtin-trace.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) -- 1.8.3.4 diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 20916dd..9b6e7c4 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2525,6 +2525,17 @@ out_enomem: goto out; } +static int validate_evlist(struct perf_evlist *evlist) +{ + struct perf_evsel *evsel; + + evlist__for_each(evlist, evsel) { + if (evsel->attr.type != PERF_TYPE_TRACEPOINT) + return -EINVAL; + } + return 0; +} + static int trace__run(struct trace *trace, int argc, const char **argv) { struct perf_evlist *evlist = trace->evlist; @@ -3111,6 +3122,11 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused) argc = parse_options_subcommand(argc, argv, trace_options, trace_subcommands, trace_usage, PARSE_OPT_STOP_AT_NON_OPTION); + if (validate_evlist(trace.evlist)) { + pr_err("Only support tracepoint events!\n"); + return -EINVAL; + } + if (trace.trace_pgfaults) { trace.opts.sample_address = true; trace.opts.sample_time = true;