Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 199131
b: refs/heads/master
c: 8f08201
h: refs/heads/master
i:
  199129: 3d75d7c
  199127: 697c202
v: v3
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed May 14, 2010
1 parent 6f35b2f commit 174845f
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 49 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 23e117fa44429cc054cb27d5621d64e4ced91e52
refs/heads/master: 8f0820183056ad26dabc0202115848a92f1143fc
6 changes: 5 additions & 1 deletion trunk/include/linux/ftrace_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,14 @@ void tracing_record_cmdline(struct task_struct *tsk);

struct event_filter;

struct ftrace_event_class {
char *system;
};

struct ftrace_event_call {
struct list_head list;
struct ftrace_event_class *class;
char *name;
char *system;
struct dentry *dir;
struct trace_event *event;
int enabled;
Expand Down
6 changes: 4 additions & 2 deletions trunk/include/linux/syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ struct perf_event_attr;
#define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__)
#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__)

extern struct ftrace_event_class event_class_syscalls;

#define SYSCALL_TRACE_ENTER_EVENT(sname) \
static const struct syscall_metadata __syscall_meta_##sname; \
static struct ftrace_event_call \
Expand All @@ -146,7 +148,7 @@ struct perf_event_attr;
__attribute__((section("_ftrace_events"))) \
event_enter_##sname = { \
.name = "sys_enter"#sname, \
.system = "syscalls", \
.class = &event_class_syscalls, \
.event = &enter_syscall_print_##sname, \
.raw_init = init_syscall_trace, \
.define_fields = syscall_enter_define_fields, \
Expand All @@ -168,7 +170,7 @@ struct perf_event_attr;
__attribute__((section("_ftrace_events"))) \
event_exit_##sname = { \
.name = "sys_exit"#sname, \
.system = "syscalls", \
.class = &event_class_syscalls, \
.event = &exit_syscall_print_##sname, \
.raw_init = init_syscall_trace, \
.define_fields = syscall_exit_define_fields, \
Expand Down
44 changes: 19 additions & 25 deletions trunk/include/trace/ftrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@
struct trace_entry ent; \
tstruct \
char __data[0]; \
};
}; \
\
static struct ftrace_event_class event_class_##name;

#undef DEFINE_EVENT
#define DEFINE_EVENT(template, name, proto, args) \
static struct ftrace_event_call \
Expand Down Expand Up @@ -430,22 +433,6 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \
*
* Override the macros in <trace/trace_events.h> to include the following:
*
* static void ftrace_event_<call>(proto)
* {
* event_trace_printk(_RET_IP_, "<call>: " <fmt>);
* }
*
* static int ftrace_reg_event_<call>(struct ftrace_event_call *unused)
* {
* return register_trace_<call>(ftrace_event_<call>);
* }
*
* static void ftrace_unreg_event_<call>(struct ftrace_event_call *unused)
* {
* unregister_trace_<call>(ftrace_event_<call>);
* }
*
*
* For those macros defined with TRACE_EVENT:
*
* static struct ftrace_event_call event_<call>;
Expand Down Expand Up @@ -497,17 +484,21 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \
*
* static const char print_fmt_<call>[] = <TP_printk>;
*
* static struct ftrace_event_class __used event_class_<template> = {
* .system = "<system>",
* };
*
* static struct ftrace_event_call __used
* __attribute__((__aligned__(4)))
* __attribute__((section("_ftrace_events"))) event_<call> = {
* .name = "<call>",
* .system = "<system>",
* .class = event_class_<template>,
* .raw_init = trace_event_raw_init,
* .regfunc = ftrace_reg_event_<call>,
* .unregfunc = ftrace_unreg_event_<call>,
* .regfunc = ftrace_raw_reg_event_<call>,
* .unregfunc = ftrace_raw_unreg_event_<call>,
* .print_fmt = print_fmt_<call>,
* .define_fields = ftrace_define_fields_<call>,
* }
* };
*
*/

Expand Down Expand Up @@ -627,7 +618,10 @@ static struct trace_event ftrace_event_type_##call = { \

#undef DECLARE_EVENT_CLASS
#define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
static const char print_fmt_##call[] = print;
static const char print_fmt_##call[] = print; \
static struct ftrace_event_class __used event_class_##call = { \
.system = __stringify(TRACE_SYSTEM) \
};

#undef DEFINE_EVENT
#define DEFINE_EVENT(template, call, proto, args) \
Expand All @@ -636,15 +630,15 @@ static struct ftrace_event_call __used \
__attribute__((__aligned__(4))) \
__attribute__((section("_ftrace_events"))) event_##call = { \
.name = #call, \
.system = __stringify(TRACE_SYSTEM), \
.class = &event_class_##template, \
.event = &ftrace_event_type_##call, \
.raw_init = trace_event_raw_init, \
.regfunc = ftrace_raw_reg_event_##call, \
.unregfunc = ftrace_raw_unreg_event_##call, \
.print_fmt = print_fmt_##template, \
.define_fields = ftrace_define_fields_##template, \
_TRACE_PERF_INIT(call) \
}
};

#undef DEFINE_EVENT_PRINT
#define DEFINE_EVENT_PRINT(template, call, proto, args, print) \
Expand All @@ -655,7 +649,7 @@ static struct ftrace_event_call __used \
__attribute__((__aligned__(4))) \
__attribute__((section("_ftrace_events"))) event_##call = { \
.name = #call, \
.system = __stringify(TRACE_SYSTEM), \
.class = &event_class_##template, \
.event = &ftrace_event_type_##call, \
.raw_init = trace_event_raw_init, \
.regfunc = ftrace_raw_reg_event_##call, \
Expand Down
20 changes: 10 additions & 10 deletions trunk/kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,10 @@ static int __ftrace_set_clr_event(const char *match, const char *sub,

if (match &&
strcmp(match, call->name) != 0 &&
strcmp(match, call->system) != 0)
strcmp(match, call->class->system) != 0)
continue;

if (sub && strcmp(sub, call->system) != 0)
if (sub && strcmp(sub, call->class->system) != 0)
continue;

if (event && strcmp(event, call->name) != 0)
Expand Down Expand Up @@ -355,8 +355,8 @@ static int t_show(struct seq_file *m, void *v)
{
struct ftrace_event_call *call = v;

if (strcmp(call->system, TRACE_SYSTEM) != 0)
seq_printf(m, "%s:", call->system);
if (strcmp(call->class->system, TRACE_SYSTEM) != 0)
seq_printf(m, "%s:", call->class->system);
seq_printf(m, "%s\n", call->name);

return 0;
Expand Down Expand Up @@ -453,7 +453,7 @@ system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
if (!call->name || !call->regfunc)
continue;

if (system && strcmp(call->system, system) != 0)
if (system && strcmp(call->class->system, system) != 0)
continue;

/*
Expand Down Expand Up @@ -925,8 +925,8 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
* If the trace point header did not define TRACE_SYSTEM
* then the system would be called "TRACE_SYSTEM".
*/
if (strcmp(call->system, TRACE_SYSTEM) != 0)
d_events = event_subsystem_dir(call->system, d_events);
if (strcmp(call->class->system, TRACE_SYSTEM) != 0)
d_events = event_subsystem_dir(call->class->system, d_events);

call->dir = debugfs_create_dir(call->name, d_events);
if (!call->dir) {
Expand Down Expand Up @@ -1041,7 +1041,7 @@ static void __trace_remove_event_call(struct ftrace_event_call *call)
list_del(&call->list);
trace_destroy_fields(call);
destroy_preds(call);
remove_subsystem_dir(call->system);
remove_subsystem_dir(call->class->system);
}

/* Remove an event_call */
Expand Down Expand Up @@ -1399,8 +1399,8 @@ static __init void event_trace_self_tests(void)
* syscalls as we test.
*/
#ifndef CONFIG_EVENT_TRACE_TEST_SYSCALLS
if (call->system &&
strcmp(call->system, "syscalls") == 0)
if (call->class->system &&
strcmp(call->class->system, "syscalls") == 0)
continue;
#endif

Expand Down
6 changes: 3 additions & 3 deletions trunk/kernel/trace/trace_events_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ static int init_subsystem_preds(struct event_subsystem *system)
if (!call->define_fields)
continue;

if (strcmp(call->system, system->name) != 0)
if (strcmp(call->class->system, system->name) != 0)
continue;

err = init_preds(call);
Expand All @@ -647,7 +647,7 @@ static void filter_free_subsystem_preds(struct event_subsystem *system)
if (!call->define_fields)
continue;

if (strcmp(call->system, system->name) != 0)
if (strcmp(call->class->system, system->name) != 0)
continue;

filter_disable_preds(call);
Expand Down Expand Up @@ -1252,7 +1252,7 @@ static int replace_system_preds(struct event_subsystem *system,
if (!call->define_fields)
continue;

if (strcmp(call->system, system->name) != 0)
if (strcmp(call->class->system, system->name) != 0)
continue;

/* try to see if the filter can be applied */
Expand Down
6 changes: 5 additions & 1 deletion trunk/kernel/trace/trace_export.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
#undef TRACE_SYSTEM
#define TRACE_SYSTEM ftrace

struct ftrace_event_class event_class_ftrace = {
.system = __stringify(TRACE_SYSTEM),
};

/* not needed for this file */
#undef __field_struct
#define __field_struct(type, item)
Expand Down Expand Up @@ -160,7 +164,7 @@ __attribute__((__aligned__(4))) \
__attribute__((section("_ftrace_events"))) event_##call = { \
.name = #call, \
.id = type, \
.system = __stringify(TRACE_SYSTEM), \
.class = &event_class_ftrace, \
.raw_init = ftrace_raw_init_event, \
.print_fmt = print, \
.define_fields = ftrace_define_fields_##call, \
Expand Down
12 changes: 6 additions & 6 deletions trunk/kernel/trace/trace_kprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,8 +332,8 @@ static struct trace_probe *alloc_trace_probe(const char *group,
goto error;
}

tp->call.system = kstrdup(group, GFP_KERNEL);
if (!tp->call.system)
tp->call.class->system = kstrdup(group, GFP_KERNEL);
if (!tp->call.class->system)
goto error;

INIT_LIST_HEAD(&tp->list);
Expand Down Expand Up @@ -361,7 +361,7 @@ static void free_trace_probe(struct trace_probe *tp)
for (i = 0; i < tp->nr_args; i++)
free_probe_arg(&tp->args[i]);

kfree(tp->call.system);
kfree(tp->call.class->system);
kfree(tp->call.name);
kfree(tp->symbol);
kfree(tp);
Expand All @@ -374,7 +374,7 @@ static struct trace_probe *find_probe_event(const char *event,

list_for_each_entry(tp, &probe_list, list)
if (strcmp(tp->call.name, event) == 0 &&
strcmp(tp->call.system, group) == 0)
strcmp(tp->call.class->system, group) == 0)
return tp;
return NULL;
}
Expand All @@ -399,7 +399,7 @@ static int register_trace_probe(struct trace_probe *tp)
mutex_lock(&probe_lock);

/* register as an event */
old_tp = find_probe_event(tp->call.name, tp->call.system);
old_tp = find_probe_event(tp->call.name, tp->call.class->system);
if (old_tp) {
/* delete old event */
unregister_trace_probe(old_tp);
Expand Down Expand Up @@ -798,7 +798,7 @@ static int probes_seq_show(struct seq_file *m, void *v)
char buf[MAX_ARGSTR_LEN + 1];

seq_printf(m, "%c", probe_is_return(tp) ? 'r' : 'p');
seq_printf(m, ":%s/%s", tp->call.system, tp->call.name);
seq_printf(m, ":%s/%s", tp->call.class->system, tp->call.name);

if (!tp->symbol)
seq_printf(m, " 0x%p", tp->rp.kp.addr);
Expand Down
4 changes: 4 additions & 0 deletions trunk/kernel/trace/trace_syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ static int sys_refcount_exit;
static DECLARE_BITMAP(enabled_enter_syscalls, NR_syscalls);
static DECLARE_BITMAP(enabled_exit_syscalls, NR_syscalls);

struct ftrace_event_class event_class_syscalls = {
.system = "syscalls"
};

extern unsigned long __start_syscalls_metadata[];
extern unsigned long __stop_syscalls_metadata[];

Expand Down

0 comments on commit 174845f

Please sign in to comment.