From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934519AbcCJAkD (ORCPT ); Wed, 9 Mar 2016 19:40:03 -0500 Received: from LGEAMRELO13.lge.com ([156.147.23.53]:53795 "EHLO lgeamrelo13.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752281AbcCJAj7 (ORCPT ); Wed, 9 Mar 2016 19:39:59 -0500 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: namhyung@kernel.org X-Original-SENDERIP: 165.244.98.150 X-Original-MAILFROM: namhyung@kernel.org X-Original-SENDERIP: 10.177.227.17 X-Original-MAILFROM: namhyung@kernel.org Date: Thu, 10 Mar 2016 09:39:55 +0900 From: Namhyung Kim To: Jiri Olsa CC: Steven Rostedt , lkml , Ingo Molnar , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: Re: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event Message-ID: <20160310003955.GB21119@sejong> References: <1457556405-27717-1-git-send-email-jolsa@kernel.org> <1457556405-27717-3-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 In-Reply-To: <1457556405-27717-3-git-send-email-jolsa@kernel.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-MIMETrack: Itemize by SMTP Server on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/03/10 09:39:55, Serialize by Router on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/03/10 09:39:55, Serialize complete at 2016/03/10 09:39:55 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 On Wed, Mar 09, 2016 at 09:46:42PM +0100, Jiri Olsa wrote: > We suppress events with attr::exclude_kernel set when > the event is generated, so following capture will > give no warning but won't produce any data: > > $ sudo perf record -e sched:sched_switch:u ls > $ sudo /perf script | wc -l > 0 > > Checking the attr::exclude_(kernel|user) at the event > init time and failing right away for tracepoints from > uprobes/kprobes and native ones: > > $ sudo perf record -e sched:sched_switch:u ls > Error: > The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (sched:sched_switch). > /bin/dmesg may provide additional information. > No CONFIG_PERF_EVENTS=y kernel support configured? > > $ sudo perf record -e probe:sys_read:u ls > Error: > The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (probe:sys_read). > /bin/dmesg may provide additional information. > No CONFIG_PERF_EVENTS=y kernel support configured? > > $ ./perf record -e probe_ex:main:k ./ex > Error: > The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (probe_ex:main). > /bin/dmesg may provide additional information. > No CONFIG_PERF_EVENTS=y kernel support configured? > > Signed-off-by: Jiri Olsa Acked-by: Namhyung Kim Maybe we need to improve the error message later. Thanks, Namhyung > --- > kernel/events/core.c | 5 ----- > kernel/trace/trace_event_perf.c | 25 +++++++++++++++++++++++++ > 2 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index c15fd097af93..ca68fdcf47ce 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -6898,11 +6898,6 @@ static int perf_tp_event_match(struct perf_event *event, > { > if (event->hw.state & PERF_HES_STOPPED) > return 0; > - /* > - * All tracepoints are from kernel-space. > - */ > - if (event->attr.exclude_kernel) > - return 0; > > if (!perf_tp_filter_match(event, data)) > return 0; > diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c > index a7171ec2c1ca..0a3779bd18a1 100644 > --- a/kernel/trace/trace_event_perf.c > +++ b/kernel/trace/trace_event_perf.c > @@ -182,11 +182,36 @@ static void perf_trace_event_close(struct perf_event *p_event) > tp_event->class->reg(tp_event, TRACE_REG_PERF_CLOSE, p_event); > } > > +static int perf_trace_event_attr(struct trace_event_call *tp_event, > + struct perf_event *event) > +{ > + /* > + * All tracepoints and kprobes are from kernel-space. > + */ > + if (((tp_event->flags & TRACE_EVENT_FL_TRACEPOINT) || > + (tp_event->flags & TRACE_EVENT_FL_KPROBE)) && > + event->attr.exclude_kernel) > + return -EINVAL; > + > + /* > + * All uprobes are from user-space. > + */ > + if ((tp_event->flags & TRACE_EVENT_FL_UPROBE) && > + event->attr.exclude_user) > + return -EINVAL; > + > + return 0; > +} > + > static int perf_trace_event_init(struct trace_event_call *tp_event, > struct perf_event *p_event) > { > int ret; > > + ret = perf_trace_event_attr(tp_event, p_event); > + if (ret) > + return ret; > + > ret = perf_trace_event_perm(tp_event, p_event); > if (ret) > return ret; > -- > 2.4.3 >