tracing: Remove open-coded __trace_add_event_call()

Let trace_module_add_events() and event_trace_init() call
__trace_add_event_call().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4BFA37E9.1020106@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Li Zefan 2010-05-24 16:25:13 +08:00 коммит произвёл Steven Rostedt
Родитель ffb9f99528
Коммит 67ead0a6ce
1 изменённых файлов: 19 добавлений и 51 удалений

Просмотреть файл

@ -1009,11 +1009,17 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
return 0; return 0;
} }
static int __trace_add_event_call(struct ftrace_event_call *call) static int
__trace_add_event_call(struct ftrace_event_call *call, struct module *mod,
const struct file_operations *id,
const struct file_operations *enable,
const struct file_operations *filter,
const struct file_operations *format)
{ {
struct dentry *d_events; struct dentry *d_events;
int ret; int ret;
/* The linker may leave blanks */
if (!call->name) if (!call->name)
return -EINVAL; return -EINVAL;
@ -1021,8 +1027,8 @@ static int __trace_add_event_call(struct ftrace_event_call *call)
ret = call->class->raw_init(call); ret = call->class->raw_init(call);
if (ret < 0) { if (ret < 0) {
if (ret != -ENOSYS) if (ret != -ENOSYS)
pr_warning("Could not initialize trace " pr_warning("Could not initialize trace events/%s\n",
"events/%s\n", call->name); call->name);
return ret; return ret;
} }
} }
@ -1031,11 +1037,10 @@ static int __trace_add_event_call(struct ftrace_event_call *call)
if (!d_events) if (!d_events)
return -ENOENT; return -ENOENT;
ret = event_create_dir(call, d_events, &ftrace_event_id_fops, ret = event_create_dir(call, d_events, id, enable, filter, format);
&ftrace_enable_fops, &ftrace_event_filter_fops,
&ftrace_event_format_fops);
if (!ret) if (!ret)
list_add(&call->list, &ftrace_events); list_add(&call->list, &ftrace_events);
call->mod = mod;
return ret; return ret;
} }
@ -1045,7 +1050,10 @@ int trace_add_event_call(struct ftrace_event_call *call)
{ {
int ret; int ret;
mutex_lock(&event_mutex); mutex_lock(&event_mutex);
ret = __trace_add_event_call(call); ret = __trace_add_event_call(call, NULL, &ftrace_event_id_fops,
&ftrace_enable_fops,
&ftrace_event_filter_fops,
&ftrace_event_format_fops);
mutex_unlock(&event_mutex); mutex_unlock(&event_mutex);
return ret; return ret;
} }
@ -1162,8 +1170,6 @@ static void trace_module_add_events(struct module *mod)
{ {
struct ftrace_module_file_ops *file_ops = NULL; struct ftrace_module_file_ops *file_ops = NULL;
struct ftrace_event_call *call, *start, *end; struct ftrace_event_call *call, *start, *end;
struct dentry *d_events;
int ret;
start = mod->trace_events; start = mod->trace_events;
end = mod->trace_events + mod->num_trace_events; end = mod->trace_events + mod->num_trace_events;
@ -1171,38 +1177,14 @@ static void trace_module_add_events(struct module *mod)
if (start == end) if (start == end)
return; return;
d_events = event_trace_events_dir();
if (!d_events)
return;
for_each_event(call, start, end) {
/* The linker may leave blanks */
if (!call->name)
continue;
if (call->class->raw_init) {
ret = call->class->raw_init(call);
if (ret < 0) {
if (ret != -ENOSYS)
pr_warning("Could not initialize trace "
"point events/%s\n", call->name);
continue;
}
}
/*
* This module has events, create file ops for this module
* if not already done.
*/
if (!file_ops) {
file_ops = trace_create_file_ops(mod); file_ops = trace_create_file_ops(mod);
if (!file_ops) if (!file_ops)
return; return;
}
call->mod = mod; for_each_event(call, start, end) {
ret = event_create_dir(call, d_events, __trace_add_event_call(call, mod,
&file_ops->id, &file_ops->enable, &file_ops->id, &file_ops->enable,
&file_ops->filter, &file_ops->format); &file_ops->filter, &file_ops->format);
if (!ret)
list_add(&call->list, &ftrace_events);
} }
} }
@ -1333,24 +1315,10 @@ static __init int event_trace_init(void)
pr_warning("tracing: Failed to allocate common fields"); pr_warning("tracing: Failed to allocate common fields");
for_each_event(call, __start_ftrace_events, __stop_ftrace_events) { for_each_event(call, __start_ftrace_events, __stop_ftrace_events) {
/* The linker may leave blanks */ __trace_add_event_call(call, NULL, &ftrace_event_id_fops,
if (!call->name)
continue;
if (call->class->raw_init) {
ret = call->class->raw_init(call);
if (ret < 0) {
if (ret != -ENOSYS)
pr_warning("Could not initialize trace "
"point events/%s\n", call->name);
continue;
}
}
ret = event_create_dir(call, d_events, &ftrace_event_id_fops,
&ftrace_enable_fops, &ftrace_enable_fops,
&ftrace_event_filter_fops, &ftrace_event_filter_fops,
&ftrace_event_format_fops); &ftrace_event_format_fops);
if (!ret)
list_add(&call->list, &ftrace_events);
} }
while (true) { while (true) {