tracing: Add syscall tracepoints - s390 arch update
authorHendrik Brueckner <[email protected]>
Tue, 25 Aug 2009 12:31:11 +0000 (14:31 +0200)
committerFrederic Weisbecker <[email protected]>
Wed, 26 Aug 2009 19:29:44 +0000 (21:29 +0200)
This patch includes s390 arch updates to synchronize with latest
core changes in the syscalls tracing area.

- tracing: Map syscall name to number (syscall_name_to_nr())
- tracing: Call arch_init_ftrace_syscalls at boot
- tracing: add support tracepoint ids (set_syscall_{enter,exit}_id())

Signed-off-by: Hendrik Brueckner <[email protected]>
Cc: Jason Baron <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Lai Jiangshan <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Mathieu Desnoyers <[email protected]>
Cc: Jiaying Zhang <[email protected]>
Cc: Martin Bligh <[email protected]>
Cc: Li Zefan <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Paul Mundt <[email protected]>
LKML-Reference: <20090825123111[email protected]>
Signed-off-by: Frederic Weisbecker <[email protected]>
arch/s390/kernel/ftrace.c

index 3e298e64f0dbc26b2d90f9d99996e4c091316855..57bdcb1e3cdf0391928565dc26118e5272b3a21b 100644 (file)
@@ -220,6 +220,29 @@ struct syscall_metadata *syscall_nr_to_meta(int nr)
        return syscalls_metadata[nr];
 }
 
+int syscall_name_to_nr(char *name)
+{
+       int i;
+
+       if (!syscalls_metadata)
+               return -1;
+       for (i = 0; i < NR_syscalls; i++)
+               if (syscalls_metadata[i])
+                       if (!strcmp(syscalls_metadata[i]->name, name))
+                               return i;
+       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 struct syscall_metadata *find_syscall_meta(unsigned long syscall)
 {
        struct syscall_metadata *start;
@@ -237,24 +260,19 @@ static struct syscall_metadata *find_syscall_meta(unsigned long syscall)
        return NULL;
 }
 
-void arch_init_ftrace_syscalls(void)
+static int __init arch_init_ftrace_syscalls(void)
 {
        struct syscall_metadata *meta;
        int i;
-       static atomic_t refs;
-
-       if (atomic_inc_return(&refs) != 1)
-               goto out;
        syscalls_metadata = kzalloc(sizeof(*syscalls_metadata) * NR_syscalls,
                                    GFP_KERNEL);
        if (!syscalls_metadata)
-               goto out;
+               return -ENOMEM;
        for (i = 0; i < NR_syscalls; i++) {
                meta = find_syscall_meta((unsigned long)sys_call_table[i]);
                syscalls_metadata[i] = meta;
        }
-       return;
-out:
-       atomic_dec(&refs);
+       return 0;
 }
+arch_initcall(arch_init_ftrace_syscalls);
 #endif