ext4: Add new tracepoints to debug delayed allocation space functions
[safe/jmp/linux-2.6] / include / trace / syscall.h
index 3951d77..961fda3 100644 (file)
@@ -2,53 +2,59 @@
 #define _TRACE_SYSCALL_H
 
 #include <linux/tracepoint.h>
+#include <linux/unistd.h>
+#include <linux/ftrace_event.h>
 
 #include <asm/ptrace.h>
 
 
-extern void syscall_regfunc(void);
-extern void syscall_unregfunc(void);
-
-DECLARE_TRACE_WITH_CALLBACK(syscall_enter,
-       TP_PROTO(struct pt_regs *regs, long id),
-       TP_ARGS(regs, id),
-       syscall_regfunc,
-       syscall_unregfunc
-);
-
-DECLARE_TRACE_WITH_CALLBACK(syscall_exit,
-       TP_PROTO(struct pt_regs *regs, long ret),
-       TP_ARGS(regs, ret),
-       syscall_regfunc,
-       syscall_unregfunc
-);
-
 /*
  * A syscall entry in the ftrace syscalls array.
  *
  * @name: name of the syscall
+ * @syscall_nr: number of the syscall
  * @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_event: associated syscall_enter trace event
+ * @exit_event: associated syscall_exit trace event
  */
 struct syscall_metadata {
        const char      *name;
+       int             syscall_nr;
        int             nb_args;
        const char      **types;
        const char      **args;
+
+       struct ftrace_event_call *enter_event;
+       struct ftrace_event_call *exit_event;
 };
 
 #ifdef CONFIG_FTRACE_SYSCALLS
-extern struct syscall_metadata *syscall_nr_to_meta(int nr);
-extern void start_ftrace_syscalls(void);
-extern void stop_ftrace_syscalls(void);
-extern void ftrace_syscall_enter(struct pt_regs *regs);
-extern void ftrace_syscall_exit(struct pt_regs *regs);
-#else
-static inline void start_ftrace_syscalls(void)                 { }
-static inline void stop_ftrace_syscalls(void)                  { }
-static inline void ftrace_syscall_enter(struct pt_regs *regs)  { }
-static inline void ftrace_syscall_exit(struct pt_regs *regs)   { }
+extern unsigned long arch_syscall_addr(int nr);
+extern int init_syscall_trace(struct ftrace_event_call *call);
+
+extern int syscall_enter_format(struct ftrace_event_call *call,
+                               struct trace_seq *s);
+extern int syscall_exit_format(struct ftrace_event_call *call,
+                               struct trace_seq *s);
+extern int syscall_enter_define_fields(struct ftrace_event_call *call);
+extern int syscall_exit_define_fields(struct ftrace_event_call *call);
+extern int reg_event_syscall_enter(struct ftrace_event_call *call);
+extern void unreg_event_syscall_enter(struct ftrace_event_call *call);
+extern int reg_event_syscall_exit(struct ftrace_event_call *call);
+extern void unreg_event_syscall_exit(struct ftrace_event_call *call);
+extern int
+ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s);
+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
+#ifdef CONFIG_EVENT_PROFILE
+int prof_sysenter_enable(struct ftrace_event_call *call);
+void prof_sysenter_disable(struct ftrace_event_call *call);
+int prof_sysexit_enable(struct ftrace_event_call *call);
+void prof_sysexit_disable(struct ftrace_event_call *call);
+
 #endif
 
 #endif /* _TRACE_SYSCALL_H */