ftrace: ensure every event gets an id

Impact: widen user-space visibe event IDs to all events

Previously only TRACE_EVENT events got ids, because only they
generated raw output which needs to be demuxed from the trace.

In order to provide a unique ID for each event, register everybody,
regardless.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <20090319194233.464914218@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Peter Zijlstra 2009-03-19 20:26:14 +01:00 committed by Ingo Molnar
parent 23725aeeab
commit 28bea271e5
2 changed files with 19 additions and 1 deletions

View file

@ -130,7 +130,19 @@ static void ftrace_unreg_event_##call(void) \
{ \ { \
unregister_trace_##call(ftrace_event_##call); \ 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 #undef TRACE_FORMAT
#define TRACE_FORMAT(call, proto, args, fmt) \ #define TRACE_FORMAT(call, proto, args, fmt) \
@ -140,6 +152,7 @@ __attribute__((__aligned__(4))) \
__attribute__((section("_ftrace_events"))) event_##call = { \ __attribute__((section("_ftrace_events"))) event_##call = { \
.name = #call, \ .name = #call, \
.system = __stringify(TRACE_SYSTEM), \ .system = __stringify(TRACE_SYSTEM), \
.raw_init = ftrace_init_event_##call, \
.regfunc = ftrace_reg_event_##call, \ .regfunc = ftrace_reg_event_##call, \
.unregfunc = ftrace_unreg_event_##call, \ .unregfunc = ftrace_unreg_event_##call, \
} }

View file

@ -481,6 +481,11 @@ int register_ftrace_event(struct trace_event *event)
mutex_lock(&trace_event_mutex); mutex_lock(&trace_event_mutex);
if (!event) {
ret = next_event_type++;
goto out;
}
if (!event->type) if (!event->type)
event->type = next_event_type++; event->type = next_event_type++;
else if (event->type > __TRACE_LAST_TYPE) { else if (event->type > __TRACE_LAST_TYPE) {