From: Jason Baron <jbaron@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: fweisbec@gmail.com, mingo@elte.hu, laijs@cn.fujitsu.com,
rostedt@goodmis.org, peterz@infradead.org,
mathieu.desnoyers@polymtl.ca, jiayingz@google.com,
mbligh@google.com, lizf@cn.fujitsu.com
Subject: [PATCH 09/12] add support traceopint ids
Date: Mon, 10 Aug 2009 16:52:53 -0400 [thread overview]
Message-ID: <996d6713d889ddf697d3d4fdbb08645fa8343dd5.1249932670.git.jbaron@redhat.com> (raw)
In-Reply-To: <cover.1249932670.git.jbaron@redhat.com>
This patch associates an id with each syscall trace event, so that we can
identify each syscall trace event using the 'perf' tool.
Signed-off-by: Jason Baron <jbaron@redhat.com>
---
arch/x86/kernel/ftrace.c | 10 ++++++++++
include/linux/syscalls.h | 22 ++++++++++++++++++----
include/trace/syscall.h | 8 ++++++++
kernel/trace/trace.h | 6 ------
kernel/trace/trace_syscalls.c | 26 ++++++++++++++++----------
5 files changed, 52 insertions(+), 20 deletions(-)
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 0d93d40..3cff121 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -516,6 +516,16 @@ int syscall_name_to_nr(char *name)
return -1;
}
+void set_syscall_enter_id(int num, int id)
+{
+ syscalls_metadata[num]->enter_id = id;
+}
+
+void set_syscall_exit_id(int num, int id)
+{
+ syscalls_metadata[num]->exit_id = id;
+}
+
static int __init arch_init_ftrace_syscalls(void)
{
int i;
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 5e5b4d3..ce4b01c 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -116,13 +116,20 @@ struct perf_counter_attr;
#define SYSCALL_TRACE_ENTER_EVENT(sname) \
static struct ftrace_event_call event_enter_##sname; \
+ struct trace_event enter_syscall_print_##sname = { \
+ .trace = print_syscall_enter, \
+ }; \
static int init_enter_##sname(void) \
{ \
- int num; \
+ int num, id; \
num = syscall_name_to_nr("sys"#sname); \
if (num < 0) \
return -ENOSYS; \
- register_ftrace_event(&event_syscall_enter); \
+ id = register_ftrace_event(&enter_syscall_print_##sname);\
+ if (!id) \
+ return -ENODEV; \
+ event_enter_##sname.id = id; \
+ set_syscall_enter_id(num, id); \
INIT_LIST_HEAD(&event_enter_##sname.fields); \
init_preds(&event_enter_##sname); \
return 0; \
@@ -142,13 +149,20 @@ struct perf_counter_attr;
#define SYSCALL_TRACE_EXIT_EVENT(sname) \
static struct ftrace_event_call event_exit_##sname; \
+ struct trace_event exit_syscall_print_##sname = { \
+ .trace = print_syscall_exit, \
+ }; \
static int init_exit_##sname(void) \
{ \
- int num; \
+ int num, id; \
num = syscall_name_to_nr("sys"#sname); \
if (num < 0) \
return -ENOSYS; \
- register_ftrace_event(&event_syscall_exit); \
+ id = register_ftrace_event(&exit_syscall_print_##sname);\
+ if (!id) \
+ return -ENODEV; \
+ event_exit_##sname.id = id; \
+ set_syscall_exit_id(num, id); \
INIT_LIST_HEAD(&event_exit_##sname.fields); \
init_preds(&event_exit_##sname); \
return 0; \
diff --git a/include/trace/syscall.h b/include/trace/syscall.h
index 73fb8b4..df62840 100644
--- a/include/trace/syscall.h
+++ b/include/trace/syscall.h
@@ -32,23 +32,31 @@ DECLARE_TRACE_WITH_CALLBACK(syscall_exit,
* @nb_args: number of parameters it takes
* @types: list of types as strings
* @args: list of args as strings (args[i] matches types[i])
+ * @enter_id: associated ftrace enter event id
+ * @exit_id: associated ftrace exit event id
*/
struct syscall_metadata {
const char *name;
int nb_args;
const char **types;
const char **args;
+ int enter_id;
+ int exit_id;
};
#ifdef CONFIG_FTRACE_SYSCALLS
extern struct syscall_metadata *syscall_nr_to_meta(int nr);
extern int syscall_name_to_nr(char *name);
+void set_syscall_enter_id(int num, int id);
+void set_syscall_exit_id(int num, int id);
extern struct trace_event event_syscall_enter;
extern struct trace_event event_syscall_exit;
extern int reg_event_syscall_enter(void *ptr);
extern void unreg_event_syscall_enter(void *ptr);
extern int reg_event_syscall_exit(void *ptr);
extern void unreg_event_syscall_exit(void *ptr);
+enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags);
+enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags);
#endif
#endif /* _TRACE_SYSCALL_H */
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 44308f3..606073c 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -38,8 +38,6 @@ enum trace_type {
TRACE_GRAPH_ENT,
TRACE_USER_STACK,
TRACE_HW_BRANCHES,
- TRACE_SYSCALL_ENTER,
- TRACE_SYSCALL_EXIT,
TRACE_KMEM_ALLOC,
TRACE_KMEM_FREE,
TRACE_POWER,
@@ -334,10 +332,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 syscall_trace_enter, \
- TRACE_SYSCALL_ENTER); \
- IF_ASSIGN(var, ent, struct syscall_trace_exit, \
- TRACE_SYSCALL_EXIT); \
IF_ASSIGN(var, ent, struct ksym_trace_entry, TRACE_KSYM);\
__ftrace_bad_type(); \
} while (0)
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index c7ae25e..e58a9c1 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -36,14 +36,18 @@ print_syscall_enter(struct trace_iterator *iter, int flags)
struct syscall_metadata *entry;
int i, ret, syscall;
- trace_assign_type(trace, ent);
-
+ trace = (typeof(trace))ent;
syscall = trace->nr;
-
entry = syscall_nr_to_meta(syscall);
+
if (!entry)
goto end;
+ if (entry->enter_id != ent->type) {
+ WARN_ON_ONCE(1);
+ goto end;
+ }
+
ret = trace_seq_printf(s, "%s(", entry->name);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -78,16 +82,20 @@ print_syscall_exit(struct trace_iterator *iter, int flags)
struct syscall_metadata *entry;
int ret;
- trace_assign_type(trace, ent);
-
+ trace = (typeof(trace))ent;
syscall = trace->nr;
-
entry = syscall_nr_to_meta(syscall);
+
if (!entry) {
trace_seq_printf(s, "\n");
return TRACE_TYPE_HANDLED;
}
+ if (entry->exit_id != ent->type) {
+ WARN_ON_ONCE(1);
+ return TRACE_TYPE_UNHANDLED;
+ }
+
ret = trace_seq_printf(s, "%s -> 0x%lx\n", entry->name,
trace->ret);
if (!ret)
@@ -114,7 +122,7 @@ void ftrace_syscall_enter(struct pt_regs *regs, long id)
size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args;
- event = trace_current_buffer_lock_reserve(TRACE_SYSCALL_ENTER, size,
+ event = trace_current_buffer_lock_reserve(sys_data->enter_id, size,
0, 0);
if (!event)
return;
@@ -142,7 +150,7 @@ void ftrace_syscall_exit(struct pt_regs *regs, long ret)
if (!sys_data)
return;
- event = trace_current_buffer_lock_reserve(TRACE_SYSCALL_EXIT,
+ event = trace_current_buffer_lock_reserve(sys_data->exit_id,
sizeof(*entry), 0, 0);
if (!event)
return;
@@ -239,10 +247,8 @@ void unreg_event_syscall_exit(void *ptr)
struct trace_event event_syscall_enter = {
.trace = print_syscall_enter,
- .type = TRACE_SYSCALL_ENTER
};
struct trace_event event_syscall_exit = {
.trace = print_syscall_exit,
- .type = TRACE_SYSCALL_EXIT
};
--
1.6.2.5
next prev parent reply other threads:[~2009-08-10 20:56 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-10 20:52 [PATCH 00/12] add syscall tracepoints V3 Jason Baron
2009-08-10 20:52 ` [PATCH 01/12] map syscall name to number Jason Baron
2009-08-10 20:52 ` [PATCH 02/12] call arch_init_ftrace_syscalls at boot Jason Baron
2009-08-10 20:52 ` [PATCH 03/12] add DECLARE_TRACE_WITH_CALLBACK() macro Jason Baron
2009-08-10 20:52 ` [PATCH 04/12] add syscall tracepoints Jason Baron
2009-08-10 20:52 ` [PATCH 05/12] update FTRACE_SYSCALL_MAX Jason Baron
2009-08-11 11:00 ` Frederic Weisbecker
2009-08-11 19:39 ` Matt Fleming
2009-08-24 13:41 ` Paul Mundt
2009-08-24 14:06 ` Jason Baron
2009-08-24 14:15 ` Paul Mundt
2009-08-24 14:34 ` Frederic Weisbecker
2009-08-24 14:37 ` Paul Mundt
2009-08-24 14:42 ` Jason Baron
2009-08-24 14:50 ` Paul Mundt
2009-08-24 18:34 ` Ingo Molnar
2009-08-10 20:52 ` [PATCH 06/12] trace_event - raw_init bailout Jason Baron
2009-08-10 20:52 ` [PATCH 07/12] add ftrace_event_call void * 'data' field Jason Baron
2009-08-11 10:09 ` Frederic Weisbecker
2009-08-17 22:19 ` Steven Rostedt
2009-08-17 23:09 ` Frederic Weisbecker
2009-08-18 0:06 ` Steven Rostedt
2009-08-10 20:52 ` [PATCH 08/12] add trace events for each syscall entry/exit Jason Baron
2009-08-11 10:50 ` Frederic Weisbecker
2009-08-11 11:45 ` Ingo Molnar
2009-08-11 12:01 ` Frederic Weisbecker
2009-08-25 12:50 ` Hendrik Brueckner
2009-08-25 14:15 ` Frederic Weisbecker
2009-08-25 16:02 ` Hendrik Brueckner
2009-08-25 16:20 ` Mathieu Desnoyers
2009-08-25 16:59 ` Frederic Weisbecker
2009-08-25 17:31 ` Frederic Weisbecker
2009-08-25 18:31 ` Mathieu Desnoyers
2009-08-25 19:42 ` Frederic Weisbecker
2009-08-25 19:51 ` Mathieu Desnoyers
2009-08-26 0:19 ` Frederic Weisbecker
2009-08-26 0:42 ` Mathieu Desnoyers
2009-08-26 7:28 ` Ingo Molnar
2009-08-26 17:11 ` Mathieu Desnoyers
2009-08-26 6:48 ` Peter Zijlstra
2009-08-25 22:04 ` Martin Schwidefsky
2009-08-26 7:38 ` Heiko Carstens
2009-08-26 12:32 ` Frederic Weisbecker
2009-08-26 6:21 ` Peter Zijlstra
2009-08-26 17:08 ` Mathieu Desnoyers
2009-08-26 18:41 ` Christoph Hellwig
2009-08-26 18:42 ` Christoph Hellwig
2009-08-26 19:01 ` Mathieu Desnoyers
2009-08-26 7:10 ` Peter Zijlstra
2009-08-26 17:10 ` Mathieu Desnoyers
2009-08-26 17:24 ` H. Peter Anvin
2009-08-25 17:04 ` Jason Baron
2009-08-25 18:15 ` Mathieu Desnoyers
2009-08-26 12:35 ` Frederic Weisbecker
2009-08-26 12:59 ` Heiko Carstens
2009-08-26 13:30 ` Frederic Weisbecker
2009-08-26 13:48 ` Steven Rostedt
2009-08-26 13:53 ` Frederic Weisbecker
2009-08-26 14:44 ` Steven Rostedt
2009-08-26 13:56 ` Peter Zijlstra
2009-08-26 14:41 ` Steven Rostedt
2009-08-26 14:10 ` Heiko Carstens
2009-08-26 14:27 ` Frederic Weisbecker
2009-08-26 14:43 ` Steven Rostedt
2009-08-26 16:14 ` Frederic Weisbecker
2009-08-26 14:43 ` Steven Rostedt
2009-08-26 14:41 ` Hendrik Brueckner
2009-08-28 12:28 ` [tip:tracing/core] tracing: Don't trace kernel thread syscalls tip-bot for Hendrik Brueckner
2009-08-25 21:40 ` [PATCH 08/12] add trace events for each syscall entry/exit Frederic Weisbecker
2009-08-25 22:09 ` Frederic Weisbecker
2009-08-26 7:47 ` Heiko Carstens
2009-08-28 12:27 ` [tip:tracing/core] tracing: Check invalid syscall nr while tracing syscalls tip-bot for Hendrik Brueckner
2009-08-10 20:52 ` Jason Baron [this message]
2009-08-11 11:28 ` [PATCH 09/12] add support traceopint ids Frederic Weisbecker
2009-08-10 20:53 ` [PATCH 10/12] add perf counter support Jason Baron
2009-08-11 12:12 ` Frederic Weisbecker
2009-08-11 12:17 ` Ingo Molnar
2009-08-11 12:25 ` Frederic Weisbecker
2009-08-10 20:53 ` [PATCH 11/12] add more namespace area to 'perf list' output Jason Baron
2009-08-10 20:53 ` [PATCH 12/12] convert x86_64 mmap and uname to use DEFINE_SYSCALL Jason Baron
2009-08-25 12:31 ` [PATCH 00/12] add syscall tracepoints V3 - s390 arch update Hendrik Brueckner
2009-08-25 13:52 ` Frederic Weisbecker
2009-08-25 14:39 ` Heiko Carstens
2009-08-25 19:52 ` Frederic Weisbecker
2009-08-25 15:38 ` Hendrik Brueckner
2009-08-26 16:53 ` Frederic Weisbecker
2009-08-27 7:27 ` [PATCH]: tracing: s390 arch updates for tracing syscalls Hendrik Brueckner
2009-08-28 12:27 ` [tip:tracing/core] tracing: Add syscall tracepoints - s390 arch update tip-bot for Hendrik Brueckner
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=996d6713d889ddf697d3d4fdbb08645fa8343dd5.1249932670.git.jbaron@redhat.com \
--to=jbaron@redhat.com \
--cc=fweisbec@gmail.com \
--cc=jiayingz@google.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mbligh@google.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/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®