From: Frederic Weisbecker <fweisbec@gmail.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>,
"Masami Hiramatsu" <mhiramat@redhat.com>,
"Ananth N Mavinakayanahalli" <ananth@in.ibm.com>,
"Avi Kivity" <avi@redhat.com>, "Andi Kleen" <ak@linux.intel.com>,
"Christoph Hellwig" <hch@infradead.org>,
"Frank Ch. Eigler" <fche@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>, "Ingo Molnar" <mingo@elte.hu>,
"Jason Baron" <jbaron@redhat.com>,
"Jim Keniston" <jkenisto@us.ibm.com>,
"K.Prasad" <prasad@linux.vnet.ibm.com>,
"Lai Jiangshan" <laijs@cn.fujitsu.com>,
"Li Zefan" <lizf@cn.fujitsu.com>,
"Przemysław Pawełczyk" <przemyslaw@pawelczyk.it>,
"Roland McGrath" <roland@redhat.com>,
"Sam Ravnborg" <sam@ravnborg.org>,
"Srikar Dronamraju" <srikar@linux.vnet.ibm.com>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Tom Zanussi" <tzanussi@gmail.com>,
"Vegard Nossum" <vegard.nossum@gmail.com>,
"Frederic Weisbecker" <fweisbec@gmail.com>
Subject: [PATCH 12/18] tracing: Kprobe tracer assigns new event ids for each event
Date: Thu, 27 Aug 2009 04:32:11 +0200 [thread overview]
Message-ID: <1251340337-5640-13-git-send-email-fweisbec@gmail.com> (raw)
In-Reply-To: <1251340337-5640-1-git-send-email-fweisbec@gmail.com>
From: Masami Hiramatsu <mhiramat@redhat.com>
Assign new event ids for each kprobes event. This doesn't clear
ring_buffer when unregistering each kprobe event. Thus, if you mind
'Unknown event' messages, clear the buffer manually after changing
kprobe events.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Avi Kivity <avi@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Jason Baron <jbaron@redhat.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
Cc: Przemysław Pawełczyk <przemyslaw@pawelczyk.it>
Cc: Roland McGrath <roland@redhat.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Vegard Nossum <vegard.nossum@gmail.com>
LKML-Reference: <20090813203534.31965.49105.stgit@localhost.localdomain>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
kernel/trace/trace.h | 6 -----
kernel/trace/trace_kprobe.c | 51 ++++++++++++------------------------------
2 files changed, 15 insertions(+), 42 deletions(-)
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 667f832..f5362a0 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -38,8 +38,6 @@ enum trace_type {
TRACE_KMEM_FREE,
TRACE_POWER,
TRACE_BLK,
- TRACE_KPROBE,
- TRACE_KRETPROBE,
__TRACE_LAST_TYPE,
};
@@ -343,10 +341,6 @@ extern void __ftrace_bad_type(void);
TRACE_KMEM_ALLOC); \
IF_ASSIGN(var, ent, struct kmemtrace_free_entry, \
TRACE_KMEM_FREE); \
- IF_ASSIGN(var, ent, struct kprobe_trace_entry, \
- TRACE_KPROBE); \
- IF_ASSIGN(var, ent, struct kretprobe_trace_entry, \
- TRACE_KRETPROBE); \
__ftrace_bad_type(); \
} while (0)
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 8aeb24c..9c067bf 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -186,6 +186,7 @@ struct trace_probe {
};
const char *symbol; /* symbol name */
struct ftrace_event_call call;
+ struct trace_event event;
unsigned int nr_args;
struct fetch_func args[];
};
@@ -795,7 +796,7 @@ static __kprobes int kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
size = SIZEOF_KPROBE_TRACE_ENTRY(tp->nr_args);
- event = trace_current_buffer_lock_reserve(TRACE_KPROBE, size,
+ event = trace_current_buffer_lock_reserve(call->id, size,
irq_flags, pc);
if (!event)
return 0;
@@ -827,7 +828,7 @@ static __kprobes int kretprobe_trace_func(struct kretprobe_instance *ri,
size = SIZEOF_KRETPROBE_TRACE_ENTRY(tp->nr_args);
- event = trace_current_buffer_lock_reserve(TRACE_KRETPROBE, size,
+ event = trace_current_buffer_lock_reserve(call->id, size,
irq_flags, pc);
if (!event)
return 0;
@@ -853,7 +854,7 @@ print_kprobe_event(struct trace_iterator *iter, int flags)
struct trace_seq *s = &iter->seq;
int i;
- trace_assign_type(field, iter->ent);
+ field = (struct kprobe_trace_entry *)iter->ent;
if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
goto partial;
@@ -880,7 +881,7 @@ print_kretprobe_event(struct trace_iterator *iter, int flags)
struct trace_seq *s = &iter->seq;
int i;
- trace_assign_type(field, iter->ent);
+ field = (struct kretprobe_trace_entry *)iter->ent;
if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET))
goto partial;
@@ -906,16 +907,6 @@ partial:
return TRACE_TYPE_PARTIAL_LINE;
}
-static struct trace_event kprobe_trace_event = {
- .type = TRACE_KPROBE,
- .trace = print_kprobe_event,
-};
-
-static struct trace_event kretprobe_trace_event = {
- .type = TRACE_KRETPROBE,
- .trace = print_kretprobe_event,
-};
-
static int probe_event_enable(struct ftrace_event_call *call)
{
struct trace_probe *tp = (struct trace_probe *)call->data;
@@ -1104,35 +1095,35 @@ static int register_probe_event(struct trace_probe *tp)
/* Initialize ftrace_event_call */
call->system = "kprobes";
if (probe_is_return(tp)) {
- call->event = &kretprobe_trace_event;
- call->id = TRACE_KRETPROBE;
+ tp->event.trace = print_kretprobe_event;
call->raw_init = probe_event_raw_init;
call->show_format = kretprobe_event_show_format;
call->define_fields = kretprobe_event_define_fields;
} else {
- call->event = &kprobe_trace_event;
- call->id = TRACE_KPROBE;
+ tp->event.trace = print_kprobe_event;
call->raw_init = probe_event_raw_init;
call->show_format = kprobe_event_show_format;
call->define_fields = kprobe_event_define_fields;
}
+ call->event = &tp->event;
+ call->id = register_ftrace_event(&tp->event);
+ if (!call->id)
+ return -ENODEV;
call->enabled = 1;
call->regfunc = probe_event_enable;
call->unregfunc = probe_event_disable;
call->data = tp;
ret = trace_add_event_call(call);
- if (ret)
+ if (ret) {
pr_info("Failed to register kprobe event: %s\n", call->name);
+ unregister_ftrace_event(&tp->event);
+ }
return ret;
}
static void unregister_probe_event(struct trace_probe *tp)
{
- /*
- * Prevent to unregister event itself because the event is shared
- * among other probes.
- */
- tp->call.event = NULL;
+ /* tp->event is unregistered in trace_remove_event_call() */
trace_remove_event_call(&tp->call);
}
@@ -1141,18 +1132,6 @@ static __init int init_kprobe_trace(void)
{
struct dentry *d_tracer;
struct dentry *entry;
- int ret;
-
- ret = register_ftrace_event(&kprobe_trace_event);
- if (!ret) {
- pr_warning("Could not register kprobe_trace_event type.\n");
- return 0;
- }
- ret = register_ftrace_event(&kretprobe_trace_event);
- if (!ret) {
- pr_warning("Could not register kretprobe_trace_event type.\n");
- return 0;
- }
d_tracer = tracing_init_dentry();
if (!d_tracer)
--
1.6.2.3
next prev parent reply other threads:[~2009-08-27 2:34 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-27 2:31 [GIT PULL] tracing/kprobes: Add dynamic tracepoints + instruction decoder Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 01/18] x86: Instruction decoder API Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 02/18] x86: X86 instruction decoder build-time selftest Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 03/18] kprobes: Checks probe address is instruction boudary on x86 Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 04/18] kprobes: Cleanup fix_riprel() using insn decoder " Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 05/18] x86: Add pt_regs register and stack access APIs Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 06/18] tracing: Ftrace dynamic ftrace_event_call support Frederic Weisbecker
2009-08-27 2:47 ` Li Zefan
2009-08-27 2:56 ` Frederic Weisbecker
2009-08-27 15:07 ` Masami Hiramatsu
2009-08-27 2:32 ` [PATCH 07/18] tracing: Introduce TRACE_FIELD_ZERO() macro Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 08/18] tracing: Add kprobe-based event tracer Frederic Weisbecker
2009-08-27 7:31 ` Ingo Molnar
2009-08-27 13:48 ` Frederic Weisbecker
2009-08-27 15:38 ` Masami Hiramatsu
2009-08-27 2:32 ` [PATCH 09/18] tracing: Add kprobe-based event tracer documentation Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 10/18] tracing: Kprobe-tracer supports more than 6 arguments Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 11/18] tracing: Generate names for each kprobe event automatically Frederic Weisbecker
2009-08-27 2:32 ` Frederic Weisbecker [this message]
2009-08-27 2:32 ` [PATCH 13/18] tracing: Add kprobes event profiling interface Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 14/18] x86: Fix x86 instruction decoder selftest to check only .text Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 15/18] x86: Check awk features before generating inat-tables.c Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 16/18] tracing/kprobes: Fix format typo in trace_kprobes Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 17/18] tracing/kprobes: Change trace_arg to probe_arg Frederic Weisbecker
2009-08-27 2:32 ` [PATCH 18/18] tracing/kprobes: Dump the culprit kprobe in case of kprobe recursion Frederic Weisbecker
2009-08-27 15:30 ` Masami Hiramatsu
2009-08-27 15:34 ` Frederic Weisbecker
2009-08-27 15:52 ` Masami Hiramatsu
2009-08-27 16:30 ` Frederic Weisbecker
2009-08-27 16:45 ` Masami Hiramatsu
2009-08-27 16:45 ` Frederic Weisbecker
2009-08-27 3:34 ` [GIT PULL v2] tracing/kprobes: v1 + two fixes Frederic Weisbecker
2009-08-27 15:24 ` Ingo Molnar
2009-08-27 15:40 ` Frederic Weisbecker
2009-08-27 15:59 ` Frederic Weisbecker
2009-08-27 16:17 ` [PATCH] tracing: Undef TRACE_EVENT_FN between trace events headers inclusion Frederic Weisbecker
2009-08-27 16:36 ` [tip:tracing/core] " tip-bot for Frederic Weisbecker
2009-08-27 16:12 ` [GIT PULL v2] tracing/kprobes: v1 + two fixes Masami Hiramatsu
2009-08-27 16:35 ` Ingo Molnar
2009-08-27 16:52 ` Masami Hiramatsu
2009-08-29 11:02 ` Ingo Molnar
2009-08-28 22:13 ` [PATCH -tip tracing/kprobes 1/2] x86: Allow x86-32 instruction decoder selftest on x86-64 Masami Hiramatsu
2009-08-30 1:35 ` Frederic Weisbecker
2009-10-17 9:58 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-28 22:13 ` [PATCH -tip tracing/kprobes 2/2] x86: Remove unused config macros from instruction decoder selftest Masami Hiramatsu
2009-10-17 9:58 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 15:26 ` [GIT PULL v2] tracing/kprobes: v1 + two fixes Ingo Molnar
2009-09-16 5:30 ` Frederic Weisbecker
2009-08-27 3:34 ` [PATCH 19/18] tracing: Restore the const qualifier for field names and types definition Frederic Weisbecker
2009-08-27 15:07 ` Masami Hiramatsu
2009-08-27 3:34 ` [PATCH 20/18] tracing: Remove unneeded pointer casts Frederic Weisbecker
2009-08-27 15:08 ` Masami Hiramatsu
2009-08-27 15:00 ` [GIT PULL] tracing/kprobes: Add dynamic tracepoints + instruction decoder Masami Hiramatsu
2009-08-27 15:25 ` Frederic Weisbecker
2009-08-27 17:22 ` [PATCH -tip tracing/kprobes 1/6] kprobes/x86: Call BUG() when reentering probe into KPROBES_HIT_SS Masami Hiramatsu
2009-08-28 4:38 ` Ananth N Mavinakayanahalli
2009-08-30 1:25 ` Frederic Weisbecker
2009-10-17 9:56 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 17:23 ` [PATCH -tip tracing/kprobes 2/6] kprobes/x86-64: Allow to reenter probe on post_handler Masami Hiramatsu
2009-08-28 4:39 ` Ananth N Mavinakayanahalli
2009-10-17 9:57 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 17:23 ` [PATCH -tip tracing/kprobes 3/6] kprobes/x86: Fix to add __kprobes to in-kernel fault handing functions Masami Hiramatsu
2009-08-28 4:40 ` Ananth N Mavinakayanahalli
2009-08-30 0:50 ` Frederic Weisbecker
2009-08-30 2:43 ` Masami Hiramatsu
2009-08-30 0:53 ` Frederic Weisbecker
2009-08-30 2:49 ` Masami Hiramatsu
2009-08-30 16:09 ` Frederic Weisbecker
2009-08-31 4:00 ` Masami Hiramatsu
2009-09-01 20:09 ` Masami Hiramatsu
2009-09-02 12:58 ` Masami Hiramatsu
2009-09-03 5:46 ` Frederic Weisbecker
2009-09-04 19:06 ` Frederic Weisbecker
2009-09-04 22:29 ` Masami Hiramatsu
2009-09-08 16:32 ` [PATCH tracing/kprobes] x86: Add MMX support for instruction decoder Masami Hiramatsu
2009-09-10 22:57 ` Frederic Weisbecker
2009-10-17 9:58 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-09-08 16:54 ` [RFC PATCH tracing/kprobes] kprobes: Call vmalloc_sync_all() for avoiding in-kernel paging on kprobes Masami Hiramatsu
[not found] ` <20090908165438.24437.40931.stgit@dhcp-100-2-132.bos.redhat .com>
2009-09-08 17:03 ` system hang - I suspect a sata problem - 2.6.30.5 debug kernel jeffunit
2009-10-17 9:57 ` [tip:perf/probes] kprobes/x86: Fix to add __kprobes to in-kernel fault handing functions tip-bot for Masami Hiramatsu
2009-08-27 17:23 ` [PATCH -tip tracing/kprobes 4/6] kprobes: Fix to add __kprobes to notify_die Masami Hiramatsu
2009-08-28 4:41 ` Ananth N Mavinakayanahalli
2009-10-17 9:57 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 17:23 ` [PATCH -tip tracing/kprobes 5/6] kprobes/x86-64: Fix to move common_interrupt to .kprobes.text Masami Hiramatsu
2009-10-17 9:57 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 17:23 ` [PATCH -tip tracing/kprobes 6/6] kprobes: Prohibit to probe native_get_debugreg Masami Hiramatsu
2009-08-28 4:41 ` Ananth N Mavinakayanahalli
2009-10-17 9:57 ` [tip:perf/probes] " tip-bot for Masami Hiramatsu
2009-08-27 17:32 ` [GIT PULL] tracing/kprobes: Add dynamic tracepoints + instruction decoder Masami Hiramatsu
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=1251340337-5640-13-git-send-email-fweisbec@gmail.com \
--to=fweisbec@gmail.com \
--cc=ak@linux.intel.com \
--cc=ananth@in.ibm.com \
--cc=avi@redhat.com \
--cc=fche@redhat.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=jbaron@redhat.com \
--cc=jkenisto@us.ibm.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=prasad@linux.vnet.ibm.com \
--cc=przemyslaw@pawelczyk.it \
--cc=roland@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sam@ravnborg.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=tzanussi@gmail.com \
--cc=vegard.nossum@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®