]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/trace/trace_events_stage_3.h
tracing: remove CALLER_ADDR2 from wakeup tracer
[linux-2.6-omap-h63xx.git] / kernel / trace / trace_events_stage_3.h
index ae2e323df0c7bb8a68efc07d767de008b177709a..9d2fa78ceccae5973c83c37bdc1e363b214d0d3b 100644 (file)
 #undef TP_FMT
 #define TP_FMT(fmt, args...)   fmt "\n", ##args
 
+#ifdef CONFIG_EVENT_PROFILE
+#define _TRACE_PROFILE(call, proto, args)                              \
+static void ftrace_profile_##call(proto)                               \
+{                                                                      \
+       extern void perf_tpcounter_event(int);                          \
+       perf_tpcounter_event(event_##call.id);                          \
+}                                                                      \
+                                                                       \
+static int ftrace_profile_enable_##call(struct ftrace_event_call *call) \
+{                                                                      \
+       int ret = 0;                                                    \
+                                                                       \
+       if (!atomic_inc_return(&call->profile_count))                   \
+               ret = register_trace_##call(ftrace_profile_##call);     \
+                                                                       \
+       return ret;                                                     \
+}                                                                      \
+                                                                       \
+static void ftrace_profile_disable_##call(struct ftrace_event_call *call) \
+{                                                                      \
+       if (atomic_add_negative(-1, &call->profile_count))              \
+               unregister_trace_##call(ftrace_profile_##call);         \
+}
+
+#define _TRACE_PROFILE_INIT(call)                                      \
+       .profile_count = ATOMIC_INIT(-1),                               \
+       .profile_enable = ftrace_profile_enable_##call,                 \
+       .profile_disable = ftrace_profile_disable_##call,
+
+#else
+#define _TRACE_PROFILE(call, proto, args)
+#define _TRACE_PROFILE_INIT(call)
+#endif
+
 #define _TRACE_FORMAT(call, proto, args, fmt)                          \
 static void ftrace_event_##call(proto)                                 \
 {                                                                      \
@@ -130,18 +164,33 @@ static void ftrace_unreg_event_##call(void)                               \
 {                                                                      \
        unregister_trace_##call(ftrace_event_##call);                   \
 }                                                                      \
-
+                                                                       \
+static struct ftrace_event_call event_##call;                          \
+                                                                       \
+static int ftrace_init_event_##call(void)                              \
+{                                                                      \
+       int id;                                                         \
+                                                                       \
+       id = register_ftrace_event(NULL);                               \
+       if (!id)                                                        \
+               return -ENODEV;                                         \
+       event_##call.id = id;                                           \
+       return 0;                                                       \
+}
 
 #undef TRACE_FORMAT
 #define TRACE_FORMAT(call, proto, args, fmt)                           \
 _TRACE_FORMAT(call, PARAMS(proto), PARAMS(args), PARAMS(fmt))          \
+_TRACE_PROFILE(call, PARAMS(proto), PARAMS(args))                      \
 static struct ftrace_event_call __used                                 \
 __attribute__((__aligned__(4)))                                                \
 __attribute__((section("_ftrace_events"))) event_##call = {            \
        .name                   = #call,                                \
        .system                 = __stringify(TRACE_SYSTEM),            \
+       .raw_init               = ftrace_init_event_##call,             \
        .regfunc                = ftrace_reg_event_##call,              \
        .unregfunc              = ftrace_unreg_event_##call,            \
+       _TRACE_PROFILE_INIT(call)                                       \
 }
 
 #undef __entry
@@ -149,11 +198,13 @@ __attribute__((section("_ftrace_events"))) event_##call = {               \
 
 #undef TRACE_EVENT
 #define TRACE_EVENT(call, proto, args, tstruct, assign, print)         \
+_TRACE_PROFILE(call, PARAMS(proto), PARAMS(args))                      \
                                                                        \
 static struct ftrace_event_call event_##call;                          \
                                                                        \
 static void ftrace_raw_event_##call(proto)                             \
 {                                                                      \
+       struct ftrace_event_call *call = &event_##call;                 \
        struct ring_buffer_event *event;                                \
        struct ftrace_raw_##call *entry;                                \
        unsigned long irq_flags;                                        \
@@ -171,7 +222,11 @@ static void ftrace_raw_event_##call(proto)                         \
                                                                        \
        assign;                                                         \
                                                                        \
-       trace_current_buffer_unlock_commit(event, irq_flags, pc);       \
+       if (call->preds && !filter_match_preds(call, entry))            \
+               ring_buffer_event_discard(event);                       \
+                                                                       \
+       trace_nowake_buffer_unlock_commit(event, irq_flags, pc);        \
+                                                                       \
 }                                                                      \
                                                                        \
 static int ftrace_raw_reg_event_##call(void)                           \
@@ -202,6 +257,7 @@ static int ftrace_raw_init_event_##call(void)                               \
        if (!id)                                                        \
                return -ENODEV;                                         \
        event_##call.id = id;                                           \
+       INIT_LIST_HEAD(&event_##call.fields);                           \
        return 0;                                                       \
 }                                                                      \
                                                                        \
@@ -214,4 +270,12 @@ __attribute__((section("_ftrace_events"))) event_##call = {                \
        .regfunc                = ftrace_raw_reg_event_##call,          \
        .unregfunc              = ftrace_raw_unreg_event_##call,        \
        .show_format            = ftrace_format_##call,                 \
+       .define_fields          = ftrace_define_fields_##call,          \
+       _TRACE_PROFILE_INIT(call)                                       \
 }
+
+#include <trace/trace_event_types.h>
+
+#undef _TRACE_PROFILE
+#undef _TRACE_PROFILE_INIT
+