diff options
| author | Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | 2013-05-09 14:44:41 +0900 | 
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2013-05-09 20:19:48 -0400 | 
| commit | 2b106aabe6c566ba19c352f22683381e1ea41326 (patch) | |
| tree | b97934b7082be136b32e84cd5eb22d2296168878 /kernel | |
| parent | 48182bd2261766b810e4e4269a23236c1ace63fb (diff) | |
| download | linux-2b106aabe6c566ba19c352f22683381e1ea41326.tar.bz2 | |
tracing/kprobes: Pass trace_probe directly from dispatcher
Pass the pointer of struct trace_probe directly from probe
dispatcher to handlers. This removes redundant container_of
macro uses. Same thing has already done in trace_uprobe.
Link: http://lkml.kernel.org/r/20130509054441.30398.69112.stgit@mhiramat-M0-7522
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Tom Zanussi <tom.zanussi@intel.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/trace_kprobe.c | 33 | 
1 files changed, 16 insertions, 17 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 6e86fbbae337..9ca44fc3fb0b 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -723,9 +723,9 @@ static __kprobes void store_trace_args(int ent_size, struct trace_probe *tp,  }  /* Kprobe handler */ -static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs) +static __kprobes void +kprobe_trace_func(struct trace_probe *tp, struct pt_regs *regs)  { -	struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp);  	struct kprobe_trace_entry_head *entry;  	struct ring_buffer_event *event;  	struct ring_buffer *buffer; @@ -745,7 +745,7 @@ static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)  		return;  	entry = ring_buffer_event_data(event); -	entry->ip = (unsigned long)kp->addr; +	entry->ip = (unsigned long)tp->rp.kp.addr;  	store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize);  	if (!filter_current_check_discard(buffer, call, entry, event)) @@ -754,10 +754,10 @@ static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)  }  /* Kretprobe handler */ -static __kprobes void kretprobe_trace_func(struct kretprobe_instance *ri, -					  struct pt_regs *regs) +static __kprobes void +kretprobe_trace_func(struct trace_probe *tp, struct kretprobe_instance *ri, +		     struct pt_regs *regs)  { -	struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp);  	struct kretprobe_trace_entry_head *entry;  	struct ring_buffer_event *event;  	struct ring_buffer *buffer; @@ -973,10 +973,9 @@ static int set_print_fmt(struct trace_probe *tp)  #ifdef CONFIG_PERF_EVENTS  /* Kprobe profile handler */ -static __kprobes void kprobe_perf_func(struct kprobe *kp, -					 struct pt_regs *regs) +static __kprobes void +kprobe_perf_func(struct trace_probe *tp, struct pt_regs *regs)  { -	struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp);  	struct ftrace_event_call *call = &tp->call;  	struct kprobe_trace_entry_head *entry;  	struct hlist_head *head; @@ -995,7 +994,7 @@ static __kprobes void kprobe_perf_func(struct kprobe *kp,  	if (!entry)  		return; -	entry->ip = (unsigned long)kp->addr; +	entry->ip = (unsigned long)tp->rp.kp.addr;  	memset(&entry[1], 0, dsize);  	store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry[1], dsize); @@ -1005,10 +1004,10 @@ static __kprobes void kprobe_perf_func(struct kprobe *kp,  }  /* Kretprobe profile handler */ -static __kprobes void kretprobe_perf_func(struct kretprobe_instance *ri, -					    struct pt_regs *regs) +static __kprobes void +kretprobe_perf_func(struct trace_probe *tp, struct kretprobe_instance *ri, +		    struct pt_regs *regs)  { -	struct trace_probe *tp = container_of(ri->rp, struct trace_probe, rp);  	struct ftrace_event_call *call = &tp->call;  	struct kretprobe_trace_entry_head *entry;  	struct hlist_head *head; @@ -1074,10 +1073,10 @@ int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)  	tp->nhit++;  	if (tp->flags & TP_FLAG_TRACE) -		kprobe_trace_func(kp, regs); +		kprobe_trace_func(tp, regs);  #ifdef CONFIG_PERF_EVENTS  	if (tp->flags & TP_FLAG_PROFILE) -		kprobe_perf_func(kp, regs); +		kprobe_perf_func(tp, regs);  #endif  	return 0;	/* We don't tweek kernel, so just return 0 */  } @@ -1090,10 +1089,10 @@ int kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)  	tp->nhit++;  	if (tp->flags & TP_FLAG_TRACE) -		kretprobe_trace_func(ri, regs); +		kretprobe_trace_func(tp, ri, regs);  #ifdef CONFIG_PERF_EVENTS  	if (tp->flags & TP_FLAG_PROFILE) -		kretprobe_perf_func(ri, regs); +		kretprobe_perf_func(tp, ri, regs);  #endif  	return 0;	/* We don't tweek kernel, so just return 0 */  }  |