Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1354434 > unrolled thread

[PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event

Started byJiri Olsa <jolsa@kernel.org>
First post2016-03-09 21:50 +0100
Last post2016-03-11 09:40 +0100
Articles 3 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event Jiri Olsa <jolsa@kernel.org> - 2016-03-09 21:50 +0100
    Re: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to  init event Namhyung Kim <namhyung@kernel.org> - 2016-03-10 01:50 +0100
      Re: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to  init event Jiri Olsa <jolsa@redhat.com> - 2016-03-11 09:40 +0100

#1354434 — [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event

FromJiri Olsa <jolsa@kernel.org>
Date2016-03-09 21:50 +0100
Subject[PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event
Message-ID<raTdo-4Ll-5@gated-at.bofh.it>
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 <jolsa@kernel.org>
---
 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

[toc] | [next] | [standalone]


#1354724 — Re: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event

FromNamhyung Kim <namhyung@kernel.org>
Date2016-03-10 01:50 +0100
SubjectRe: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event
Message-ID<raWXF-7BC-21@gated-at.bofh.it>
In reply to#1354434
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 <jolsa@kernel.org>

Acked-by: Namhyung Kim <namhyung@kernel.org>

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
> 

[toc] | [prev] | [next] | [standalone]


#1355691 — Re: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event

FromJiri Olsa <jolsa@redhat.com>
Date2016-03-11 09:40 +0100
SubjectRe: [PATCH 2/5] ftrace perf: Move exclude_kernel tracepoint check to init event
Message-ID<rbqM2-3qq-11@gated-at.bofh.it>
In reply to#1354724
On Thu, Mar 10, 2016 at 09:39:55AM +0900, Namhyung Kim wrote:
> 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 <jolsa@kernel.org>
> 
> Acked-by: Namhyung Kim <namhyung@kernel.org>
> 
> Maybe we need to improve the error message later.

yep, working on that ;-)

thanks,
jirka

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web