aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_events.c')
-rw-r--r--kernel/trace/trace_events.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 1880a6438097..769dfd00fc85 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -102,7 +102,7 @@ static int ftrace_set_clr_event(char *buf, int set)
102 mutex_lock(&event_mutex); 102 mutex_lock(&event_mutex);
103 events_for_each(call) { 103 events_for_each(call) {
104 104
105 if (!call->name) 105 if (!call->name || !call->regfunc)
106 continue; 106 continue;
107 107
108 if (match && 108 if (match &&
@@ -207,8 +207,20 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
207 207
208 (*pos)++; 208 (*pos)++;
209 209
210 if ((unsigned long)call >= (unsigned long)__stop_ftrace_events) 210 for (;;) {
211 return NULL; 211 if ((unsigned long)call >= (unsigned long)__stop_ftrace_events)
212 return NULL;
213
214 /*
215 * The ftrace subsystem is for showing formats only.
216 * They can not be enabled or disabled via the event files.
217 */
218 if (call->regfunc)
219 break;
220
221 call++;
222 next = call;
223 }
212 224
213 m->private = ++next; 225 m->private = ++next;
214 226
@@ -338,8 +350,7 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
338 350
339#undef FIELD 351#undef FIELD
340#define FIELD(type, name) \ 352#define FIELD(type, name) \
341 #type, #name, (unsigned int)offsetof(typeof(field), name), \ 353 #type, #name, offsetof(typeof(field), name), sizeof(field.name)
342 (unsigned int)sizeof(field.name)
343 354
344static int trace_write_header(struct trace_seq *s) 355static int trace_write_header(struct trace_seq *s)
345{ 356{
@@ -347,11 +358,11 @@ static int trace_write_header(struct trace_seq *s)
347 358
348 /* struct trace_entry */ 359 /* struct trace_entry */
349 return trace_seq_printf(s, 360 return trace_seq_printf(s,
350 "\tfield:%s %s;\toffset:%u;\tsize:%u;\n" 361 "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n"
351 "\tfield:%s %s;\toffset:%u;\tsize:%u;\n" 362 "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n"
352 "\tfield:%s %s;\toffset:%u;\tsize:%u;\n" 363 "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n"
353 "\tfield:%s %s;\toffset:%u;\tsize:%u;\n" 364 "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n"
354 "\tfield:%s %s;\toffset:%u;\tsize:%u;\n" 365 "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n"
355 "\n", 366 "\n",
356 FIELD(unsigned char, type), 367 FIELD(unsigned char, type),
357 FIELD(unsigned char, flags), 368 FIELD(unsigned char, flags),
@@ -417,6 +428,13 @@ static const struct seq_operations show_set_event_seq_ops = {
417 .stop = t_stop, 428 .stop = t_stop,
418}; 429};
419 430
431static const struct file_operations ftrace_avail_fops = {
432 .open = ftrace_event_seq_open,
433 .read = seq_read,
434 .llseek = seq_lseek,
435 .release = seq_release,
436};
437
420static const struct file_operations ftrace_set_event_fops = { 438static const struct file_operations ftrace_set_event_fops = {
421 .open = ftrace_event_seq_open, 439 .open = ftrace_event_seq_open,
422 .read = seq_read, 440 .read = seq_read,
@@ -558,6 +576,13 @@ static __init int event_trace_init(void)
558 if (!d_tracer) 576 if (!d_tracer)
559 return 0; 577 return 0;
560 578
579 entry = debugfs_create_file("available_events", 0444, d_tracer,
580 (void *)&show_event_seq_ops,
581 &ftrace_avail_fops);
582 if (!entry)
583 pr_warning("Could not create debugfs "
584 "'available_events' entry\n");
585
561 entry = debugfs_create_file("set_event", 0644, d_tracer, 586 entry = debugfs_create_file("set_event", 0644, d_tracer,
562 (void *)&show_set_event_seq_ops, 587 (void *)&show_set_event_seq_ops,
563 &ftrace_set_event_fops); 588 &ftrace_set_event_fops);