xref: /openbmc/linux/kernel/trace/trace_events.c (revision a2fb4d78)
1 /*
2  * event tracer
3  *
4  * Copyright (C) 2008 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
5  *
6  *  - Added format output of fields of the trace point.
7  *    This was based off of work by Tom Zanussi <tzanussi@gmail.com>.
8  *
9  */
10 
11 #include <linux/workqueue.h>
12 #include <linux/spinlock.h>
13 #include <linux/kthread.h>
14 #include <linux/debugfs.h>
15 #include <linux/uaccess.h>
16 #include <linux/module.h>
17 #include <linux/ctype.h>
18 #include <linux/slab.h>
19 #include <linux/delay.h>
20 
21 #include <asm/setup.h>
22 
23 #include "trace_output.h"
24 
25 #undef TRACE_SYSTEM
26 #define TRACE_SYSTEM "TRACE_SYSTEM"
27 
28 DEFINE_MUTEX(event_mutex);
29 
30 LIST_HEAD(ftrace_events);
31 static LIST_HEAD(ftrace_common_fields);
32 
33 #define GFP_TRACE (GFP_KERNEL | __GFP_ZERO)
34 
35 static struct kmem_cache *field_cachep;
36 static struct kmem_cache *file_cachep;
37 
38 #define SYSTEM_FL_FREE_NAME		(1 << 31)
39 
40 static inline int system_refcount(struct event_subsystem *system)
41 {
42 	return system->ref_count & ~SYSTEM_FL_FREE_NAME;
43 }
44 
45 static int system_refcount_inc(struct event_subsystem *system)
46 {
47 	return (system->ref_count++) & ~SYSTEM_FL_FREE_NAME;
48 }
49 
50 static int system_refcount_dec(struct event_subsystem *system)
51 {
52 	return (--system->ref_count) & ~SYSTEM_FL_FREE_NAME;
53 }
54 
55 /* Double loops, do not use break, only goto's work */
56 #define do_for_each_event_file(tr, file)			\
57 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {	\
58 		list_for_each_entry(file, &tr->events, list)
59 
60 #define do_for_each_event_file_safe(tr, file)			\
61 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {	\
62 		struct ftrace_event_file *___n;				\
63 		list_for_each_entry_safe(file, ___n, &tr->events, list)
64 
65 #define while_for_each_event_file()		\
66 	}
67 
68 static struct list_head *
69 trace_get_fields(struct ftrace_event_call *event_call)
70 {
71 	if (!event_call->class->get_fields)
72 		return &event_call->class->fields;
73 	return event_call->class->get_fields(event_call);
74 }
75 
76 static struct ftrace_event_field *
77 __find_event_field(struct list_head *head, char *name)
78 {
79 	struct ftrace_event_field *field;
80 
81 	list_for_each_entry(field, head, link) {
82 		if (!strcmp(field->name, name))
83 			return field;
84 	}
85 
86 	return NULL;
87 }
88 
89 struct ftrace_event_field *
90 trace_find_event_field(struct ftrace_event_call *call, char *name)
91 {
92 	struct ftrace_event_field *field;
93 	struct list_head *head;
94 
95 	field = __find_event_field(&ftrace_common_fields, name);
96 	if (field)
97 		return field;
98 
99 	head = trace_get_fields(call);
100 	return __find_event_field(head, name);
101 }
102 
103 static int __trace_define_field(struct list_head *head, const char *type,
104 				const char *name, int offset, int size,
105 				int is_signed, int filter_type)
106 {
107 	struct ftrace_event_field *field;
108 
109 	field = kmem_cache_alloc(field_cachep, GFP_TRACE);
110 	if (!field)
111 		return -ENOMEM;
112 
113 	field->name = name;
114 	field->type = type;
115 
116 	if (filter_type == FILTER_OTHER)
117 		field->filter_type = filter_assign_type(type);
118 	else
119 		field->filter_type = filter_type;
120 
121 	field->offset = offset;
122 	field->size = size;
123 	field->is_signed = is_signed;
124 
125 	list_add(&field->link, head);
126 
127 	return 0;
128 }
129 
130 int trace_define_field(struct ftrace_event_call *call, const char *type,
131 		       const char *name, int offset, int size, int is_signed,
132 		       int filter_type)
133 {
134 	struct list_head *head;
135 
136 	if (WARN_ON(!call->class))
137 		return 0;
138 
139 	head = trace_get_fields(call);
140 	return __trace_define_field(head, type, name, offset, size,
141 				    is_signed, filter_type);
142 }
143 EXPORT_SYMBOL_GPL(trace_define_field);
144 
145 #define __common_field(type, item)					\
146 	ret = __trace_define_field(&ftrace_common_fields, #type,	\
147 				   "common_" #item,			\
148 				   offsetof(typeof(ent), item),		\
149 				   sizeof(ent.item),			\
150 				   is_signed_type(type), FILTER_OTHER);	\
151 	if (ret)							\
152 		return ret;
153 
154 static int trace_define_common_fields(void)
155 {
156 	int ret;
157 	struct trace_entry ent;
158 
159 	__common_field(unsigned short, type);
160 	__common_field(unsigned char, flags);
161 	__common_field(unsigned char, preempt_count);
162 	__common_field(int, pid);
163 
164 	return ret;
165 }
166 
167 static void trace_destroy_fields(struct ftrace_event_call *call)
168 {
169 	struct ftrace_event_field *field, *next;
170 	struct list_head *head;
171 
172 	head = trace_get_fields(call);
173 	list_for_each_entry_safe(field, next, head, link) {
174 		list_del(&field->link);
175 		kmem_cache_free(field_cachep, field);
176 	}
177 }
178 
179 int trace_event_raw_init(struct ftrace_event_call *call)
180 {
181 	int id;
182 
183 	id = register_ftrace_event(&call->event);
184 	if (!id)
185 		return -ENODEV;
186 
187 	return 0;
188 }
189 EXPORT_SYMBOL_GPL(trace_event_raw_init);
190 
191 int ftrace_event_reg(struct ftrace_event_call *call,
192 		     enum trace_reg type, void *data)
193 {
194 	struct ftrace_event_file *file = data;
195 
196 	switch (type) {
197 	case TRACE_REG_REGISTER:
198 		return tracepoint_probe_register(call->name,
199 						 call->class->probe,
200 						 file);
201 	case TRACE_REG_UNREGISTER:
202 		tracepoint_probe_unregister(call->name,
203 					    call->class->probe,
204 					    file);
205 		return 0;
206 
207 #ifdef CONFIG_PERF_EVENTS
208 	case TRACE_REG_PERF_REGISTER:
209 		return tracepoint_probe_register(call->name,
210 						 call->class->perf_probe,
211 						 call);
212 	case TRACE_REG_PERF_UNREGISTER:
213 		tracepoint_probe_unregister(call->name,
214 					    call->class->perf_probe,
215 					    call);
216 		return 0;
217 	case TRACE_REG_PERF_OPEN:
218 	case TRACE_REG_PERF_CLOSE:
219 	case TRACE_REG_PERF_ADD:
220 	case TRACE_REG_PERF_DEL:
221 		return 0;
222 #endif
223 	}
224 	return 0;
225 }
226 EXPORT_SYMBOL_GPL(ftrace_event_reg);
227 
228 void trace_event_enable_cmd_record(bool enable)
229 {
230 	struct ftrace_event_file *file;
231 	struct trace_array *tr;
232 
233 	mutex_lock(&event_mutex);
234 	do_for_each_event_file(tr, file) {
235 
236 		if (!(file->flags & FTRACE_EVENT_FL_ENABLED))
237 			continue;
238 
239 		if (enable) {
240 			tracing_start_cmdline_record();
241 			set_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
242 		} else {
243 			tracing_stop_cmdline_record();
244 			clear_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
245 		}
246 	} while_for_each_event_file();
247 	mutex_unlock(&event_mutex);
248 }
249 
250 static int __ftrace_event_enable_disable(struct ftrace_event_file *file,
251 					 int enable, int soft_disable)
252 {
253 	struct ftrace_event_call *call = file->event_call;
254 	int ret = 0;
255 	int disable;
256 
257 	switch (enable) {
258 	case 0:
259 		/*
260 		 * When soft_disable is set and enable is cleared, the sm_ref
261 		 * reference counter is decremented. If it reaches 0, we want
262 		 * to clear the SOFT_DISABLED flag but leave the event in the
263 		 * state that it was. That is, if the event was enabled and
264 		 * SOFT_DISABLED isn't set, then do nothing. But if SOFT_DISABLED
265 		 * is set we do not want the event to be enabled before we
266 		 * clear the bit.
267 		 *
268 		 * When soft_disable is not set but the SOFT_MODE flag is,
269 		 * we do nothing. Do not disable the tracepoint, otherwise
270 		 * "soft enable"s (clearing the SOFT_DISABLED bit) wont work.
271 		 */
272 		if (soft_disable) {
273 			if (atomic_dec_return(&file->sm_ref) > 0)
274 				break;
275 			disable = file->flags & FTRACE_EVENT_FL_SOFT_DISABLED;
276 			clear_bit(FTRACE_EVENT_FL_SOFT_MODE_BIT, &file->flags);
277 		} else
278 			disable = !(file->flags & FTRACE_EVENT_FL_SOFT_MODE);
279 
280 		if (disable && (file->flags & FTRACE_EVENT_FL_ENABLED)) {
281 			clear_bit(FTRACE_EVENT_FL_ENABLED_BIT, &file->flags);
282 			if (file->flags & FTRACE_EVENT_FL_RECORDED_CMD) {
283 				tracing_stop_cmdline_record();
284 				clear_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
285 			}
286 			call->class->reg(call, TRACE_REG_UNREGISTER, file);
287 		}
288 		/* If in SOFT_MODE, just set the SOFT_DISABLE_BIT, else clear it */
289 		if (file->flags & FTRACE_EVENT_FL_SOFT_MODE)
290 			set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
291 		else
292 			clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
293 		break;
294 	case 1:
295 		/*
296 		 * When soft_disable is set and enable is set, we want to
297 		 * register the tracepoint for the event, but leave the event
298 		 * as is. That means, if the event was already enabled, we do
299 		 * nothing (but set SOFT_MODE). If the event is disabled, we
300 		 * set SOFT_DISABLED before enabling the event tracepoint, so
301 		 * it still seems to be disabled.
302 		 */
303 		if (!soft_disable)
304 			clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
305 		else {
306 			if (atomic_inc_return(&file->sm_ref) > 1)
307 				break;
308 			set_bit(FTRACE_EVENT_FL_SOFT_MODE_BIT, &file->flags);
309 		}
310 
311 		if (!(file->flags & FTRACE_EVENT_FL_ENABLED)) {
312 
313 			/* Keep the event disabled, when going to SOFT_MODE. */
314 			if (soft_disable)
315 				set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
316 
317 			if (trace_flags & TRACE_ITER_RECORD_CMD) {
318 				tracing_start_cmdline_record();
319 				set_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
320 			}
321 			ret = call->class->reg(call, TRACE_REG_REGISTER, file);
322 			if (ret) {
323 				tracing_stop_cmdline_record();
324 				pr_info("event trace: Could not enable event "
325 					"%s\n", call->name);
326 				break;
327 			}
328 			set_bit(FTRACE_EVENT_FL_ENABLED_BIT, &file->flags);
329 
330 			/* WAS_ENABLED gets set but never cleared. */
331 			call->flags |= TRACE_EVENT_FL_WAS_ENABLED;
332 		}
333 		break;
334 	}
335 
336 	return ret;
337 }
338 
339 int trace_event_enable_disable(struct ftrace_event_file *file,
340 			       int enable, int soft_disable)
341 {
342 	return __ftrace_event_enable_disable(file, enable, soft_disable);
343 }
344 
345 static int ftrace_event_enable_disable(struct ftrace_event_file *file,
346 				       int enable)
347 {
348 	return __ftrace_event_enable_disable(file, enable, 0);
349 }
350 
351 static void ftrace_clear_events(struct trace_array *tr)
352 {
353 	struct ftrace_event_file *file;
354 
355 	mutex_lock(&event_mutex);
356 	list_for_each_entry(file, &tr->events, list) {
357 		ftrace_event_enable_disable(file, 0);
358 	}
359 	mutex_unlock(&event_mutex);
360 }
361 
362 static void __put_system(struct event_subsystem *system)
363 {
364 	struct event_filter *filter = system->filter;
365 
366 	WARN_ON_ONCE(system_refcount(system) == 0);
367 	if (system_refcount_dec(system))
368 		return;
369 
370 	list_del(&system->list);
371 
372 	if (filter) {
373 		kfree(filter->filter_string);
374 		kfree(filter);
375 	}
376 	if (system->ref_count & SYSTEM_FL_FREE_NAME)
377 		kfree(system->name);
378 	kfree(system);
379 }
380 
381 static void __get_system(struct event_subsystem *system)
382 {
383 	WARN_ON_ONCE(system_refcount(system) == 0);
384 	system_refcount_inc(system);
385 }
386 
387 static void __get_system_dir(struct ftrace_subsystem_dir *dir)
388 {
389 	WARN_ON_ONCE(dir->ref_count == 0);
390 	dir->ref_count++;
391 	__get_system(dir->subsystem);
392 }
393 
394 static void __put_system_dir(struct ftrace_subsystem_dir *dir)
395 {
396 	WARN_ON_ONCE(dir->ref_count == 0);
397 	/* If the subsystem is about to be freed, the dir must be too */
398 	WARN_ON_ONCE(system_refcount(dir->subsystem) == 1 && dir->ref_count != 1);
399 
400 	__put_system(dir->subsystem);
401 	if (!--dir->ref_count)
402 		kfree(dir);
403 }
404 
405 static void put_system(struct ftrace_subsystem_dir *dir)
406 {
407 	mutex_lock(&event_mutex);
408 	__put_system_dir(dir);
409 	mutex_unlock(&event_mutex);
410 }
411 
412 static void remove_subsystem(struct ftrace_subsystem_dir *dir)
413 {
414 	if (!dir)
415 		return;
416 
417 	if (!--dir->nr_events) {
418 		debugfs_remove_recursive(dir->entry);
419 		list_del(&dir->list);
420 		__put_system_dir(dir);
421 	}
422 }
423 
424 static void remove_event_file_dir(struct ftrace_event_file *file)
425 {
426 	struct dentry *dir = file->dir;
427 	struct dentry *child;
428 
429 	if (dir) {
430 		spin_lock(&dir->d_lock);	/* probably unneeded */
431 		list_for_each_entry(child, &dir->d_subdirs, d_u.d_child) {
432 			if (child->d_inode)	/* probably unneeded */
433 				child->d_inode->i_private = NULL;
434 		}
435 		spin_unlock(&dir->d_lock);
436 
437 		debugfs_remove_recursive(dir);
438 	}
439 
440 	list_del(&file->list);
441 	remove_subsystem(file->system);
442 	kmem_cache_free(file_cachep, file);
443 }
444 
445 /*
446  * __ftrace_set_clr_event(NULL, NULL, NULL, set) will set/unset all events.
447  */
448 static int
449 __ftrace_set_clr_event_nolock(struct trace_array *tr, const char *match,
450 			      const char *sub, const char *event, int set)
451 {
452 	struct ftrace_event_file *file;
453 	struct ftrace_event_call *call;
454 	int ret = -EINVAL;
455 
456 	list_for_each_entry(file, &tr->events, list) {
457 
458 		call = file->event_call;
459 
460 		if (!call->name || !call->class || !call->class->reg)
461 			continue;
462 
463 		if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
464 			continue;
465 
466 		if (match &&
467 		    strcmp(match, call->name) != 0 &&
468 		    strcmp(match, call->class->system) != 0)
469 			continue;
470 
471 		if (sub && strcmp(sub, call->class->system) != 0)
472 			continue;
473 
474 		if (event && strcmp(event, call->name) != 0)
475 			continue;
476 
477 		ftrace_event_enable_disable(file, set);
478 
479 		ret = 0;
480 	}
481 
482 	return ret;
483 }
484 
485 static int __ftrace_set_clr_event(struct trace_array *tr, const char *match,
486 				  const char *sub, const char *event, int set)
487 {
488 	int ret;
489 
490 	mutex_lock(&event_mutex);
491 	ret = __ftrace_set_clr_event_nolock(tr, match, sub, event, set);
492 	mutex_unlock(&event_mutex);
493 
494 	return ret;
495 }
496 
497 static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
498 {
499 	char *event = NULL, *sub = NULL, *match;
500 
501 	/*
502 	 * The buf format can be <subsystem>:<event-name>
503 	 *  *:<event-name> means any event by that name.
504 	 *  :<event-name> is the same.
505 	 *
506 	 *  <subsystem>:* means all events in that subsystem
507 	 *  <subsystem>: means the same.
508 	 *
509 	 *  <name> (no ':') means all events in a subsystem with
510 	 *  the name <name> or any event that matches <name>
511 	 */
512 
513 	match = strsep(&buf, ":");
514 	if (buf) {
515 		sub = match;
516 		event = buf;
517 		match = NULL;
518 
519 		if (!strlen(sub) || strcmp(sub, "*") == 0)
520 			sub = NULL;
521 		if (!strlen(event) || strcmp(event, "*") == 0)
522 			event = NULL;
523 	}
524 
525 	return __ftrace_set_clr_event(tr, match, sub, event, set);
526 }
527 
528 /**
529  * trace_set_clr_event - enable or disable an event
530  * @system: system name to match (NULL for any system)
531  * @event: event name to match (NULL for all events, within system)
532  * @set: 1 to enable, 0 to disable
533  *
534  * This is a way for other parts of the kernel to enable or disable
535  * event recording.
536  *
537  * Returns 0 on success, -EINVAL if the parameters do not match any
538  * registered events.
539  */
540 int trace_set_clr_event(const char *system, const char *event, int set)
541 {
542 	struct trace_array *tr = top_trace_array();
543 
544 	return __ftrace_set_clr_event(tr, NULL, system, event, set);
545 }
546 EXPORT_SYMBOL_GPL(trace_set_clr_event);
547 
548 /* 128 should be much more than enough */
549 #define EVENT_BUF_SIZE		127
550 
551 static ssize_t
552 ftrace_event_write(struct file *file, const char __user *ubuf,
553 		   size_t cnt, loff_t *ppos)
554 {
555 	struct trace_parser parser;
556 	struct seq_file *m = file->private_data;
557 	struct trace_array *tr = m->private;
558 	ssize_t read, ret;
559 
560 	if (!cnt)
561 		return 0;
562 
563 	ret = tracing_update_buffers();
564 	if (ret < 0)
565 		return ret;
566 
567 	if (trace_parser_get_init(&parser, EVENT_BUF_SIZE + 1))
568 		return -ENOMEM;
569 
570 	read = trace_get_user(&parser, ubuf, cnt, ppos);
571 
572 	if (read >= 0 && trace_parser_loaded((&parser))) {
573 		int set = 1;
574 
575 		if (*parser.buffer == '!')
576 			set = 0;
577 
578 		parser.buffer[parser.idx] = 0;
579 
580 		ret = ftrace_set_clr_event(tr, parser.buffer + !set, set);
581 		if (ret)
582 			goto out_put;
583 	}
584 
585 	ret = read;
586 
587  out_put:
588 	trace_parser_put(&parser);
589 
590 	return ret;
591 }
592 
593 static void *
594 t_next(struct seq_file *m, void *v, loff_t *pos)
595 {
596 	struct ftrace_event_file *file = v;
597 	struct ftrace_event_call *call;
598 	struct trace_array *tr = m->private;
599 
600 	(*pos)++;
601 
602 	list_for_each_entry_continue(file, &tr->events, list) {
603 		call = file->event_call;
604 		/*
605 		 * The ftrace subsystem is for showing formats only.
606 		 * They can not be enabled or disabled via the event files.
607 		 */
608 		if (call->class && call->class->reg)
609 			return file;
610 	}
611 
612 	return NULL;
613 }
614 
615 static void *t_start(struct seq_file *m, loff_t *pos)
616 {
617 	struct ftrace_event_file *file;
618 	struct trace_array *tr = m->private;
619 	loff_t l;
620 
621 	mutex_lock(&event_mutex);
622 
623 	file = list_entry(&tr->events, struct ftrace_event_file, list);
624 	for (l = 0; l <= *pos; ) {
625 		file = t_next(m, file, &l);
626 		if (!file)
627 			break;
628 	}
629 	return file;
630 }
631 
632 static void *
633 s_next(struct seq_file *m, void *v, loff_t *pos)
634 {
635 	struct ftrace_event_file *file = v;
636 	struct trace_array *tr = m->private;
637 
638 	(*pos)++;
639 
640 	list_for_each_entry_continue(file, &tr->events, list) {
641 		if (file->flags & FTRACE_EVENT_FL_ENABLED)
642 			return file;
643 	}
644 
645 	return NULL;
646 }
647 
648 static void *s_start(struct seq_file *m, loff_t *pos)
649 {
650 	struct ftrace_event_file *file;
651 	struct trace_array *tr = m->private;
652 	loff_t l;
653 
654 	mutex_lock(&event_mutex);
655 
656 	file = list_entry(&tr->events, struct ftrace_event_file, list);
657 	for (l = 0; l <= *pos; ) {
658 		file = s_next(m, file, &l);
659 		if (!file)
660 			break;
661 	}
662 	return file;
663 }
664 
665 static int t_show(struct seq_file *m, void *v)
666 {
667 	struct ftrace_event_file *file = v;
668 	struct ftrace_event_call *call = file->event_call;
669 
670 	if (strcmp(call->class->system, TRACE_SYSTEM) != 0)
671 		seq_printf(m, "%s:", call->class->system);
672 	seq_printf(m, "%s\n", call->name);
673 
674 	return 0;
675 }
676 
677 static void t_stop(struct seq_file *m, void *p)
678 {
679 	mutex_unlock(&event_mutex);
680 }
681 
682 static ssize_t
683 event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
684 		  loff_t *ppos)
685 {
686 	struct ftrace_event_file *file;
687 	unsigned long flags;
688 	char buf[4] = "0";
689 
690 	mutex_lock(&event_mutex);
691 	file = event_file_data(filp);
692 	if (likely(file))
693 		flags = file->flags;
694 	mutex_unlock(&event_mutex);
695 
696 	if (!file)
697 		return -ENODEV;
698 
699 	if (flags & FTRACE_EVENT_FL_ENABLED &&
700 	    !(flags & FTRACE_EVENT_FL_SOFT_DISABLED))
701 		strcpy(buf, "1");
702 
703 	if (flags & FTRACE_EVENT_FL_SOFT_DISABLED ||
704 	    flags & FTRACE_EVENT_FL_SOFT_MODE)
705 		strcat(buf, "*");
706 
707 	strcat(buf, "\n");
708 
709 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, strlen(buf));
710 }
711 
712 static ssize_t
713 event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
714 		   loff_t *ppos)
715 {
716 	struct ftrace_event_file *file;
717 	unsigned long val;
718 	int ret;
719 
720 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
721 	if (ret)
722 		return ret;
723 
724 	ret = tracing_update_buffers();
725 	if (ret < 0)
726 		return ret;
727 
728 	switch (val) {
729 	case 0:
730 	case 1:
731 		ret = -ENODEV;
732 		mutex_lock(&event_mutex);
733 		file = event_file_data(filp);
734 		if (likely(file))
735 			ret = ftrace_event_enable_disable(file, val);
736 		mutex_unlock(&event_mutex);
737 		break;
738 
739 	default:
740 		return -EINVAL;
741 	}
742 
743 	*ppos += cnt;
744 
745 	return ret ? ret : cnt;
746 }
747 
748 static ssize_t
749 system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
750 		   loff_t *ppos)
751 {
752 	const char set_to_char[4] = { '?', '0', '1', 'X' };
753 	struct ftrace_subsystem_dir *dir = filp->private_data;
754 	struct event_subsystem *system = dir->subsystem;
755 	struct ftrace_event_call *call;
756 	struct ftrace_event_file *file;
757 	struct trace_array *tr = dir->tr;
758 	char buf[2];
759 	int set = 0;
760 	int ret;
761 
762 	mutex_lock(&event_mutex);
763 	list_for_each_entry(file, &tr->events, list) {
764 		call = file->event_call;
765 		if (!call->name || !call->class || !call->class->reg)
766 			continue;
767 
768 		if (system && strcmp(call->class->system, system->name) != 0)
769 			continue;
770 
771 		/*
772 		 * We need to find out if all the events are set
773 		 * or if all events or cleared, or if we have
774 		 * a mixture.
775 		 */
776 		set |= (1 << !!(file->flags & FTRACE_EVENT_FL_ENABLED));
777 
778 		/*
779 		 * If we have a mixture, no need to look further.
780 		 */
781 		if (set == 3)
782 			break;
783 	}
784 	mutex_unlock(&event_mutex);
785 
786 	buf[0] = set_to_char[set];
787 	buf[1] = '\n';
788 
789 	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
790 
791 	return ret;
792 }
793 
794 static ssize_t
795 system_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
796 		    loff_t *ppos)
797 {
798 	struct ftrace_subsystem_dir *dir = filp->private_data;
799 	struct event_subsystem *system = dir->subsystem;
800 	const char *name = NULL;
801 	unsigned long val;
802 	ssize_t ret;
803 
804 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
805 	if (ret)
806 		return ret;
807 
808 	ret = tracing_update_buffers();
809 	if (ret < 0)
810 		return ret;
811 
812 	if (val != 0 && val != 1)
813 		return -EINVAL;
814 
815 	/*
816 	 * Opening of "enable" adds a ref count to system,
817 	 * so the name is safe to use.
818 	 */
819 	if (system)
820 		name = system->name;
821 
822 	ret = __ftrace_set_clr_event(dir->tr, NULL, name, NULL, val);
823 	if (ret)
824 		goto out;
825 
826 	ret = cnt;
827 
828 out:
829 	*ppos += cnt;
830 
831 	return ret;
832 }
833 
834 enum {
835 	FORMAT_HEADER		= 1,
836 	FORMAT_FIELD_SEPERATOR	= 2,
837 	FORMAT_PRINTFMT		= 3,
838 };
839 
840 static void *f_next(struct seq_file *m, void *v, loff_t *pos)
841 {
842 	struct ftrace_event_call *call = event_file_data(m->private);
843 	struct list_head *common_head = &ftrace_common_fields;
844 	struct list_head *head = trace_get_fields(call);
845 	struct list_head *node = v;
846 
847 	(*pos)++;
848 
849 	switch ((unsigned long)v) {
850 	case FORMAT_HEADER:
851 		node = common_head;
852 		break;
853 
854 	case FORMAT_FIELD_SEPERATOR:
855 		node = head;
856 		break;
857 
858 	case FORMAT_PRINTFMT:
859 		/* all done */
860 		return NULL;
861 	}
862 
863 	node = node->prev;
864 	if (node == common_head)
865 		return (void *)FORMAT_FIELD_SEPERATOR;
866 	else if (node == head)
867 		return (void *)FORMAT_PRINTFMT;
868 	else
869 		return node;
870 }
871 
872 static int f_show(struct seq_file *m, void *v)
873 {
874 	struct ftrace_event_call *call = event_file_data(m->private);
875 	struct ftrace_event_field *field;
876 	const char *array_descriptor;
877 
878 	switch ((unsigned long)v) {
879 	case FORMAT_HEADER:
880 		seq_printf(m, "name: %s\n", call->name);
881 		seq_printf(m, "ID: %d\n", call->event.type);
882 		seq_printf(m, "format:\n");
883 		return 0;
884 
885 	case FORMAT_FIELD_SEPERATOR:
886 		seq_putc(m, '\n');
887 		return 0;
888 
889 	case FORMAT_PRINTFMT:
890 		seq_printf(m, "\nprint fmt: %s\n",
891 			   call->print_fmt);
892 		return 0;
893 	}
894 
895 	field = list_entry(v, struct ftrace_event_field, link);
896 	/*
897 	 * Smartly shows the array type(except dynamic array).
898 	 * Normal:
899 	 *	field:TYPE VAR
900 	 * If TYPE := TYPE[LEN], it is shown:
901 	 *	field:TYPE VAR[LEN]
902 	 */
903 	array_descriptor = strchr(field->type, '[');
904 
905 	if (!strncmp(field->type, "__data_loc", 10))
906 		array_descriptor = NULL;
907 
908 	if (!array_descriptor)
909 		seq_printf(m, "\tfield:%s %s;\toffset:%u;\tsize:%u;\tsigned:%d;\n",
910 			   field->type, field->name, field->offset,
911 			   field->size, !!field->is_signed);
912 	else
913 		seq_printf(m, "\tfield:%.*s %s%s;\toffset:%u;\tsize:%u;\tsigned:%d;\n",
914 			   (int)(array_descriptor - field->type),
915 			   field->type, field->name,
916 			   array_descriptor, field->offset,
917 			   field->size, !!field->is_signed);
918 
919 	return 0;
920 }
921 
922 static void *f_start(struct seq_file *m, loff_t *pos)
923 {
924 	void *p = (void *)FORMAT_HEADER;
925 	loff_t l = 0;
926 
927 	/* ->stop() is called even if ->start() fails */
928 	mutex_lock(&event_mutex);
929 	if (!event_file_data(m->private))
930 		return ERR_PTR(-ENODEV);
931 
932 	while (l < *pos && p)
933 		p = f_next(m, p, &l);
934 
935 	return p;
936 }
937 
938 static void f_stop(struct seq_file *m, void *p)
939 {
940 	mutex_unlock(&event_mutex);
941 }
942 
943 static const struct seq_operations trace_format_seq_ops = {
944 	.start		= f_start,
945 	.next		= f_next,
946 	.stop		= f_stop,
947 	.show		= f_show,
948 };
949 
950 static int trace_format_open(struct inode *inode, struct file *file)
951 {
952 	struct seq_file *m;
953 	int ret;
954 
955 	ret = seq_open(file, &trace_format_seq_ops);
956 	if (ret < 0)
957 		return ret;
958 
959 	m = file->private_data;
960 	m->private = file;
961 
962 	return 0;
963 }
964 
965 static ssize_t
966 event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
967 {
968 	int id = (long)event_file_data(filp);
969 	char buf[32];
970 	int len;
971 
972 	if (*ppos)
973 		return 0;
974 
975 	if (unlikely(!id))
976 		return -ENODEV;
977 
978 	len = sprintf(buf, "%d\n", id);
979 
980 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
981 }
982 
983 static ssize_t
984 event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
985 		  loff_t *ppos)
986 {
987 	struct ftrace_event_file *file;
988 	struct trace_seq *s;
989 	int r = -ENODEV;
990 
991 	if (*ppos)
992 		return 0;
993 
994 	s = kmalloc(sizeof(*s), GFP_KERNEL);
995 
996 	if (!s)
997 		return -ENOMEM;
998 
999 	trace_seq_init(s);
1000 
1001 	mutex_lock(&event_mutex);
1002 	file = event_file_data(filp);
1003 	if (file)
1004 		print_event_filter(file, s);
1005 	mutex_unlock(&event_mutex);
1006 
1007 	if (file)
1008 		r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len);
1009 
1010 	kfree(s);
1011 
1012 	return r;
1013 }
1014 
1015 static ssize_t
1016 event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
1017 		   loff_t *ppos)
1018 {
1019 	struct ftrace_event_file *file;
1020 	char *buf;
1021 	int err = -ENODEV;
1022 
1023 	if (cnt >= PAGE_SIZE)
1024 		return -EINVAL;
1025 
1026 	buf = (char *)__get_free_page(GFP_TEMPORARY);
1027 	if (!buf)
1028 		return -ENOMEM;
1029 
1030 	if (copy_from_user(buf, ubuf, cnt)) {
1031 		free_page((unsigned long) buf);
1032 		return -EFAULT;
1033 	}
1034 	buf[cnt] = '\0';
1035 
1036 	mutex_lock(&event_mutex);
1037 	file = event_file_data(filp);
1038 	if (file)
1039 		err = apply_event_filter(file, buf);
1040 	mutex_unlock(&event_mutex);
1041 
1042 	free_page((unsigned long) buf);
1043 	if (err < 0)
1044 		return err;
1045 
1046 	*ppos += cnt;
1047 
1048 	return cnt;
1049 }
1050 
1051 static LIST_HEAD(event_subsystems);
1052 
1053 static int subsystem_open(struct inode *inode, struct file *filp)
1054 {
1055 	struct event_subsystem *system = NULL;
1056 	struct ftrace_subsystem_dir *dir = NULL; /* Initialize for gcc */
1057 	struct trace_array *tr;
1058 	int ret;
1059 
1060 	if (tracing_is_disabled())
1061 		return -ENODEV;
1062 
1063 	/* Make sure the system still exists */
1064 	mutex_lock(&trace_types_lock);
1065 	mutex_lock(&event_mutex);
1066 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1067 		list_for_each_entry(dir, &tr->systems, list) {
1068 			if (dir == inode->i_private) {
1069 				/* Don't open systems with no events */
1070 				if (dir->nr_events) {
1071 					__get_system_dir(dir);
1072 					system = dir->subsystem;
1073 				}
1074 				goto exit_loop;
1075 			}
1076 		}
1077 	}
1078  exit_loop:
1079 	mutex_unlock(&event_mutex);
1080 	mutex_unlock(&trace_types_lock);
1081 
1082 	if (!system)
1083 		return -ENODEV;
1084 
1085 	/* Some versions of gcc think dir can be uninitialized here */
1086 	WARN_ON(!dir);
1087 
1088 	/* Still need to increment the ref count of the system */
1089 	if (trace_array_get(tr) < 0) {
1090 		put_system(dir);
1091 		return -ENODEV;
1092 	}
1093 
1094 	ret = tracing_open_generic(inode, filp);
1095 	if (ret < 0) {
1096 		trace_array_put(tr);
1097 		put_system(dir);
1098 	}
1099 
1100 	return ret;
1101 }
1102 
1103 static int system_tr_open(struct inode *inode, struct file *filp)
1104 {
1105 	struct ftrace_subsystem_dir *dir;
1106 	struct trace_array *tr = inode->i_private;
1107 	int ret;
1108 
1109 	if (tracing_is_disabled())
1110 		return -ENODEV;
1111 
1112 	if (trace_array_get(tr) < 0)
1113 		return -ENODEV;
1114 
1115 	/* Make a temporary dir that has no system but points to tr */
1116 	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
1117 	if (!dir) {
1118 		trace_array_put(tr);
1119 		return -ENOMEM;
1120 	}
1121 
1122 	dir->tr = tr;
1123 
1124 	ret = tracing_open_generic(inode, filp);
1125 	if (ret < 0) {
1126 		trace_array_put(tr);
1127 		kfree(dir);
1128 		return ret;
1129 	}
1130 
1131 	filp->private_data = dir;
1132 
1133 	return 0;
1134 }
1135 
1136 static int subsystem_release(struct inode *inode, struct file *file)
1137 {
1138 	struct ftrace_subsystem_dir *dir = file->private_data;
1139 
1140 	trace_array_put(dir->tr);
1141 
1142 	/*
1143 	 * If dir->subsystem is NULL, then this is a temporary
1144 	 * descriptor that was made for a trace_array to enable
1145 	 * all subsystems.
1146 	 */
1147 	if (dir->subsystem)
1148 		put_system(dir);
1149 	else
1150 		kfree(dir);
1151 
1152 	return 0;
1153 }
1154 
1155 static ssize_t
1156 subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
1157 		      loff_t *ppos)
1158 {
1159 	struct ftrace_subsystem_dir *dir = filp->private_data;
1160 	struct event_subsystem *system = dir->subsystem;
1161 	struct trace_seq *s;
1162 	int r;
1163 
1164 	if (*ppos)
1165 		return 0;
1166 
1167 	s = kmalloc(sizeof(*s), GFP_KERNEL);
1168 	if (!s)
1169 		return -ENOMEM;
1170 
1171 	trace_seq_init(s);
1172 
1173 	print_subsystem_event_filter(system, s);
1174 	r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len);
1175 
1176 	kfree(s);
1177 
1178 	return r;
1179 }
1180 
1181 static ssize_t
1182 subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
1183 		       loff_t *ppos)
1184 {
1185 	struct ftrace_subsystem_dir *dir = filp->private_data;
1186 	char *buf;
1187 	int err;
1188 
1189 	if (cnt >= PAGE_SIZE)
1190 		return -EINVAL;
1191 
1192 	buf = (char *)__get_free_page(GFP_TEMPORARY);
1193 	if (!buf)
1194 		return -ENOMEM;
1195 
1196 	if (copy_from_user(buf, ubuf, cnt)) {
1197 		free_page((unsigned long) buf);
1198 		return -EFAULT;
1199 	}
1200 	buf[cnt] = '\0';
1201 
1202 	err = apply_subsystem_event_filter(dir, buf);
1203 	free_page((unsigned long) buf);
1204 	if (err < 0)
1205 		return err;
1206 
1207 	*ppos += cnt;
1208 
1209 	return cnt;
1210 }
1211 
1212 static ssize_t
1213 show_header(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
1214 {
1215 	int (*func)(struct trace_seq *s) = filp->private_data;
1216 	struct trace_seq *s;
1217 	int r;
1218 
1219 	if (*ppos)
1220 		return 0;
1221 
1222 	s = kmalloc(sizeof(*s), GFP_KERNEL);
1223 	if (!s)
1224 		return -ENOMEM;
1225 
1226 	trace_seq_init(s);
1227 
1228 	func(s);
1229 	r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len);
1230 
1231 	kfree(s);
1232 
1233 	return r;
1234 }
1235 
1236 static int ftrace_event_avail_open(struct inode *inode, struct file *file);
1237 static int ftrace_event_set_open(struct inode *inode, struct file *file);
1238 static int ftrace_event_release(struct inode *inode, struct file *file);
1239 
1240 static const struct seq_operations show_event_seq_ops = {
1241 	.start = t_start,
1242 	.next = t_next,
1243 	.show = t_show,
1244 	.stop = t_stop,
1245 };
1246 
1247 static const struct seq_operations show_set_event_seq_ops = {
1248 	.start = s_start,
1249 	.next = s_next,
1250 	.show = t_show,
1251 	.stop = t_stop,
1252 };
1253 
1254 static const struct file_operations ftrace_avail_fops = {
1255 	.open = ftrace_event_avail_open,
1256 	.read = seq_read,
1257 	.llseek = seq_lseek,
1258 	.release = seq_release,
1259 };
1260 
1261 static const struct file_operations ftrace_set_event_fops = {
1262 	.open = ftrace_event_set_open,
1263 	.read = seq_read,
1264 	.write = ftrace_event_write,
1265 	.llseek = seq_lseek,
1266 	.release = ftrace_event_release,
1267 };
1268 
1269 static const struct file_operations ftrace_enable_fops = {
1270 	.open = tracing_open_generic,
1271 	.read = event_enable_read,
1272 	.write = event_enable_write,
1273 	.llseek = default_llseek,
1274 };
1275 
1276 static const struct file_operations ftrace_event_format_fops = {
1277 	.open = trace_format_open,
1278 	.read = seq_read,
1279 	.llseek = seq_lseek,
1280 	.release = seq_release,
1281 };
1282 
1283 static const struct file_operations ftrace_event_id_fops = {
1284 	.read = event_id_read,
1285 	.llseek = default_llseek,
1286 };
1287 
1288 static const struct file_operations ftrace_event_filter_fops = {
1289 	.open = tracing_open_generic,
1290 	.read = event_filter_read,
1291 	.write = event_filter_write,
1292 	.llseek = default_llseek,
1293 };
1294 
1295 static const struct file_operations ftrace_subsystem_filter_fops = {
1296 	.open = subsystem_open,
1297 	.read = subsystem_filter_read,
1298 	.write = subsystem_filter_write,
1299 	.llseek = default_llseek,
1300 	.release = subsystem_release,
1301 };
1302 
1303 static const struct file_operations ftrace_system_enable_fops = {
1304 	.open = subsystem_open,
1305 	.read = system_enable_read,
1306 	.write = system_enable_write,
1307 	.llseek = default_llseek,
1308 	.release = subsystem_release,
1309 };
1310 
1311 static const struct file_operations ftrace_tr_enable_fops = {
1312 	.open = system_tr_open,
1313 	.read = system_enable_read,
1314 	.write = system_enable_write,
1315 	.llseek = default_llseek,
1316 	.release = subsystem_release,
1317 };
1318 
1319 static const struct file_operations ftrace_show_header_fops = {
1320 	.open = tracing_open_generic,
1321 	.read = show_header,
1322 	.llseek = default_llseek,
1323 };
1324 
1325 static int
1326 ftrace_event_open(struct inode *inode, struct file *file,
1327 		  const struct seq_operations *seq_ops)
1328 {
1329 	struct seq_file *m;
1330 	int ret;
1331 
1332 	ret = seq_open(file, seq_ops);
1333 	if (ret < 0)
1334 		return ret;
1335 	m = file->private_data;
1336 	/* copy tr over to seq ops */
1337 	m->private = inode->i_private;
1338 
1339 	return ret;
1340 }
1341 
1342 static int ftrace_event_release(struct inode *inode, struct file *file)
1343 {
1344 	struct trace_array *tr = inode->i_private;
1345 
1346 	trace_array_put(tr);
1347 
1348 	return seq_release(inode, file);
1349 }
1350 
1351 static int
1352 ftrace_event_avail_open(struct inode *inode, struct file *file)
1353 {
1354 	const struct seq_operations *seq_ops = &show_event_seq_ops;
1355 
1356 	return ftrace_event_open(inode, file, seq_ops);
1357 }
1358 
1359 static int
1360 ftrace_event_set_open(struct inode *inode, struct file *file)
1361 {
1362 	const struct seq_operations *seq_ops = &show_set_event_seq_ops;
1363 	struct trace_array *tr = inode->i_private;
1364 	int ret;
1365 
1366 	if (trace_array_get(tr) < 0)
1367 		return -ENODEV;
1368 
1369 	if ((file->f_mode & FMODE_WRITE) &&
1370 	    (file->f_flags & O_TRUNC))
1371 		ftrace_clear_events(tr);
1372 
1373 	ret = ftrace_event_open(inode, file, seq_ops);
1374 	if (ret < 0)
1375 		trace_array_put(tr);
1376 	return ret;
1377 }
1378 
1379 static struct event_subsystem *
1380 create_new_subsystem(const char *name)
1381 {
1382 	struct event_subsystem *system;
1383 
1384 	/* need to create new entry */
1385 	system = kmalloc(sizeof(*system), GFP_KERNEL);
1386 	if (!system)
1387 		return NULL;
1388 
1389 	system->ref_count = 1;
1390 
1391 	/* Only allocate if dynamic (kprobes and modules) */
1392 	if (!core_kernel_data((unsigned long)name)) {
1393 		system->ref_count |= SYSTEM_FL_FREE_NAME;
1394 		system->name = kstrdup(name, GFP_KERNEL);
1395 		if (!system->name)
1396 			goto out_free;
1397 	} else
1398 		system->name = name;
1399 
1400 	system->filter = NULL;
1401 
1402 	system->filter = kzalloc(sizeof(struct event_filter), GFP_KERNEL);
1403 	if (!system->filter)
1404 		goto out_free;
1405 
1406 	list_add(&system->list, &event_subsystems);
1407 
1408 	return system;
1409 
1410  out_free:
1411 	if (system->ref_count & SYSTEM_FL_FREE_NAME)
1412 		kfree(system->name);
1413 	kfree(system);
1414 	return NULL;
1415 }
1416 
1417 static struct dentry *
1418 event_subsystem_dir(struct trace_array *tr, const char *name,
1419 		    struct ftrace_event_file *file, struct dentry *parent)
1420 {
1421 	struct ftrace_subsystem_dir *dir;
1422 	struct event_subsystem *system;
1423 	struct dentry *entry;
1424 
1425 	/* First see if we did not already create this dir */
1426 	list_for_each_entry(dir, &tr->systems, list) {
1427 		system = dir->subsystem;
1428 		if (strcmp(system->name, name) == 0) {
1429 			dir->nr_events++;
1430 			file->system = dir;
1431 			return dir->entry;
1432 		}
1433 	}
1434 
1435 	/* Now see if the system itself exists. */
1436 	list_for_each_entry(system, &event_subsystems, list) {
1437 		if (strcmp(system->name, name) == 0)
1438 			break;
1439 	}
1440 	/* Reset system variable when not found */
1441 	if (&system->list == &event_subsystems)
1442 		system = NULL;
1443 
1444 	dir = kmalloc(sizeof(*dir), GFP_KERNEL);
1445 	if (!dir)
1446 		goto out_fail;
1447 
1448 	if (!system) {
1449 		system = create_new_subsystem(name);
1450 		if (!system)
1451 			goto out_free;
1452 	} else
1453 		__get_system(system);
1454 
1455 	dir->entry = debugfs_create_dir(name, parent);
1456 	if (!dir->entry) {
1457 		pr_warning("Failed to create system directory %s\n", name);
1458 		__put_system(system);
1459 		goto out_free;
1460 	}
1461 
1462 	dir->tr = tr;
1463 	dir->ref_count = 1;
1464 	dir->nr_events = 1;
1465 	dir->subsystem = system;
1466 	file->system = dir;
1467 
1468 	entry = debugfs_create_file("filter", 0644, dir->entry, dir,
1469 				    &ftrace_subsystem_filter_fops);
1470 	if (!entry) {
1471 		kfree(system->filter);
1472 		system->filter = NULL;
1473 		pr_warning("Could not create debugfs '%s/filter' entry\n", name);
1474 	}
1475 
1476 	trace_create_file("enable", 0644, dir->entry, dir,
1477 			  &ftrace_system_enable_fops);
1478 
1479 	list_add(&dir->list, &tr->systems);
1480 
1481 	return dir->entry;
1482 
1483  out_free:
1484 	kfree(dir);
1485  out_fail:
1486 	/* Only print this message if failed on memory allocation */
1487 	if (!dir || !system)
1488 		pr_warning("No memory to create event subsystem %s\n",
1489 			   name);
1490 	return NULL;
1491 }
1492 
1493 static int
1494 event_create_dir(struct dentry *parent, struct ftrace_event_file *file)
1495 {
1496 	struct ftrace_event_call *call = file->event_call;
1497 	struct trace_array *tr = file->tr;
1498 	struct list_head *head;
1499 	struct dentry *d_events;
1500 	int ret;
1501 
1502 	/*
1503 	 * If the trace point header did not define TRACE_SYSTEM
1504 	 * then the system would be called "TRACE_SYSTEM".
1505 	 */
1506 	if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
1507 		d_events = event_subsystem_dir(tr, call->class->system, file, parent);
1508 		if (!d_events)
1509 			return -ENOMEM;
1510 	} else
1511 		d_events = parent;
1512 
1513 	file->dir = debugfs_create_dir(call->name, d_events);
1514 	if (!file->dir) {
1515 		pr_warning("Could not create debugfs '%s' directory\n",
1516 			   call->name);
1517 		return -1;
1518 	}
1519 
1520 	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
1521 		trace_create_file("enable", 0644, file->dir, file,
1522 				  &ftrace_enable_fops);
1523 
1524 #ifdef CONFIG_PERF_EVENTS
1525 	if (call->event.type && call->class->reg)
1526 		trace_create_file("id", 0444, file->dir,
1527 				  (void *)(long)call->event.type,
1528 				  &ftrace_event_id_fops);
1529 #endif
1530 
1531 	/*
1532 	 * Other events may have the same class. Only update
1533 	 * the fields if they are not already defined.
1534 	 */
1535 	head = trace_get_fields(call);
1536 	if (list_empty(head)) {
1537 		ret = call->class->define_fields(call);
1538 		if (ret < 0) {
1539 			pr_warning("Could not initialize trace point"
1540 				   " events/%s\n", call->name);
1541 			return -1;
1542 		}
1543 	}
1544 	trace_create_file("filter", 0644, file->dir, file,
1545 			  &ftrace_event_filter_fops);
1546 
1547 	trace_create_file("trigger", 0644, file->dir, file,
1548 			  &event_trigger_fops);
1549 
1550 	trace_create_file("format", 0444, file->dir, call,
1551 			  &ftrace_event_format_fops);
1552 
1553 	return 0;
1554 }
1555 
1556 static void remove_event_from_tracers(struct ftrace_event_call *call)
1557 {
1558 	struct ftrace_event_file *file;
1559 	struct trace_array *tr;
1560 
1561 	do_for_each_event_file_safe(tr, file) {
1562 		if (file->event_call != call)
1563 			continue;
1564 
1565 		remove_event_file_dir(file);
1566 		/*
1567 		 * The do_for_each_event_file_safe() is
1568 		 * a double loop. After finding the call for this
1569 		 * trace_array, we use break to jump to the next
1570 		 * trace_array.
1571 		 */
1572 		break;
1573 	} while_for_each_event_file();
1574 }
1575 
1576 static void event_remove(struct ftrace_event_call *call)
1577 {
1578 	struct trace_array *tr;
1579 	struct ftrace_event_file *file;
1580 
1581 	do_for_each_event_file(tr, file) {
1582 		if (file->event_call != call)
1583 			continue;
1584 		ftrace_event_enable_disable(file, 0);
1585 		destroy_preds(file);
1586 		/*
1587 		 * The do_for_each_event_file() is
1588 		 * a double loop. After finding the call for this
1589 		 * trace_array, we use break to jump to the next
1590 		 * trace_array.
1591 		 */
1592 		break;
1593 	} while_for_each_event_file();
1594 
1595 	if (call->event.funcs)
1596 		__unregister_ftrace_event(&call->event);
1597 	remove_event_from_tracers(call);
1598 	list_del(&call->list);
1599 }
1600 
1601 static int event_init(struct ftrace_event_call *call)
1602 {
1603 	int ret = 0;
1604 
1605 	if (WARN_ON(!call->name))
1606 		return -EINVAL;
1607 
1608 	if (call->class->raw_init) {
1609 		ret = call->class->raw_init(call);
1610 		if (ret < 0 && ret != -ENOSYS)
1611 			pr_warn("Could not initialize trace events/%s\n",
1612 				call->name);
1613 	}
1614 
1615 	return ret;
1616 }
1617 
1618 static int
1619 __register_event(struct ftrace_event_call *call, struct module *mod)
1620 {
1621 	int ret;
1622 
1623 	ret = event_init(call);
1624 	if (ret < 0)
1625 		return ret;
1626 
1627 	list_add(&call->list, &ftrace_events);
1628 	call->mod = mod;
1629 
1630 	return 0;
1631 }
1632 
1633 static struct ftrace_event_file *
1634 trace_create_new_event(struct ftrace_event_call *call,
1635 		       struct trace_array *tr)
1636 {
1637 	struct ftrace_event_file *file;
1638 
1639 	file = kmem_cache_alloc(file_cachep, GFP_TRACE);
1640 	if (!file)
1641 		return NULL;
1642 
1643 	file->event_call = call;
1644 	file->tr = tr;
1645 	atomic_set(&file->sm_ref, 0);
1646 	atomic_set(&file->tm_ref, 0);
1647 	INIT_LIST_HEAD(&file->triggers);
1648 	list_add(&file->list, &tr->events);
1649 
1650 	return file;
1651 }
1652 
1653 /* Add an event to a trace directory */
1654 static int
1655 __trace_add_new_event(struct ftrace_event_call *call, struct trace_array *tr)
1656 {
1657 	struct ftrace_event_file *file;
1658 
1659 	file = trace_create_new_event(call, tr);
1660 	if (!file)
1661 		return -ENOMEM;
1662 
1663 	return event_create_dir(tr->event_dir, file);
1664 }
1665 
1666 /*
1667  * Just create a decriptor for early init. A descriptor is required
1668  * for enabling events at boot. We want to enable events before
1669  * the filesystem is initialized.
1670  */
1671 static __init int
1672 __trace_early_add_new_event(struct ftrace_event_call *call,
1673 			    struct trace_array *tr)
1674 {
1675 	struct ftrace_event_file *file;
1676 
1677 	file = trace_create_new_event(call, tr);
1678 	if (!file)
1679 		return -ENOMEM;
1680 
1681 	return 0;
1682 }
1683 
1684 struct ftrace_module_file_ops;
1685 static void __add_event_to_tracers(struct ftrace_event_call *call);
1686 
1687 /* Add an additional event_call dynamically */
1688 int trace_add_event_call(struct ftrace_event_call *call)
1689 {
1690 	int ret;
1691 	mutex_lock(&trace_types_lock);
1692 	mutex_lock(&event_mutex);
1693 
1694 	ret = __register_event(call, NULL);
1695 	if (ret >= 0)
1696 		__add_event_to_tracers(call);
1697 
1698 	mutex_unlock(&event_mutex);
1699 	mutex_unlock(&trace_types_lock);
1700 	return ret;
1701 }
1702 
1703 /*
1704  * Must be called under locking of trace_types_lock, event_mutex and
1705  * trace_event_sem.
1706  */
1707 static void __trace_remove_event_call(struct ftrace_event_call *call)
1708 {
1709 	event_remove(call);
1710 	trace_destroy_fields(call);
1711 	destroy_call_preds(call);
1712 }
1713 
1714 static int probe_remove_event_call(struct ftrace_event_call *call)
1715 {
1716 	struct trace_array *tr;
1717 	struct ftrace_event_file *file;
1718 
1719 #ifdef CONFIG_PERF_EVENTS
1720 	if (call->perf_refcount)
1721 		return -EBUSY;
1722 #endif
1723 	do_for_each_event_file(tr, file) {
1724 		if (file->event_call != call)
1725 			continue;
1726 		/*
1727 		 * We can't rely on ftrace_event_enable_disable(enable => 0)
1728 		 * we are going to do, FTRACE_EVENT_FL_SOFT_MODE can suppress
1729 		 * TRACE_REG_UNREGISTER.
1730 		 */
1731 		if (file->flags & FTRACE_EVENT_FL_ENABLED)
1732 			return -EBUSY;
1733 		/*
1734 		 * The do_for_each_event_file_safe() is
1735 		 * a double loop. After finding the call for this
1736 		 * trace_array, we use break to jump to the next
1737 		 * trace_array.
1738 		 */
1739 		break;
1740 	} while_for_each_event_file();
1741 
1742 	__trace_remove_event_call(call);
1743 
1744 	return 0;
1745 }
1746 
1747 /* Remove an event_call */
1748 int trace_remove_event_call(struct ftrace_event_call *call)
1749 {
1750 	int ret;
1751 
1752 	mutex_lock(&trace_types_lock);
1753 	mutex_lock(&event_mutex);
1754 	down_write(&trace_event_sem);
1755 	ret = probe_remove_event_call(call);
1756 	up_write(&trace_event_sem);
1757 	mutex_unlock(&event_mutex);
1758 	mutex_unlock(&trace_types_lock);
1759 
1760 	return ret;
1761 }
1762 
1763 #define for_each_event(event, start, end)			\
1764 	for (event = start;					\
1765 	     (unsigned long)event < (unsigned long)end;		\
1766 	     event++)
1767 
1768 #ifdef CONFIG_MODULES
1769 
1770 static void trace_module_add_events(struct module *mod)
1771 {
1772 	struct ftrace_event_call **call, **start, **end;
1773 
1774 	if (!mod->num_trace_events)
1775 		return;
1776 
1777 	/* Don't add infrastructure for mods without tracepoints */
1778 	if (trace_module_has_bad_taint(mod)) {
1779 		pr_err("%s: module has bad taint, not creating trace events\n",
1780 		       mod->name);
1781 		return;
1782 	}
1783 
1784 	start = mod->trace_events;
1785 	end = mod->trace_events + mod->num_trace_events;
1786 
1787 	for_each_event(call, start, end) {
1788 		__register_event(*call, mod);
1789 		__add_event_to_tracers(*call);
1790 	}
1791 }
1792 
1793 static void trace_module_remove_events(struct module *mod)
1794 {
1795 	struct ftrace_event_call *call, *p;
1796 	bool clear_trace = false;
1797 
1798 	down_write(&trace_event_sem);
1799 	list_for_each_entry_safe(call, p, &ftrace_events, list) {
1800 		if (call->mod == mod) {
1801 			if (call->flags & TRACE_EVENT_FL_WAS_ENABLED)
1802 				clear_trace = true;
1803 			__trace_remove_event_call(call);
1804 		}
1805 	}
1806 	up_write(&trace_event_sem);
1807 
1808 	/*
1809 	 * It is safest to reset the ring buffer if the module being unloaded
1810 	 * registered any events that were used. The only worry is if
1811 	 * a new module gets loaded, and takes on the same id as the events
1812 	 * of this module. When printing out the buffer, traced events left
1813 	 * over from this module may be passed to the new module events and
1814 	 * unexpected results may occur.
1815 	 */
1816 	if (clear_trace)
1817 		tracing_reset_all_online_cpus();
1818 }
1819 
1820 static int trace_module_notify(struct notifier_block *self,
1821 			       unsigned long val, void *data)
1822 {
1823 	struct module *mod = data;
1824 
1825 	mutex_lock(&trace_types_lock);
1826 	mutex_lock(&event_mutex);
1827 	switch (val) {
1828 	case MODULE_STATE_COMING:
1829 		trace_module_add_events(mod);
1830 		break;
1831 	case MODULE_STATE_GOING:
1832 		trace_module_remove_events(mod);
1833 		break;
1834 	}
1835 	mutex_unlock(&event_mutex);
1836 	mutex_unlock(&trace_types_lock);
1837 
1838 	return 0;
1839 }
1840 
1841 static struct notifier_block trace_module_nb = {
1842 	.notifier_call = trace_module_notify,
1843 	.priority = 0,
1844 };
1845 #endif /* CONFIG_MODULES */
1846 
1847 /* Create a new event directory structure for a trace directory. */
1848 static void
1849 __trace_add_event_dirs(struct trace_array *tr)
1850 {
1851 	struct ftrace_event_call *call;
1852 	int ret;
1853 
1854 	list_for_each_entry(call, &ftrace_events, list) {
1855 		ret = __trace_add_new_event(call, tr);
1856 		if (ret < 0)
1857 			pr_warning("Could not create directory for event %s\n",
1858 				   call->name);
1859 	}
1860 }
1861 
1862 struct ftrace_event_file *
1863 find_event_file(struct trace_array *tr, const char *system,  const char *event)
1864 {
1865 	struct ftrace_event_file *file;
1866 	struct ftrace_event_call *call;
1867 
1868 	list_for_each_entry(file, &tr->events, list) {
1869 
1870 		call = file->event_call;
1871 
1872 		if (!call->name || !call->class || !call->class->reg)
1873 			continue;
1874 
1875 		if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
1876 			continue;
1877 
1878 		if (strcmp(event, call->name) == 0 &&
1879 		    strcmp(system, call->class->system) == 0)
1880 			return file;
1881 	}
1882 	return NULL;
1883 }
1884 
1885 #ifdef CONFIG_DYNAMIC_FTRACE
1886 
1887 /* Avoid typos */
1888 #define ENABLE_EVENT_STR	"enable_event"
1889 #define DISABLE_EVENT_STR	"disable_event"
1890 
1891 struct event_probe_data {
1892 	struct ftrace_event_file	*file;
1893 	unsigned long			count;
1894 	int				ref;
1895 	bool				enable;
1896 };
1897 
1898 static void
1899 event_enable_probe(unsigned long ip, unsigned long parent_ip, void **_data)
1900 {
1901 	struct event_probe_data **pdata = (struct event_probe_data **)_data;
1902 	struct event_probe_data *data = *pdata;
1903 
1904 	if (!data)
1905 		return;
1906 
1907 	if (data->enable)
1908 		clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
1909 	else
1910 		set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
1911 }
1912 
1913 static void
1914 event_enable_count_probe(unsigned long ip, unsigned long parent_ip, void **_data)
1915 {
1916 	struct event_probe_data **pdata = (struct event_probe_data **)_data;
1917 	struct event_probe_data *data = *pdata;
1918 
1919 	if (!data)
1920 		return;
1921 
1922 	if (!data->count)
1923 		return;
1924 
1925 	/* Skip if the event is in a state we want to switch to */
1926 	if (data->enable == !(data->file->flags & FTRACE_EVENT_FL_SOFT_DISABLED))
1927 		return;
1928 
1929 	if (data->count != -1)
1930 		(data->count)--;
1931 
1932 	event_enable_probe(ip, parent_ip, _data);
1933 }
1934 
1935 static int
1936 event_enable_print(struct seq_file *m, unsigned long ip,
1937 		      struct ftrace_probe_ops *ops, void *_data)
1938 {
1939 	struct event_probe_data *data = _data;
1940 
1941 	seq_printf(m, "%ps:", (void *)ip);
1942 
1943 	seq_printf(m, "%s:%s:%s",
1944 		   data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR,
1945 		   data->file->event_call->class->system,
1946 		   data->file->event_call->name);
1947 
1948 	if (data->count == -1)
1949 		seq_printf(m, ":unlimited\n");
1950 	else
1951 		seq_printf(m, ":count=%ld\n", data->count);
1952 
1953 	return 0;
1954 }
1955 
1956 static int
1957 event_enable_init(struct ftrace_probe_ops *ops, unsigned long ip,
1958 		  void **_data)
1959 {
1960 	struct event_probe_data **pdata = (struct event_probe_data **)_data;
1961 	struct event_probe_data *data = *pdata;
1962 
1963 	data->ref++;
1964 	return 0;
1965 }
1966 
1967 static void
1968 event_enable_free(struct ftrace_probe_ops *ops, unsigned long ip,
1969 		  void **_data)
1970 {
1971 	struct event_probe_data **pdata = (struct event_probe_data **)_data;
1972 	struct event_probe_data *data = *pdata;
1973 
1974 	if (WARN_ON_ONCE(data->ref <= 0))
1975 		return;
1976 
1977 	data->ref--;
1978 	if (!data->ref) {
1979 		/* Remove the SOFT_MODE flag */
1980 		__ftrace_event_enable_disable(data->file, 0, 1);
1981 		module_put(data->file->event_call->mod);
1982 		kfree(data);
1983 	}
1984 	*pdata = NULL;
1985 }
1986 
1987 static struct ftrace_probe_ops event_enable_probe_ops = {
1988 	.func			= event_enable_probe,
1989 	.print			= event_enable_print,
1990 	.init			= event_enable_init,
1991 	.free			= event_enable_free,
1992 };
1993 
1994 static struct ftrace_probe_ops event_enable_count_probe_ops = {
1995 	.func			= event_enable_count_probe,
1996 	.print			= event_enable_print,
1997 	.init			= event_enable_init,
1998 	.free			= event_enable_free,
1999 };
2000 
2001 static struct ftrace_probe_ops event_disable_probe_ops = {
2002 	.func			= event_enable_probe,
2003 	.print			= event_enable_print,
2004 	.init			= event_enable_init,
2005 	.free			= event_enable_free,
2006 };
2007 
2008 static struct ftrace_probe_ops event_disable_count_probe_ops = {
2009 	.func			= event_enable_count_probe,
2010 	.print			= event_enable_print,
2011 	.init			= event_enable_init,
2012 	.free			= event_enable_free,
2013 };
2014 
2015 static int
2016 event_enable_func(struct ftrace_hash *hash,
2017 		  char *glob, char *cmd, char *param, int enabled)
2018 {
2019 	struct trace_array *tr = top_trace_array();
2020 	struct ftrace_event_file *file;
2021 	struct ftrace_probe_ops *ops;
2022 	struct event_probe_data *data;
2023 	const char *system;
2024 	const char *event;
2025 	char *number;
2026 	bool enable;
2027 	int ret;
2028 
2029 	/* hash funcs only work with set_ftrace_filter */
2030 	if (!enabled || !param)
2031 		return -EINVAL;
2032 
2033 	system = strsep(&param, ":");
2034 	if (!param)
2035 		return -EINVAL;
2036 
2037 	event = strsep(&param, ":");
2038 
2039 	mutex_lock(&event_mutex);
2040 
2041 	ret = -EINVAL;
2042 	file = find_event_file(tr, system, event);
2043 	if (!file)
2044 		goto out;
2045 
2046 	enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
2047 
2048 	if (enable)
2049 		ops = param ? &event_enable_count_probe_ops : &event_enable_probe_ops;
2050 	else
2051 		ops = param ? &event_disable_count_probe_ops : &event_disable_probe_ops;
2052 
2053 	if (glob[0] == '!') {
2054 		unregister_ftrace_function_probe_func(glob+1, ops);
2055 		ret = 0;
2056 		goto out;
2057 	}
2058 
2059 	ret = -ENOMEM;
2060 	data = kzalloc(sizeof(*data), GFP_KERNEL);
2061 	if (!data)
2062 		goto out;
2063 
2064 	data->enable = enable;
2065 	data->count = -1;
2066 	data->file = file;
2067 
2068 	if (!param)
2069 		goto out_reg;
2070 
2071 	number = strsep(&param, ":");
2072 
2073 	ret = -EINVAL;
2074 	if (!strlen(number))
2075 		goto out_free;
2076 
2077 	/*
2078 	 * We use the callback data field (which is a pointer)
2079 	 * as our counter.
2080 	 */
2081 	ret = kstrtoul(number, 0, &data->count);
2082 	if (ret)
2083 		goto out_free;
2084 
2085  out_reg:
2086 	/* Don't let event modules unload while probe registered */
2087 	ret = try_module_get(file->event_call->mod);
2088 	if (!ret) {
2089 		ret = -EBUSY;
2090 		goto out_free;
2091 	}
2092 
2093 	ret = __ftrace_event_enable_disable(file, 1, 1);
2094 	if (ret < 0)
2095 		goto out_put;
2096 	ret = register_ftrace_function_probe(glob, ops, data);
2097 	/*
2098 	 * The above returns on success the # of functions enabled,
2099 	 * but if it didn't find any functions it returns zero.
2100 	 * Consider no functions a failure too.
2101 	 */
2102 	if (!ret) {
2103 		ret = -ENOENT;
2104 		goto out_disable;
2105 	} else if (ret < 0)
2106 		goto out_disable;
2107 	/* Just return zero, not the number of enabled functions */
2108 	ret = 0;
2109  out:
2110 	mutex_unlock(&event_mutex);
2111 	return ret;
2112 
2113  out_disable:
2114 	__ftrace_event_enable_disable(file, 0, 1);
2115  out_put:
2116 	module_put(file->event_call->mod);
2117  out_free:
2118 	kfree(data);
2119 	goto out;
2120 }
2121 
2122 static struct ftrace_func_command event_enable_cmd = {
2123 	.name			= ENABLE_EVENT_STR,
2124 	.func			= event_enable_func,
2125 };
2126 
2127 static struct ftrace_func_command event_disable_cmd = {
2128 	.name			= DISABLE_EVENT_STR,
2129 	.func			= event_enable_func,
2130 };
2131 
2132 static __init int register_event_cmds(void)
2133 {
2134 	int ret;
2135 
2136 	ret = register_ftrace_command(&event_enable_cmd);
2137 	if (WARN_ON(ret < 0))
2138 		return ret;
2139 	ret = register_ftrace_command(&event_disable_cmd);
2140 	if (WARN_ON(ret < 0))
2141 		unregister_ftrace_command(&event_enable_cmd);
2142 	return ret;
2143 }
2144 #else
2145 static inline int register_event_cmds(void) { return 0; }
2146 #endif /* CONFIG_DYNAMIC_FTRACE */
2147 
2148 /*
2149  * The top level array has already had its ftrace_event_file
2150  * descriptors created in order to allow for early events to
2151  * be recorded. This function is called after the debugfs has been
2152  * initialized, and we now have to create the files associated
2153  * to the events.
2154  */
2155 static __init void
2156 __trace_early_add_event_dirs(struct trace_array *tr)
2157 {
2158 	struct ftrace_event_file *file;
2159 	int ret;
2160 
2161 
2162 	list_for_each_entry(file, &tr->events, list) {
2163 		ret = event_create_dir(tr->event_dir, file);
2164 		if (ret < 0)
2165 			pr_warning("Could not create directory for event %s\n",
2166 				   file->event_call->name);
2167 	}
2168 }
2169 
2170 /*
2171  * For early boot up, the top trace array requires to have
2172  * a list of events that can be enabled. This must be done before
2173  * the filesystem is set up in order to allow events to be traced
2174  * early.
2175  */
2176 static __init void
2177 __trace_early_add_events(struct trace_array *tr)
2178 {
2179 	struct ftrace_event_call *call;
2180 	int ret;
2181 
2182 	list_for_each_entry(call, &ftrace_events, list) {
2183 		/* Early boot up should not have any modules loaded */
2184 		if (WARN_ON_ONCE(call->mod))
2185 			continue;
2186 
2187 		ret = __trace_early_add_new_event(call, tr);
2188 		if (ret < 0)
2189 			pr_warning("Could not create early event %s\n",
2190 				   call->name);
2191 	}
2192 }
2193 
2194 /* Remove the event directory structure for a trace directory. */
2195 static void
2196 __trace_remove_event_dirs(struct trace_array *tr)
2197 {
2198 	struct ftrace_event_file *file, *next;
2199 
2200 	list_for_each_entry_safe(file, next, &tr->events, list)
2201 		remove_event_file_dir(file);
2202 }
2203 
2204 static void __add_event_to_tracers(struct ftrace_event_call *call)
2205 {
2206 	struct trace_array *tr;
2207 
2208 	list_for_each_entry(tr, &ftrace_trace_arrays, list)
2209 		__trace_add_new_event(call, tr);
2210 }
2211 
2212 extern struct ftrace_event_call *__start_ftrace_events[];
2213 extern struct ftrace_event_call *__stop_ftrace_events[];
2214 
2215 static char bootup_event_buf[COMMAND_LINE_SIZE] __initdata;
2216 
2217 static __init int setup_trace_event(char *str)
2218 {
2219 	strlcpy(bootup_event_buf, str, COMMAND_LINE_SIZE);
2220 	ring_buffer_expanded = true;
2221 	tracing_selftest_disabled = true;
2222 
2223 	return 1;
2224 }
2225 __setup("trace_event=", setup_trace_event);
2226 
2227 /* Expects to have event_mutex held when called */
2228 static int
2229 create_event_toplevel_files(struct dentry *parent, struct trace_array *tr)
2230 {
2231 	struct dentry *d_events;
2232 	struct dentry *entry;
2233 
2234 	entry = debugfs_create_file("set_event", 0644, parent,
2235 				    tr, &ftrace_set_event_fops);
2236 	if (!entry) {
2237 		pr_warning("Could not create debugfs 'set_event' entry\n");
2238 		return -ENOMEM;
2239 	}
2240 
2241 	d_events = debugfs_create_dir("events", parent);
2242 	if (!d_events) {
2243 		pr_warning("Could not create debugfs 'events' directory\n");
2244 		return -ENOMEM;
2245 	}
2246 
2247 	/* ring buffer internal formats */
2248 	trace_create_file("header_page", 0444, d_events,
2249 			  ring_buffer_print_page_header,
2250 			  &ftrace_show_header_fops);
2251 
2252 	trace_create_file("header_event", 0444, d_events,
2253 			  ring_buffer_print_entry_header,
2254 			  &ftrace_show_header_fops);
2255 
2256 	trace_create_file("enable", 0644, d_events,
2257 			  tr, &ftrace_tr_enable_fops);
2258 
2259 	tr->event_dir = d_events;
2260 
2261 	return 0;
2262 }
2263 
2264 /**
2265  * event_trace_add_tracer - add a instance of a trace_array to events
2266  * @parent: The parent dentry to place the files/directories for events in
2267  * @tr: The trace array associated with these events
2268  *
2269  * When a new instance is created, it needs to set up its events
2270  * directory, as well as other files associated with events. It also
2271  * creates the event hierachry in the @parent/events directory.
2272  *
2273  * Returns 0 on success.
2274  */
2275 int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr)
2276 {
2277 	int ret;
2278 
2279 	mutex_lock(&event_mutex);
2280 
2281 	ret = create_event_toplevel_files(parent, tr);
2282 	if (ret)
2283 		goto out_unlock;
2284 
2285 	down_write(&trace_event_sem);
2286 	__trace_add_event_dirs(tr);
2287 	up_write(&trace_event_sem);
2288 
2289  out_unlock:
2290 	mutex_unlock(&event_mutex);
2291 
2292 	return ret;
2293 }
2294 
2295 /*
2296  * The top trace array already had its file descriptors created.
2297  * Now the files themselves need to be created.
2298  */
2299 static __init int
2300 early_event_add_tracer(struct dentry *parent, struct trace_array *tr)
2301 {
2302 	int ret;
2303 
2304 	mutex_lock(&event_mutex);
2305 
2306 	ret = create_event_toplevel_files(parent, tr);
2307 	if (ret)
2308 		goto out_unlock;
2309 
2310 	down_write(&trace_event_sem);
2311 	__trace_early_add_event_dirs(tr);
2312 	up_write(&trace_event_sem);
2313 
2314  out_unlock:
2315 	mutex_unlock(&event_mutex);
2316 
2317 	return ret;
2318 }
2319 
2320 int event_trace_del_tracer(struct trace_array *tr)
2321 {
2322 	mutex_lock(&event_mutex);
2323 
2324 	/* Disable any event triggers and associated soft-disabled events */
2325 	clear_event_triggers(tr);
2326 
2327 	/* Disable any running events */
2328 	__ftrace_set_clr_event_nolock(tr, NULL, NULL, NULL, 0);
2329 
2330 	/* Access to events are within rcu_read_lock_sched() */
2331 	synchronize_sched();
2332 
2333 	down_write(&trace_event_sem);
2334 	__trace_remove_event_dirs(tr);
2335 	debugfs_remove_recursive(tr->event_dir);
2336 	up_write(&trace_event_sem);
2337 
2338 	tr->event_dir = NULL;
2339 
2340 	mutex_unlock(&event_mutex);
2341 
2342 	return 0;
2343 }
2344 
2345 static __init int event_trace_memsetup(void)
2346 {
2347 	field_cachep = KMEM_CACHE(ftrace_event_field, SLAB_PANIC);
2348 	file_cachep = KMEM_CACHE(ftrace_event_file, SLAB_PANIC);
2349 	return 0;
2350 }
2351 
2352 static __init int event_trace_enable(void)
2353 {
2354 	struct trace_array *tr = top_trace_array();
2355 	struct ftrace_event_call **iter, *call;
2356 	char *buf = bootup_event_buf;
2357 	char *token;
2358 	int ret;
2359 
2360 	for_each_event(iter, __start_ftrace_events, __stop_ftrace_events) {
2361 
2362 		call = *iter;
2363 		ret = event_init(call);
2364 		if (!ret)
2365 			list_add(&call->list, &ftrace_events);
2366 	}
2367 
2368 	/*
2369 	 * We need the top trace array to have a working set of trace
2370 	 * points at early init, before the debug files and directories
2371 	 * are created. Create the file entries now, and attach them
2372 	 * to the actual file dentries later.
2373 	 */
2374 	__trace_early_add_events(tr);
2375 
2376 	while (true) {
2377 		token = strsep(&buf, ",");
2378 
2379 		if (!token)
2380 			break;
2381 		if (!*token)
2382 			continue;
2383 
2384 		ret = ftrace_set_clr_event(tr, token, 1);
2385 		if (ret)
2386 			pr_warn("Failed to enable trace event: %s\n", token);
2387 	}
2388 
2389 	trace_printk_start_comm();
2390 
2391 	register_event_cmds();
2392 
2393 	register_trigger_cmds();
2394 
2395 	return 0;
2396 }
2397 
2398 static __init int event_trace_init(void)
2399 {
2400 	struct trace_array *tr;
2401 	struct dentry *d_tracer;
2402 	struct dentry *entry;
2403 	int ret;
2404 
2405 	tr = top_trace_array();
2406 
2407 	d_tracer = tracing_init_dentry();
2408 	if (!d_tracer)
2409 		return 0;
2410 
2411 	entry = debugfs_create_file("available_events", 0444, d_tracer,
2412 				    tr, &ftrace_avail_fops);
2413 	if (!entry)
2414 		pr_warning("Could not create debugfs "
2415 			   "'available_events' entry\n");
2416 
2417 	if (trace_define_common_fields())
2418 		pr_warning("tracing: Failed to allocate common fields");
2419 
2420 	ret = early_event_add_tracer(d_tracer, tr);
2421 	if (ret)
2422 		return ret;
2423 
2424 #ifdef CONFIG_MODULES
2425 	ret = register_module_notifier(&trace_module_nb);
2426 	if (ret)
2427 		pr_warning("Failed to register trace events module notifier\n");
2428 #endif
2429 	return 0;
2430 }
2431 early_initcall(event_trace_memsetup);
2432 core_initcall(event_trace_enable);
2433 fs_initcall(event_trace_init);
2434 
2435 #ifdef CONFIG_FTRACE_STARTUP_TEST
2436 
2437 static DEFINE_SPINLOCK(test_spinlock);
2438 static DEFINE_SPINLOCK(test_spinlock_irq);
2439 static DEFINE_MUTEX(test_mutex);
2440 
2441 static __init void test_work(struct work_struct *dummy)
2442 {
2443 	spin_lock(&test_spinlock);
2444 	spin_lock_irq(&test_spinlock_irq);
2445 	udelay(1);
2446 	spin_unlock_irq(&test_spinlock_irq);
2447 	spin_unlock(&test_spinlock);
2448 
2449 	mutex_lock(&test_mutex);
2450 	msleep(1);
2451 	mutex_unlock(&test_mutex);
2452 }
2453 
2454 static __init int event_test_thread(void *unused)
2455 {
2456 	void *test_malloc;
2457 
2458 	test_malloc = kmalloc(1234, GFP_KERNEL);
2459 	if (!test_malloc)
2460 		pr_info("failed to kmalloc\n");
2461 
2462 	schedule_on_each_cpu(test_work);
2463 
2464 	kfree(test_malloc);
2465 
2466 	set_current_state(TASK_INTERRUPTIBLE);
2467 	while (!kthread_should_stop())
2468 		schedule();
2469 
2470 	return 0;
2471 }
2472 
2473 /*
2474  * Do various things that may trigger events.
2475  */
2476 static __init void event_test_stuff(void)
2477 {
2478 	struct task_struct *test_thread;
2479 
2480 	test_thread = kthread_run(event_test_thread, NULL, "test-events");
2481 	msleep(1);
2482 	kthread_stop(test_thread);
2483 }
2484 
2485 /*
2486  * For every trace event defined, we will test each trace point separately,
2487  * and then by groups, and finally all trace points.
2488  */
2489 static __init void event_trace_self_tests(void)
2490 {
2491 	struct ftrace_subsystem_dir *dir;
2492 	struct ftrace_event_file *file;
2493 	struct ftrace_event_call *call;
2494 	struct event_subsystem *system;
2495 	struct trace_array *tr;
2496 	int ret;
2497 
2498 	tr = top_trace_array();
2499 
2500 	pr_info("Running tests on trace events:\n");
2501 
2502 	list_for_each_entry(file, &tr->events, list) {
2503 
2504 		call = file->event_call;
2505 
2506 		/* Only test those that have a probe */
2507 		if (!call->class || !call->class->probe)
2508 			continue;
2509 
2510 /*
2511  * Testing syscall events here is pretty useless, but
2512  * we still do it if configured. But this is time consuming.
2513  * What we really need is a user thread to perform the
2514  * syscalls as we test.
2515  */
2516 #ifndef CONFIG_EVENT_TRACE_TEST_SYSCALLS
2517 		if (call->class->system &&
2518 		    strcmp(call->class->system, "syscalls") == 0)
2519 			continue;
2520 #endif
2521 
2522 		pr_info("Testing event %s: ", call->name);
2523 
2524 		/*
2525 		 * If an event is already enabled, someone is using
2526 		 * it and the self test should not be on.
2527 		 */
2528 		if (file->flags & FTRACE_EVENT_FL_ENABLED) {
2529 			pr_warning("Enabled event during self test!\n");
2530 			WARN_ON_ONCE(1);
2531 			continue;
2532 		}
2533 
2534 		ftrace_event_enable_disable(file, 1);
2535 		event_test_stuff();
2536 		ftrace_event_enable_disable(file, 0);
2537 
2538 		pr_cont("OK\n");
2539 	}
2540 
2541 	/* Now test at the sub system level */
2542 
2543 	pr_info("Running tests on trace event systems:\n");
2544 
2545 	list_for_each_entry(dir, &tr->systems, list) {
2546 
2547 		system = dir->subsystem;
2548 
2549 		/* the ftrace system is special, skip it */
2550 		if (strcmp(system->name, "ftrace") == 0)
2551 			continue;
2552 
2553 		pr_info("Testing event system %s: ", system->name);
2554 
2555 		ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 1);
2556 		if (WARN_ON_ONCE(ret)) {
2557 			pr_warning("error enabling system %s\n",
2558 				   system->name);
2559 			continue;
2560 		}
2561 
2562 		event_test_stuff();
2563 
2564 		ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 0);
2565 		if (WARN_ON_ONCE(ret)) {
2566 			pr_warning("error disabling system %s\n",
2567 				   system->name);
2568 			continue;
2569 		}
2570 
2571 		pr_cont("OK\n");
2572 	}
2573 
2574 	/* Test with all events enabled */
2575 
2576 	pr_info("Running tests on all trace events:\n");
2577 	pr_info("Testing all events: ");
2578 
2579 	ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 1);
2580 	if (WARN_ON_ONCE(ret)) {
2581 		pr_warning("error enabling all events\n");
2582 		return;
2583 	}
2584 
2585 	event_test_stuff();
2586 
2587 	/* reset sysname */
2588 	ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 0);
2589 	if (WARN_ON_ONCE(ret)) {
2590 		pr_warning("error disabling all events\n");
2591 		return;
2592 	}
2593 
2594 	pr_cont("OK\n");
2595 }
2596 
2597 #ifdef CONFIG_FUNCTION_TRACER
2598 
2599 static DEFINE_PER_CPU(atomic_t, ftrace_test_event_disable);
2600 
2601 static void
2602 function_test_events_call(unsigned long ip, unsigned long parent_ip,
2603 			  struct ftrace_ops *op, struct pt_regs *pt_regs)
2604 {
2605 	struct ring_buffer_event *event;
2606 	struct ring_buffer *buffer;
2607 	struct ftrace_entry *entry;
2608 	unsigned long flags;
2609 	long disabled;
2610 	int cpu;
2611 	int pc;
2612 
2613 	pc = preempt_count();
2614 	preempt_disable_notrace();
2615 	cpu = raw_smp_processor_id();
2616 	disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu));
2617 
2618 	if (disabled != 1)
2619 		goto out;
2620 
2621 	local_save_flags(flags);
2622 
2623 	event = trace_current_buffer_lock_reserve(&buffer,
2624 						  TRACE_FN, sizeof(*entry),
2625 						  flags, pc);
2626 	if (!event)
2627 		goto out;
2628 	entry	= ring_buffer_event_data(event);
2629 	entry->ip			= ip;
2630 	entry->parent_ip		= parent_ip;
2631 
2632 	trace_buffer_unlock_commit(buffer, event, flags, pc);
2633 
2634  out:
2635 	atomic_dec(&per_cpu(ftrace_test_event_disable, cpu));
2636 	preempt_enable_notrace();
2637 }
2638 
2639 static struct ftrace_ops trace_ops __initdata  =
2640 {
2641 	.func = function_test_events_call,
2642 	.flags = FTRACE_OPS_FL_RECURSION_SAFE,
2643 };
2644 
2645 static __init void event_trace_self_test_with_function(void)
2646 {
2647 	int ret;
2648 	ret = register_ftrace_function(&trace_ops);
2649 	if (WARN_ON(ret < 0)) {
2650 		pr_info("Failed to enable function tracer for event tests\n");
2651 		return;
2652 	}
2653 	pr_info("Running tests again, along with the function tracer\n");
2654 	event_trace_self_tests();
2655 	unregister_ftrace_function(&trace_ops);
2656 }
2657 #else
2658 static __init void event_trace_self_test_with_function(void)
2659 {
2660 }
2661 #endif
2662 
2663 static __init int event_trace_self_tests_init(void)
2664 {
2665 	if (!tracing_selftest_disabled) {
2666 		event_trace_self_tests();
2667 		event_trace_self_test_with_function();
2668 	}
2669 
2670 	return 0;
2671 }
2672 
2673 late_initcall(event_trace_self_tests_init);
2674 
2675 #endif
2676