All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Tom Zanussi <tom.zanussi@linux.intel.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Jean-Jacques Hiblot <jjhiblot@traphandler.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] tracing/kprobes: Add trace event trigger invocations
Date: Mon, 06 Jan 2014 10:16:27 +0900	[thread overview]
Message-ID: <52CA03EB.6020107@hitachi.com> (raw)
In-Reply-To: <1388283848.3048.1.camel@empanada>

(2013/12/29 11:24), Tom Zanussi wrote:
> Add code to the kprobe/kretprobe event functions that will invoke any
> event triggers associated with a probe's ftrace_event_file.
> 
> The code to do this is very similar to the invocation code already
> used to invoke the triggers associated with static events and
> essentially replaces the existing soft-disable checks with a superset
> that preserves the original behavior but adds the bits needed to
> support event triggers.
> 
> Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>

Looks good for me :)

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Thank you!

> ---
>  kernel/trace/trace_kprobe.c | 42 ++++++++++++++++++++++++++++++++++++------
>  1 file changed, 36 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
> index dae9541..1ee13eb 100644
> --- a/kernel/trace/trace_kprobe.c
> +++ b/kernel/trace/trace_kprobe.c
> @@ -812,12 +812,20 @@ __kprobe_trace_func(struct trace_probe *tp, struct pt_regs *regs,
>  	struct ring_buffer *buffer;
>  	int size, dsize, pc;
>  	unsigned long irq_flags;
> +	unsigned long eflags;
> +	enum event_trigger_type __tt = ETT_NONE;
>  	struct ftrace_event_call *call = &tp->call;
>  
>  	WARN_ON(call != ftrace_file->event_call);
>  
> -	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &ftrace_file->flags))
> -		return;
> +	eflags = ftrace_file->flags;
> +
> +	if (!(eflags & FTRACE_EVENT_FL_TRIGGER_COND)) {
> +		if (eflags & FTRACE_EVENT_FL_TRIGGER_MODE)
> +			event_triggers_call(ftrace_file, NULL);
> +		if (eflags & FTRACE_EVENT_FL_SOFT_DISABLED)
> +			return;
> +	}
>  
>  	local_save_flags(irq_flags);
>  	pc = preempt_count();
> @@ -835,9 +843,16 @@ __kprobe_trace_func(struct trace_probe *tp, struct pt_regs *regs,
>  	entry->ip = (unsigned long)tp->rp.kp.addr;
>  	store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize);
>  
> -	if (!filter_check_discard(ftrace_file, entry, buffer, event))
> +	if (eflags & FTRACE_EVENT_FL_TRIGGER_COND)
> +		__tt = event_triggers_call(ftrace_file, entry);
> +
> +	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &ftrace_file->flags))
> +		ring_buffer_discard_commit(buffer, event);
> +	else if (!filter_check_discard(ftrace_file, entry, buffer, event))
>  		trace_buffer_unlock_commit_regs(buffer, event,
>  						irq_flags, pc, regs);
> +	if (__tt)
> +		event_triggers_post_call(ftrace_file, __tt);
>  }
>  
>  static __kprobes void
> @@ -860,12 +875,20 @@ __kretprobe_trace_func(struct trace_probe *tp, struct kretprobe_instance *ri,
>  	struct ring_buffer *buffer;
>  	int size, pc, dsize;
>  	unsigned long irq_flags;
> +	unsigned long eflags;
> +	enum event_trigger_type __tt = ETT_NONE;
>  	struct ftrace_event_call *call = &tp->call;
>  
>  	WARN_ON(call != ftrace_file->event_call);
>  
> -	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &ftrace_file->flags))
> -		return;
> +	eflags = ftrace_file->flags;
> +
> +	if (!(eflags & FTRACE_EVENT_FL_TRIGGER_COND)) {
> +		if (eflags & FTRACE_EVENT_FL_TRIGGER_MODE)
> +			event_triggers_call(ftrace_file, NULL);
> +		if (eflags & FTRACE_EVENT_FL_SOFT_DISABLED)
> +			return;
> +	}
>  
>  	local_save_flags(irq_flags);
>  	pc = preempt_count();
> @@ -884,9 +907,16 @@ __kretprobe_trace_func(struct trace_probe *tp, struct kretprobe_instance *ri,
>  	entry->ret_ip = (unsigned long)ri->ret_addr;
>  	store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize);
>  
> -	if (!filter_check_discard(ftrace_file, entry, buffer, event))
> +	if (eflags & FTRACE_EVENT_FL_TRIGGER_COND)
> +		__tt = event_triggers_call(ftrace_file, entry);
> +
> +	if (test_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &ftrace_file->flags))
> +		ring_buffer_discard_commit(buffer, event);
> +	else if (!filter_check_discard(ftrace_file, entry, buffer, event))
>  		trace_buffer_unlock_commit_regs(buffer, event,
>  						irq_flags, pc, regs);
> +	if (__tt)
> +		event_triggers_post_call(ftrace_file, __tt);
>  }
>  
>  static __kprobes void
> 


-- 
Masami HIRAMATSU
IT Management Research Dept. Linux Technology Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com



  reply	other threads:[~2014-01-06  1:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-29  2:24 [PATCH] tracing/kprobes: Add trace event trigger invocations Tom Zanussi
2014-01-06  1:16 ` Masami Hiramatsu [this message]
2014-01-06 16:10 ` Steven Rostedt
2014-01-06 19:44   ` Tom Zanussi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52CA03EB.6020107@hitachi.com \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=jjhiblot@traphandler.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tom.zanussi@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.