xref: /openbmc/linux/kernel/trace/trace.c (revision 86db9f28)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * ring buffer based function tracer
4  *
5  * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com>
6  * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
7  *
8  * Originally taken from the RT patch by:
9  *    Arnaldo Carvalho de Melo <acme@redhat.com>
10  *
11  * Based on code from the latency_tracer, that is:
12  *  Copyright (C) 2004-2006 Ingo Molnar
13  *  Copyright (C) 2004 Nadia Yvette Chambers
14  */
15 #include <linux/ring_buffer.h>
16 #include <generated/utsrelease.h>
17 #include <linux/stacktrace.h>
18 #include <linux/writeback.h>
19 #include <linux/kallsyms.h>
20 #include <linux/seq_file.h>
21 #include <linux/notifier.h>
22 #include <linux/irqflags.h>
23 #include <linux/debugfs.h>
24 #include <linux/tracefs.h>
25 #include <linux/pagemap.h>
26 #include <linux/hardirq.h>
27 #include <linux/linkage.h>
28 #include <linux/uaccess.h>
29 #include <linux/vmalloc.h>
30 #include <linux/ftrace.h>
31 #include <linux/module.h>
32 #include <linux/percpu.h>
33 #include <linux/splice.h>
34 #include <linux/kdebug.h>
35 #include <linux/string.h>
36 #include <linux/mount.h>
37 #include <linux/rwsem.h>
38 #include <linux/slab.h>
39 #include <linux/ctype.h>
40 #include <linux/init.h>
41 #include <linux/poll.h>
42 #include <linux/nmi.h>
43 #include <linux/fs.h>
44 #include <linux/trace.h>
45 #include <linux/sched/clock.h>
46 #include <linux/sched/rt.h>
47 
48 #include "trace.h"
49 #include "trace_output.h"
50 
51 /*
52  * On boot up, the ring buffer is set to the minimum size, so that
53  * we do not waste memory on systems that are not using tracing.
54  */
55 bool ring_buffer_expanded;
56 
57 /*
58  * We need to change this state when a selftest is running.
59  * A selftest will lurk into the ring-buffer to count the
60  * entries inserted during the selftest although some concurrent
61  * insertions into the ring-buffer such as trace_printk could occurred
62  * at the same time, giving false positive or negative results.
63  */
64 static bool __read_mostly tracing_selftest_running;
65 
66 /*
67  * If a tracer is running, we do not want to run SELFTEST.
68  */
69 bool __read_mostly tracing_selftest_disabled;
70 
71 /* Pipe tracepoints to printk */
72 struct trace_iterator *tracepoint_print_iter;
73 int tracepoint_printk;
74 static DEFINE_STATIC_KEY_FALSE(tracepoint_printk_key);
75 
76 /* For tracers that don't implement custom flags */
77 static struct tracer_opt dummy_tracer_opt[] = {
78 	{ }
79 };
80 
81 static int
82 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
83 {
84 	return 0;
85 }
86 
87 /*
88  * To prevent the comm cache from being overwritten when no
89  * tracing is active, only save the comm when a trace event
90  * occurred.
91  */
92 static DEFINE_PER_CPU(bool, trace_taskinfo_save);
93 
94 /*
95  * Kill all tracing for good (never come back).
96  * It is initialized to 1 but will turn to zero if the initialization
97  * of the tracer is successful. But that is the only place that sets
98  * this back to zero.
99  */
100 static int tracing_disabled = 1;
101 
102 cpumask_var_t __read_mostly	tracing_buffer_mask;
103 
104 /*
105  * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
106  *
107  * If there is an oops (or kernel panic) and the ftrace_dump_on_oops
108  * is set, then ftrace_dump is called. This will output the contents
109  * of the ftrace buffers to the console.  This is very useful for
110  * capturing traces that lead to crashes and outputing it to a
111  * serial console.
112  *
113  * It is default off, but you can enable it with either specifying
114  * "ftrace_dump_on_oops" in the kernel command line, or setting
115  * /proc/sys/kernel/ftrace_dump_on_oops
116  * Set 1 if you want to dump buffers of all CPUs
117  * Set 2 if you want to dump the buffer of the CPU that triggered oops
118  */
119 
120 enum ftrace_dump_mode ftrace_dump_on_oops;
121 
122 /* When set, tracing will stop when a WARN*() is hit */
123 int __disable_trace_on_warning;
124 
125 #ifdef CONFIG_TRACE_EVAL_MAP_FILE
126 /* Map of enums to their values, for "eval_map" file */
127 struct trace_eval_map_head {
128 	struct module			*mod;
129 	unsigned long			length;
130 };
131 
132 union trace_eval_map_item;
133 
134 struct trace_eval_map_tail {
135 	/*
136 	 * "end" is first and points to NULL as it must be different
137 	 * than "mod" or "eval_string"
138 	 */
139 	union trace_eval_map_item	*next;
140 	const char			*end;	/* points to NULL */
141 };
142 
143 static DEFINE_MUTEX(trace_eval_mutex);
144 
145 /*
146  * The trace_eval_maps are saved in an array with two extra elements,
147  * one at the beginning, and one at the end. The beginning item contains
148  * the count of the saved maps (head.length), and the module they
149  * belong to if not built in (head.mod). The ending item contains a
150  * pointer to the next array of saved eval_map items.
151  */
152 union trace_eval_map_item {
153 	struct trace_eval_map		map;
154 	struct trace_eval_map_head	head;
155 	struct trace_eval_map_tail	tail;
156 };
157 
158 static union trace_eval_map_item *trace_eval_maps;
159 #endif /* CONFIG_TRACE_EVAL_MAP_FILE */
160 
161 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
162 static void ftrace_trace_userstack(struct ring_buffer *buffer,
163 				   unsigned long flags, int pc);
164 
165 #define MAX_TRACER_SIZE		100
166 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
167 static char *default_bootup_tracer;
168 
169 static bool allocate_snapshot;
170 
171 static int __init set_cmdline_ftrace(char *str)
172 {
173 	strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
174 	default_bootup_tracer = bootup_tracer_buf;
175 	/* We are using ftrace early, expand it */
176 	ring_buffer_expanded = true;
177 	return 1;
178 }
179 __setup("ftrace=", set_cmdline_ftrace);
180 
181 static int __init set_ftrace_dump_on_oops(char *str)
182 {
183 	if (*str++ != '=' || !*str) {
184 		ftrace_dump_on_oops = DUMP_ALL;
185 		return 1;
186 	}
187 
188 	if (!strcmp("orig_cpu", str)) {
189 		ftrace_dump_on_oops = DUMP_ORIG;
190                 return 1;
191         }
192 
193         return 0;
194 }
195 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);
196 
197 static int __init stop_trace_on_warning(char *str)
198 {
199 	if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
200 		__disable_trace_on_warning = 1;
201 	return 1;
202 }
203 __setup("traceoff_on_warning", stop_trace_on_warning);
204 
205 static int __init boot_alloc_snapshot(char *str)
206 {
207 	allocate_snapshot = true;
208 	/* We also need the main ring buffer expanded */
209 	ring_buffer_expanded = true;
210 	return 1;
211 }
212 __setup("alloc_snapshot", boot_alloc_snapshot);
213 
214 
215 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
216 
217 static int __init set_trace_boot_options(char *str)
218 {
219 	strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
220 	return 0;
221 }
222 __setup("trace_options=", set_trace_boot_options);
223 
224 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
225 static char *trace_boot_clock __initdata;
226 
227 static int __init set_trace_boot_clock(char *str)
228 {
229 	strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
230 	trace_boot_clock = trace_boot_clock_buf;
231 	return 0;
232 }
233 __setup("trace_clock=", set_trace_boot_clock);
234 
235 static int __init set_tracepoint_printk(char *str)
236 {
237 	if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
238 		tracepoint_printk = 1;
239 	return 1;
240 }
241 __setup("tp_printk", set_tracepoint_printk);
242 
243 unsigned long long ns2usecs(u64 nsec)
244 {
245 	nsec += 500;
246 	do_div(nsec, 1000);
247 	return nsec;
248 }
249 
250 /* trace_flags holds trace_options default values */
251 #define TRACE_DEFAULT_FLAGS						\
252 	(FUNCTION_DEFAULT_FLAGS |					\
253 	 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |			\
254 	 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO |		\
255 	 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |			\
256 	 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS)
257 
258 /* trace_options that are only supported by global_trace */
259 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK |			\
260 	       TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD)
261 
262 /* trace_flags that are default zero for instances */
263 #define ZEROED_TRACE_FLAGS \
264 	(TRACE_ITER_EVENT_FORK | TRACE_ITER_FUNC_FORK)
265 
266 /*
267  * The global_trace is the descriptor that holds the top-level tracing
268  * buffers for the live tracing.
269  */
270 static struct trace_array global_trace = {
271 	.trace_flags = TRACE_DEFAULT_FLAGS,
272 };
273 
274 LIST_HEAD(ftrace_trace_arrays);
275 
276 int trace_array_get(struct trace_array *this_tr)
277 {
278 	struct trace_array *tr;
279 	int ret = -ENODEV;
280 
281 	mutex_lock(&trace_types_lock);
282 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
283 		if (tr == this_tr) {
284 			tr->ref++;
285 			ret = 0;
286 			break;
287 		}
288 	}
289 	mutex_unlock(&trace_types_lock);
290 
291 	return ret;
292 }
293 
294 static void __trace_array_put(struct trace_array *this_tr)
295 {
296 	WARN_ON(!this_tr->ref);
297 	this_tr->ref--;
298 }
299 
300 void trace_array_put(struct trace_array *this_tr)
301 {
302 	mutex_lock(&trace_types_lock);
303 	__trace_array_put(this_tr);
304 	mutex_unlock(&trace_types_lock);
305 }
306 
307 int call_filter_check_discard(struct trace_event_call *call, void *rec,
308 			      struct ring_buffer *buffer,
309 			      struct ring_buffer_event *event)
310 {
311 	if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
312 	    !filter_match_preds(call->filter, rec)) {
313 		__trace_event_discard_commit(buffer, event);
314 		return 1;
315 	}
316 
317 	return 0;
318 }
319 
320 void trace_free_pid_list(struct trace_pid_list *pid_list)
321 {
322 	vfree(pid_list->pids);
323 	kfree(pid_list);
324 }
325 
326 /**
327  * trace_find_filtered_pid - check if a pid exists in a filtered_pid list
328  * @filtered_pids: The list of pids to check
329  * @search_pid: The PID to find in @filtered_pids
330  *
331  * Returns true if @search_pid is fonud in @filtered_pids, and false otherwis.
332  */
333 bool
334 trace_find_filtered_pid(struct trace_pid_list *filtered_pids, pid_t search_pid)
335 {
336 	/*
337 	 * If pid_max changed after filtered_pids was created, we
338 	 * by default ignore all pids greater than the previous pid_max.
339 	 */
340 	if (search_pid >= filtered_pids->pid_max)
341 		return false;
342 
343 	return test_bit(search_pid, filtered_pids->pids);
344 }
345 
346 /**
347  * trace_ignore_this_task - should a task be ignored for tracing
348  * @filtered_pids: The list of pids to check
349  * @task: The task that should be ignored if not filtered
350  *
351  * Checks if @task should be traced or not from @filtered_pids.
352  * Returns true if @task should *NOT* be traced.
353  * Returns false if @task should be traced.
354  */
355 bool
356 trace_ignore_this_task(struct trace_pid_list *filtered_pids, struct task_struct *task)
357 {
358 	/*
359 	 * Return false, because if filtered_pids does not exist,
360 	 * all pids are good to trace.
361 	 */
362 	if (!filtered_pids)
363 		return false;
364 
365 	return !trace_find_filtered_pid(filtered_pids, task->pid);
366 }
367 
368 /**
369  * trace_filter_add_remove_task - Add or remove a task from a pid_list
370  * @pid_list: The list to modify
371  * @self: The current task for fork or NULL for exit
372  * @task: The task to add or remove
373  *
374  * If adding a task, if @self is defined, the task is only added if @self
375  * is also included in @pid_list. This happens on fork and tasks should
376  * only be added when the parent is listed. If @self is NULL, then the
377  * @task pid will be removed from the list, which would happen on exit
378  * of a task.
379  */
380 void trace_filter_add_remove_task(struct trace_pid_list *pid_list,
381 				  struct task_struct *self,
382 				  struct task_struct *task)
383 {
384 	if (!pid_list)
385 		return;
386 
387 	/* For forks, we only add if the forking task is listed */
388 	if (self) {
389 		if (!trace_find_filtered_pid(pid_list, self->pid))
390 			return;
391 	}
392 
393 	/* Sorry, but we don't support pid_max changing after setting */
394 	if (task->pid >= pid_list->pid_max)
395 		return;
396 
397 	/* "self" is set for forks, and NULL for exits */
398 	if (self)
399 		set_bit(task->pid, pid_list->pids);
400 	else
401 		clear_bit(task->pid, pid_list->pids);
402 }
403 
404 /**
405  * trace_pid_next - Used for seq_file to get to the next pid of a pid_list
406  * @pid_list: The pid list to show
407  * @v: The last pid that was shown (+1 the actual pid to let zero be displayed)
408  * @pos: The position of the file
409  *
410  * This is used by the seq_file "next" operation to iterate the pids
411  * listed in a trace_pid_list structure.
412  *
413  * Returns the pid+1 as we want to display pid of zero, but NULL would
414  * stop the iteration.
415  */
416 void *trace_pid_next(struct trace_pid_list *pid_list, void *v, loff_t *pos)
417 {
418 	unsigned long pid = (unsigned long)v;
419 
420 	(*pos)++;
421 
422 	/* pid already is +1 of the actual prevous bit */
423 	pid = find_next_bit(pid_list->pids, pid_list->pid_max, pid);
424 
425 	/* Return pid + 1 to allow zero to be represented */
426 	if (pid < pid_list->pid_max)
427 		return (void *)(pid + 1);
428 
429 	return NULL;
430 }
431 
432 /**
433  * trace_pid_start - Used for seq_file to start reading pid lists
434  * @pid_list: The pid list to show
435  * @pos: The position of the file
436  *
437  * This is used by seq_file "start" operation to start the iteration
438  * of listing pids.
439  *
440  * Returns the pid+1 as we want to display pid of zero, but NULL would
441  * stop the iteration.
442  */
443 void *trace_pid_start(struct trace_pid_list *pid_list, loff_t *pos)
444 {
445 	unsigned long pid;
446 	loff_t l = 0;
447 
448 	pid = find_first_bit(pid_list->pids, pid_list->pid_max);
449 	if (pid >= pid_list->pid_max)
450 		return NULL;
451 
452 	/* Return pid + 1 so that zero can be the exit value */
453 	for (pid++; pid && l < *pos;
454 	     pid = (unsigned long)trace_pid_next(pid_list, (void *)pid, &l))
455 		;
456 	return (void *)pid;
457 }
458 
459 /**
460  * trace_pid_show - show the current pid in seq_file processing
461  * @m: The seq_file structure to write into
462  * @v: A void pointer of the pid (+1) value to display
463  *
464  * Can be directly used by seq_file operations to display the current
465  * pid value.
466  */
467 int trace_pid_show(struct seq_file *m, void *v)
468 {
469 	unsigned long pid = (unsigned long)v - 1;
470 
471 	seq_printf(m, "%lu\n", pid);
472 	return 0;
473 }
474 
475 /* 128 should be much more than enough */
476 #define PID_BUF_SIZE		127
477 
478 int trace_pid_write(struct trace_pid_list *filtered_pids,
479 		    struct trace_pid_list **new_pid_list,
480 		    const char __user *ubuf, size_t cnt)
481 {
482 	struct trace_pid_list *pid_list;
483 	struct trace_parser parser;
484 	unsigned long val;
485 	int nr_pids = 0;
486 	ssize_t read = 0;
487 	ssize_t ret = 0;
488 	loff_t pos;
489 	pid_t pid;
490 
491 	if (trace_parser_get_init(&parser, PID_BUF_SIZE + 1))
492 		return -ENOMEM;
493 
494 	/*
495 	 * Always recreate a new array. The write is an all or nothing
496 	 * operation. Always create a new array when adding new pids by
497 	 * the user. If the operation fails, then the current list is
498 	 * not modified.
499 	 */
500 	pid_list = kmalloc(sizeof(*pid_list), GFP_KERNEL);
501 	if (!pid_list) {
502 		trace_parser_put(&parser);
503 		return -ENOMEM;
504 	}
505 
506 	pid_list->pid_max = READ_ONCE(pid_max);
507 
508 	/* Only truncating will shrink pid_max */
509 	if (filtered_pids && filtered_pids->pid_max > pid_list->pid_max)
510 		pid_list->pid_max = filtered_pids->pid_max;
511 
512 	pid_list->pids = vzalloc((pid_list->pid_max + 7) >> 3);
513 	if (!pid_list->pids) {
514 		trace_parser_put(&parser);
515 		kfree(pid_list);
516 		return -ENOMEM;
517 	}
518 
519 	if (filtered_pids) {
520 		/* copy the current bits to the new max */
521 		for_each_set_bit(pid, filtered_pids->pids,
522 				 filtered_pids->pid_max) {
523 			set_bit(pid, pid_list->pids);
524 			nr_pids++;
525 		}
526 	}
527 
528 	while (cnt > 0) {
529 
530 		pos = 0;
531 
532 		ret = trace_get_user(&parser, ubuf, cnt, &pos);
533 		if (ret < 0 || !trace_parser_loaded(&parser))
534 			break;
535 
536 		read += ret;
537 		ubuf += ret;
538 		cnt -= ret;
539 
540 		ret = -EINVAL;
541 		if (kstrtoul(parser.buffer, 0, &val))
542 			break;
543 		if (val >= pid_list->pid_max)
544 			break;
545 
546 		pid = (pid_t)val;
547 
548 		set_bit(pid, pid_list->pids);
549 		nr_pids++;
550 
551 		trace_parser_clear(&parser);
552 		ret = 0;
553 	}
554 	trace_parser_put(&parser);
555 
556 	if (ret < 0) {
557 		trace_free_pid_list(pid_list);
558 		return ret;
559 	}
560 
561 	if (!nr_pids) {
562 		/* Cleared the list of pids */
563 		trace_free_pid_list(pid_list);
564 		read = ret;
565 		pid_list = NULL;
566 	}
567 
568 	*new_pid_list = pid_list;
569 
570 	return read;
571 }
572 
573 static u64 buffer_ftrace_now(struct trace_buffer *buf, int cpu)
574 {
575 	u64 ts;
576 
577 	/* Early boot up does not have a buffer yet */
578 	if (!buf->buffer)
579 		return trace_clock_local();
580 
581 	ts = ring_buffer_time_stamp(buf->buffer, cpu);
582 	ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
583 
584 	return ts;
585 }
586 
587 u64 ftrace_now(int cpu)
588 {
589 	return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
590 }
591 
592 /**
593  * tracing_is_enabled - Show if global_trace has been disabled
594  *
595  * Shows if the global trace has been enabled or not. It uses the
596  * mirror flag "buffer_disabled" to be used in fast paths such as for
597  * the irqsoff tracer. But it may be inaccurate due to races. If you
598  * need to know the accurate state, use tracing_is_on() which is a little
599  * slower, but accurate.
600  */
601 int tracing_is_enabled(void)
602 {
603 	/*
604 	 * For quick access (irqsoff uses this in fast path), just
605 	 * return the mirror variable of the state of the ring buffer.
606 	 * It's a little racy, but we don't really care.
607 	 */
608 	smp_rmb();
609 	return !global_trace.buffer_disabled;
610 }
611 
612 /*
613  * trace_buf_size is the size in bytes that is allocated
614  * for a buffer. Note, the number of bytes is always rounded
615  * to page size.
616  *
617  * This number is purposely set to a low number of 16384.
618  * If the dump on oops happens, it will be much appreciated
619  * to not have to wait for all that output. Anyway this can be
620  * boot time and run time configurable.
621  */
622 #define TRACE_BUF_SIZE_DEFAULT	1441792UL /* 16384 * 88 (sizeof(entry)) */
623 
624 static unsigned long		trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
625 
626 /* trace_types holds a link list of available tracers. */
627 static struct tracer		*trace_types __read_mostly;
628 
629 /*
630  * trace_types_lock is used to protect the trace_types list.
631  */
632 DEFINE_MUTEX(trace_types_lock);
633 
634 /*
635  * serialize the access of the ring buffer
636  *
637  * ring buffer serializes readers, but it is low level protection.
638  * The validity of the events (which returns by ring_buffer_peek() ..etc)
639  * are not protected by ring buffer.
640  *
641  * The content of events may become garbage if we allow other process consumes
642  * these events concurrently:
643  *   A) the page of the consumed events may become a normal page
644  *      (not reader page) in ring buffer, and this page will be rewrited
645  *      by events producer.
646  *   B) The page of the consumed events may become a page for splice_read,
647  *      and this page will be returned to system.
648  *
649  * These primitives allow multi process access to different cpu ring buffer
650  * concurrently.
651  *
652  * These primitives don't distinguish read-only and read-consume access.
653  * Multi read-only access are also serialized.
654  */
655 
656 #ifdef CONFIG_SMP
657 static DECLARE_RWSEM(all_cpu_access_lock);
658 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
659 
660 static inline void trace_access_lock(int cpu)
661 {
662 	if (cpu == RING_BUFFER_ALL_CPUS) {
663 		/* gain it for accessing the whole ring buffer. */
664 		down_write(&all_cpu_access_lock);
665 	} else {
666 		/* gain it for accessing a cpu ring buffer. */
667 
668 		/* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
669 		down_read(&all_cpu_access_lock);
670 
671 		/* Secondly block other access to this @cpu ring buffer. */
672 		mutex_lock(&per_cpu(cpu_access_lock, cpu));
673 	}
674 }
675 
676 static inline void trace_access_unlock(int cpu)
677 {
678 	if (cpu == RING_BUFFER_ALL_CPUS) {
679 		up_write(&all_cpu_access_lock);
680 	} else {
681 		mutex_unlock(&per_cpu(cpu_access_lock, cpu));
682 		up_read(&all_cpu_access_lock);
683 	}
684 }
685 
686 static inline void trace_access_lock_init(void)
687 {
688 	int cpu;
689 
690 	for_each_possible_cpu(cpu)
691 		mutex_init(&per_cpu(cpu_access_lock, cpu));
692 }
693 
694 #else
695 
696 static DEFINE_MUTEX(access_lock);
697 
698 static inline void trace_access_lock(int cpu)
699 {
700 	(void)cpu;
701 	mutex_lock(&access_lock);
702 }
703 
704 static inline void trace_access_unlock(int cpu)
705 {
706 	(void)cpu;
707 	mutex_unlock(&access_lock);
708 }
709 
710 static inline void trace_access_lock_init(void)
711 {
712 }
713 
714 #endif
715 
716 #ifdef CONFIG_STACKTRACE
717 static void __ftrace_trace_stack(struct ring_buffer *buffer,
718 				 unsigned long flags,
719 				 int skip, int pc, struct pt_regs *regs);
720 static inline void ftrace_trace_stack(struct trace_array *tr,
721 				      struct ring_buffer *buffer,
722 				      unsigned long flags,
723 				      int skip, int pc, struct pt_regs *regs);
724 
725 #else
726 static inline void __ftrace_trace_stack(struct ring_buffer *buffer,
727 					unsigned long flags,
728 					int skip, int pc, struct pt_regs *regs)
729 {
730 }
731 static inline void ftrace_trace_stack(struct trace_array *tr,
732 				      struct ring_buffer *buffer,
733 				      unsigned long flags,
734 				      int skip, int pc, struct pt_regs *regs)
735 {
736 }
737 
738 #endif
739 
740 static __always_inline void
741 trace_event_setup(struct ring_buffer_event *event,
742 		  int type, unsigned long flags, int pc)
743 {
744 	struct trace_entry *ent = ring_buffer_event_data(event);
745 
746 	tracing_generic_entry_update(ent, type, flags, pc);
747 }
748 
749 static __always_inline struct ring_buffer_event *
750 __trace_buffer_lock_reserve(struct ring_buffer *buffer,
751 			  int type,
752 			  unsigned long len,
753 			  unsigned long flags, int pc)
754 {
755 	struct ring_buffer_event *event;
756 
757 	event = ring_buffer_lock_reserve(buffer, len);
758 	if (event != NULL)
759 		trace_event_setup(event, type, flags, pc);
760 
761 	return event;
762 }
763 
764 void tracer_tracing_on(struct trace_array *tr)
765 {
766 	if (tr->trace_buffer.buffer)
767 		ring_buffer_record_on(tr->trace_buffer.buffer);
768 	/*
769 	 * This flag is looked at when buffers haven't been allocated
770 	 * yet, or by some tracers (like irqsoff), that just want to
771 	 * know if the ring buffer has been disabled, but it can handle
772 	 * races of where it gets disabled but we still do a record.
773 	 * As the check is in the fast path of the tracers, it is more
774 	 * important to be fast than accurate.
775 	 */
776 	tr->buffer_disabled = 0;
777 	/* Make the flag seen by readers */
778 	smp_wmb();
779 }
780 
781 /**
782  * tracing_on - enable tracing buffers
783  *
784  * This function enables tracing buffers that may have been
785  * disabled with tracing_off.
786  */
787 void tracing_on(void)
788 {
789 	tracer_tracing_on(&global_trace);
790 }
791 EXPORT_SYMBOL_GPL(tracing_on);
792 
793 
794 static __always_inline void
795 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
796 {
797 	__this_cpu_write(trace_taskinfo_save, true);
798 
799 	/* If this is the temp buffer, we need to commit fully */
800 	if (this_cpu_read(trace_buffered_event) == event) {
801 		/* Length is in event->array[0] */
802 		ring_buffer_write(buffer, event->array[0], &event->array[1]);
803 		/* Release the temp buffer */
804 		this_cpu_dec(trace_buffered_event_cnt);
805 	} else
806 		ring_buffer_unlock_commit(buffer, event);
807 }
808 
809 /**
810  * __trace_puts - write a constant string into the trace buffer.
811  * @ip:	   The address of the caller
812  * @str:   The constant string to write
813  * @size:  The size of the string.
814  */
815 int __trace_puts(unsigned long ip, const char *str, int size)
816 {
817 	struct ring_buffer_event *event;
818 	struct ring_buffer *buffer;
819 	struct print_entry *entry;
820 	unsigned long irq_flags;
821 	int alloc;
822 	int pc;
823 
824 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
825 		return 0;
826 
827 	pc = preempt_count();
828 
829 	if (unlikely(tracing_selftest_running || tracing_disabled))
830 		return 0;
831 
832 	alloc = sizeof(*entry) + size + 2; /* possible \n added */
833 
834 	local_save_flags(irq_flags);
835 	buffer = global_trace.trace_buffer.buffer;
836 	event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
837 					    irq_flags, pc);
838 	if (!event)
839 		return 0;
840 
841 	entry = ring_buffer_event_data(event);
842 	entry->ip = ip;
843 
844 	memcpy(&entry->buf, str, size);
845 
846 	/* Add a newline if necessary */
847 	if (entry->buf[size - 1] != '\n') {
848 		entry->buf[size] = '\n';
849 		entry->buf[size + 1] = '\0';
850 	} else
851 		entry->buf[size] = '\0';
852 
853 	__buffer_unlock_commit(buffer, event);
854 	ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
855 
856 	return size;
857 }
858 EXPORT_SYMBOL_GPL(__trace_puts);
859 
860 /**
861  * __trace_bputs - write the pointer to a constant string into trace buffer
862  * @ip:	   The address of the caller
863  * @str:   The constant string to write to the buffer to
864  */
865 int __trace_bputs(unsigned long ip, const char *str)
866 {
867 	struct ring_buffer_event *event;
868 	struct ring_buffer *buffer;
869 	struct bputs_entry *entry;
870 	unsigned long irq_flags;
871 	int size = sizeof(struct bputs_entry);
872 	int pc;
873 
874 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
875 		return 0;
876 
877 	pc = preempt_count();
878 
879 	if (unlikely(tracing_selftest_running || tracing_disabled))
880 		return 0;
881 
882 	local_save_flags(irq_flags);
883 	buffer = global_trace.trace_buffer.buffer;
884 	event = __trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
885 					    irq_flags, pc);
886 	if (!event)
887 		return 0;
888 
889 	entry = ring_buffer_event_data(event);
890 	entry->ip			= ip;
891 	entry->str			= str;
892 
893 	__buffer_unlock_commit(buffer, event);
894 	ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
895 
896 	return 1;
897 }
898 EXPORT_SYMBOL_GPL(__trace_bputs);
899 
900 #ifdef CONFIG_TRACER_SNAPSHOT
901 void tracing_snapshot_instance_cond(struct trace_array *tr, void *cond_data)
902 {
903 	struct tracer *tracer = tr->current_trace;
904 	unsigned long flags;
905 
906 	if (in_nmi()) {
907 		internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
908 		internal_trace_puts("*** snapshot is being ignored        ***\n");
909 		return;
910 	}
911 
912 	if (!tr->allocated_snapshot) {
913 		internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
914 		internal_trace_puts("*** stopping trace here!   ***\n");
915 		tracing_off();
916 		return;
917 	}
918 
919 	/* Note, snapshot can not be used when the tracer uses it */
920 	if (tracer->use_max_tr) {
921 		internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
922 		internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
923 		return;
924 	}
925 
926 	local_irq_save(flags);
927 	update_max_tr(tr, current, smp_processor_id(), cond_data);
928 	local_irq_restore(flags);
929 }
930 
931 void tracing_snapshot_instance(struct trace_array *tr)
932 {
933 	tracing_snapshot_instance_cond(tr, NULL);
934 }
935 
936 /**
937  * tracing_snapshot - take a snapshot of the current buffer.
938  *
939  * This causes a swap between the snapshot buffer and the current live
940  * tracing buffer. You can use this to take snapshots of the live
941  * trace when some condition is triggered, but continue to trace.
942  *
943  * Note, make sure to allocate the snapshot with either
944  * a tracing_snapshot_alloc(), or by doing it manually
945  * with: echo 1 > /sys/kernel/debug/tracing/snapshot
946  *
947  * If the snapshot buffer is not allocated, it will stop tracing.
948  * Basically making a permanent snapshot.
949  */
950 void tracing_snapshot(void)
951 {
952 	struct trace_array *tr = &global_trace;
953 
954 	tracing_snapshot_instance(tr);
955 }
956 EXPORT_SYMBOL_GPL(tracing_snapshot);
957 
958 /**
959  * tracing_snapshot_cond - conditionally take a snapshot of the current buffer.
960  * @tr:		The tracing instance to snapshot
961  * @cond_data:	The data to be tested conditionally, and possibly saved
962  *
963  * This is the same as tracing_snapshot() except that the snapshot is
964  * conditional - the snapshot will only happen if the
965  * cond_snapshot.update() implementation receiving the cond_data
966  * returns true, which means that the trace array's cond_snapshot
967  * update() operation used the cond_data to determine whether the
968  * snapshot should be taken, and if it was, presumably saved it along
969  * with the snapshot.
970  */
971 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data)
972 {
973 	tracing_snapshot_instance_cond(tr, cond_data);
974 }
975 EXPORT_SYMBOL_GPL(tracing_snapshot_cond);
976 
977 /**
978  * tracing_snapshot_cond_data - get the user data associated with a snapshot
979  * @tr:		The tracing instance
980  *
981  * When the user enables a conditional snapshot using
982  * tracing_snapshot_cond_enable(), the user-defined cond_data is saved
983  * with the snapshot.  This accessor is used to retrieve it.
984  *
985  * Should not be called from cond_snapshot.update(), since it takes
986  * the tr->max_lock lock, which the code calling
987  * cond_snapshot.update() has already done.
988  *
989  * Returns the cond_data associated with the trace array's snapshot.
990  */
991 void *tracing_cond_snapshot_data(struct trace_array *tr)
992 {
993 	void *cond_data = NULL;
994 
995 	arch_spin_lock(&tr->max_lock);
996 
997 	if (tr->cond_snapshot)
998 		cond_data = tr->cond_snapshot->cond_data;
999 
1000 	arch_spin_unlock(&tr->max_lock);
1001 
1002 	return cond_data;
1003 }
1004 EXPORT_SYMBOL_GPL(tracing_cond_snapshot_data);
1005 
1006 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
1007 					struct trace_buffer *size_buf, int cpu_id);
1008 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
1009 
1010 int tracing_alloc_snapshot_instance(struct trace_array *tr)
1011 {
1012 	int ret;
1013 
1014 	if (!tr->allocated_snapshot) {
1015 
1016 		/* allocate spare buffer */
1017 		ret = resize_buffer_duplicate_size(&tr->max_buffer,
1018 				   &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
1019 		if (ret < 0)
1020 			return ret;
1021 
1022 		tr->allocated_snapshot = true;
1023 	}
1024 
1025 	return 0;
1026 }
1027 
1028 static void free_snapshot(struct trace_array *tr)
1029 {
1030 	/*
1031 	 * We don't free the ring buffer. instead, resize it because
1032 	 * The max_tr ring buffer has some state (e.g. ring->clock) and
1033 	 * we want preserve it.
1034 	 */
1035 	ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
1036 	set_buffer_entries(&tr->max_buffer, 1);
1037 	tracing_reset_online_cpus(&tr->max_buffer);
1038 	tr->allocated_snapshot = false;
1039 }
1040 
1041 /**
1042  * tracing_alloc_snapshot - allocate snapshot buffer.
1043  *
1044  * This only allocates the snapshot buffer if it isn't already
1045  * allocated - it doesn't also take a snapshot.
1046  *
1047  * This is meant to be used in cases where the snapshot buffer needs
1048  * to be set up for events that can't sleep but need to be able to
1049  * trigger a snapshot.
1050  */
1051 int tracing_alloc_snapshot(void)
1052 {
1053 	struct trace_array *tr = &global_trace;
1054 	int ret;
1055 
1056 	ret = tracing_alloc_snapshot_instance(tr);
1057 	WARN_ON(ret < 0);
1058 
1059 	return ret;
1060 }
1061 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
1062 
1063 /**
1064  * tracing_snapshot_alloc - allocate and take a snapshot of the current buffer.
1065  *
1066  * This is similar to tracing_snapshot(), but it will allocate the
1067  * snapshot buffer if it isn't already allocated. Use this only
1068  * where it is safe to sleep, as the allocation may sleep.
1069  *
1070  * This causes a swap between the snapshot buffer and the current live
1071  * tracing buffer. You can use this to take snapshots of the live
1072  * trace when some condition is triggered, but continue to trace.
1073  */
1074 void tracing_snapshot_alloc(void)
1075 {
1076 	int ret;
1077 
1078 	ret = tracing_alloc_snapshot();
1079 	if (ret < 0)
1080 		return;
1081 
1082 	tracing_snapshot();
1083 }
1084 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
1085 
1086 /**
1087  * tracing_snapshot_cond_enable - enable conditional snapshot for an instance
1088  * @tr:		The tracing instance
1089  * @cond_data:	User data to associate with the snapshot
1090  * @update:	Implementation of the cond_snapshot update function
1091  *
1092  * Check whether the conditional snapshot for the given instance has
1093  * already been enabled, or if the current tracer is already using a
1094  * snapshot; if so, return -EBUSY, else create a cond_snapshot and
1095  * save the cond_data and update function inside.
1096  *
1097  * Returns 0 if successful, error otherwise.
1098  */
1099 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data,
1100 				 cond_update_fn_t update)
1101 {
1102 	struct cond_snapshot *cond_snapshot;
1103 	int ret = 0;
1104 
1105 	cond_snapshot = kzalloc(sizeof(*cond_snapshot), GFP_KERNEL);
1106 	if (!cond_snapshot)
1107 		return -ENOMEM;
1108 
1109 	cond_snapshot->cond_data = cond_data;
1110 	cond_snapshot->update = update;
1111 
1112 	mutex_lock(&trace_types_lock);
1113 
1114 	ret = tracing_alloc_snapshot_instance(tr);
1115 	if (ret)
1116 		goto fail_unlock;
1117 
1118 	if (tr->current_trace->use_max_tr) {
1119 		ret = -EBUSY;
1120 		goto fail_unlock;
1121 	}
1122 
1123 	/*
1124 	 * The cond_snapshot can only change to NULL without the
1125 	 * trace_types_lock. We don't care if we race with it going
1126 	 * to NULL, but we want to make sure that it's not set to
1127 	 * something other than NULL when we get here, which we can
1128 	 * do safely with only holding the trace_types_lock and not
1129 	 * having to take the max_lock.
1130 	 */
1131 	if (tr->cond_snapshot) {
1132 		ret = -EBUSY;
1133 		goto fail_unlock;
1134 	}
1135 
1136 	arch_spin_lock(&tr->max_lock);
1137 	tr->cond_snapshot = cond_snapshot;
1138 	arch_spin_unlock(&tr->max_lock);
1139 
1140 	mutex_unlock(&trace_types_lock);
1141 
1142 	return ret;
1143 
1144  fail_unlock:
1145 	mutex_unlock(&trace_types_lock);
1146 	kfree(cond_snapshot);
1147 	return ret;
1148 }
1149 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_enable);
1150 
1151 /**
1152  * tracing_snapshot_cond_disable - disable conditional snapshot for an instance
1153  * @tr:		The tracing instance
1154  *
1155  * Check whether the conditional snapshot for the given instance is
1156  * enabled; if so, free the cond_snapshot associated with it,
1157  * otherwise return -EINVAL.
1158  *
1159  * Returns 0 if successful, error otherwise.
1160  */
1161 int tracing_snapshot_cond_disable(struct trace_array *tr)
1162 {
1163 	int ret = 0;
1164 
1165 	arch_spin_lock(&tr->max_lock);
1166 
1167 	if (!tr->cond_snapshot)
1168 		ret = -EINVAL;
1169 	else {
1170 		kfree(tr->cond_snapshot);
1171 		tr->cond_snapshot = NULL;
1172 	}
1173 
1174 	arch_spin_unlock(&tr->max_lock);
1175 
1176 	return ret;
1177 }
1178 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_disable);
1179 #else
1180 void tracing_snapshot(void)
1181 {
1182 	WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
1183 }
1184 EXPORT_SYMBOL_GPL(tracing_snapshot);
1185 void tracing_snapshot_cond(struct trace_array *tr, void *cond_data)
1186 {
1187 	WARN_ONCE(1, "Snapshot feature not enabled, but internal conditional snapshot used");
1188 }
1189 EXPORT_SYMBOL_GPL(tracing_snapshot_cond);
1190 int tracing_alloc_snapshot(void)
1191 {
1192 	WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
1193 	return -ENODEV;
1194 }
1195 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
1196 void tracing_snapshot_alloc(void)
1197 {
1198 	/* Give warning */
1199 	tracing_snapshot();
1200 }
1201 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
1202 void *tracing_cond_snapshot_data(struct trace_array *tr)
1203 {
1204 	return NULL;
1205 }
1206 EXPORT_SYMBOL_GPL(tracing_cond_snapshot_data);
1207 int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, cond_update_fn_t update)
1208 {
1209 	return -ENODEV;
1210 }
1211 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_enable);
1212 int tracing_snapshot_cond_disable(struct trace_array *tr)
1213 {
1214 	return false;
1215 }
1216 EXPORT_SYMBOL_GPL(tracing_snapshot_cond_disable);
1217 #endif /* CONFIG_TRACER_SNAPSHOT */
1218 
1219 void tracer_tracing_off(struct trace_array *tr)
1220 {
1221 	if (tr->trace_buffer.buffer)
1222 		ring_buffer_record_off(tr->trace_buffer.buffer);
1223 	/*
1224 	 * This flag is looked at when buffers haven't been allocated
1225 	 * yet, or by some tracers (like irqsoff), that just want to
1226 	 * know if the ring buffer has been disabled, but it can handle
1227 	 * races of where it gets disabled but we still do a record.
1228 	 * As the check is in the fast path of the tracers, it is more
1229 	 * important to be fast than accurate.
1230 	 */
1231 	tr->buffer_disabled = 1;
1232 	/* Make the flag seen by readers */
1233 	smp_wmb();
1234 }
1235 
1236 /**
1237  * tracing_off - turn off tracing buffers
1238  *
1239  * This function stops the tracing buffers from recording data.
1240  * It does not disable any overhead the tracers themselves may
1241  * be causing. This function simply causes all recording to
1242  * the ring buffers to fail.
1243  */
1244 void tracing_off(void)
1245 {
1246 	tracer_tracing_off(&global_trace);
1247 }
1248 EXPORT_SYMBOL_GPL(tracing_off);
1249 
1250 void disable_trace_on_warning(void)
1251 {
1252 	if (__disable_trace_on_warning)
1253 		tracing_off();
1254 }
1255 
1256 /**
1257  * tracer_tracing_is_on - show real state of ring buffer enabled
1258  * @tr : the trace array to know if ring buffer is enabled
1259  *
1260  * Shows real state of the ring buffer if it is enabled or not.
1261  */
1262 bool tracer_tracing_is_on(struct trace_array *tr)
1263 {
1264 	if (tr->trace_buffer.buffer)
1265 		return ring_buffer_record_is_on(tr->trace_buffer.buffer);
1266 	return !tr->buffer_disabled;
1267 }
1268 
1269 /**
1270  * tracing_is_on - show state of ring buffers enabled
1271  */
1272 int tracing_is_on(void)
1273 {
1274 	return tracer_tracing_is_on(&global_trace);
1275 }
1276 EXPORT_SYMBOL_GPL(tracing_is_on);
1277 
1278 static int __init set_buf_size(char *str)
1279 {
1280 	unsigned long buf_size;
1281 
1282 	if (!str)
1283 		return 0;
1284 	buf_size = memparse(str, &str);
1285 	/* nr_entries can not be zero */
1286 	if (buf_size == 0)
1287 		return 0;
1288 	trace_buf_size = buf_size;
1289 	return 1;
1290 }
1291 __setup("trace_buf_size=", set_buf_size);
1292 
1293 static int __init set_tracing_thresh(char *str)
1294 {
1295 	unsigned long threshold;
1296 	int ret;
1297 
1298 	if (!str)
1299 		return 0;
1300 	ret = kstrtoul(str, 0, &threshold);
1301 	if (ret < 0)
1302 		return 0;
1303 	tracing_thresh = threshold * 1000;
1304 	return 1;
1305 }
1306 __setup("tracing_thresh=", set_tracing_thresh);
1307 
1308 unsigned long nsecs_to_usecs(unsigned long nsecs)
1309 {
1310 	return nsecs / 1000;
1311 }
1312 
1313 /*
1314  * TRACE_FLAGS is defined as a tuple matching bit masks with strings.
1315  * It uses C(a, b) where 'a' is the eval (enum) name and 'b' is the string that
1316  * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list
1317  * of strings in the order that the evals (enum) were defined.
1318  */
1319 #undef C
1320 #define C(a, b) b
1321 
1322 /* These must match the bit postions in trace_iterator_flags */
1323 static const char *trace_options[] = {
1324 	TRACE_FLAGS
1325 	NULL
1326 };
1327 
1328 static struct {
1329 	u64 (*func)(void);
1330 	const char *name;
1331 	int in_ns;		/* is this clock in nanoseconds? */
1332 } trace_clocks[] = {
1333 	{ trace_clock_local,		"local",	1 },
1334 	{ trace_clock_global,		"global",	1 },
1335 	{ trace_clock_counter,		"counter",	0 },
1336 	{ trace_clock_jiffies,		"uptime",	0 },
1337 	{ trace_clock,			"perf",		1 },
1338 	{ ktime_get_mono_fast_ns,	"mono",		1 },
1339 	{ ktime_get_raw_fast_ns,	"mono_raw",	1 },
1340 	{ ktime_get_boot_fast_ns,	"boot",		1 },
1341 	ARCH_TRACE_CLOCKS
1342 };
1343 
1344 bool trace_clock_in_ns(struct trace_array *tr)
1345 {
1346 	if (trace_clocks[tr->clock_id].in_ns)
1347 		return true;
1348 
1349 	return false;
1350 }
1351 
1352 /*
1353  * trace_parser_get_init - gets the buffer for trace parser
1354  */
1355 int trace_parser_get_init(struct trace_parser *parser, int size)
1356 {
1357 	memset(parser, 0, sizeof(*parser));
1358 
1359 	parser->buffer = kmalloc(size, GFP_KERNEL);
1360 	if (!parser->buffer)
1361 		return 1;
1362 
1363 	parser->size = size;
1364 	return 0;
1365 }
1366 
1367 /*
1368  * trace_parser_put - frees the buffer for trace parser
1369  */
1370 void trace_parser_put(struct trace_parser *parser)
1371 {
1372 	kfree(parser->buffer);
1373 	parser->buffer = NULL;
1374 }
1375 
1376 /*
1377  * trace_get_user - reads the user input string separated by  space
1378  * (matched by isspace(ch))
1379  *
1380  * For each string found the 'struct trace_parser' is updated,
1381  * and the function returns.
1382  *
1383  * Returns number of bytes read.
1384  *
1385  * See kernel/trace/trace.h for 'struct trace_parser' details.
1386  */
1387 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
1388 	size_t cnt, loff_t *ppos)
1389 {
1390 	char ch;
1391 	size_t read = 0;
1392 	ssize_t ret;
1393 
1394 	if (!*ppos)
1395 		trace_parser_clear(parser);
1396 
1397 	ret = get_user(ch, ubuf++);
1398 	if (ret)
1399 		goto out;
1400 
1401 	read++;
1402 	cnt--;
1403 
1404 	/*
1405 	 * The parser is not finished with the last write,
1406 	 * continue reading the user input without skipping spaces.
1407 	 */
1408 	if (!parser->cont) {
1409 		/* skip white space */
1410 		while (cnt && isspace(ch)) {
1411 			ret = get_user(ch, ubuf++);
1412 			if (ret)
1413 				goto out;
1414 			read++;
1415 			cnt--;
1416 		}
1417 
1418 		parser->idx = 0;
1419 
1420 		/* only spaces were written */
1421 		if (isspace(ch) || !ch) {
1422 			*ppos += read;
1423 			ret = read;
1424 			goto out;
1425 		}
1426 	}
1427 
1428 	/* read the non-space input */
1429 	while (cnt && !isspace(ch) && ch) {
1430 		if (parser->idx < parser->size - 1)
1431 			parser->buffer[parser->idx++] = ch;
1432 		else {
1433 			ret = -EINVAL;
1434 			goto out;
1435 		}
1436 		ret = get_user(ch, ubuf++);
1437 		if (ret)
1438 			goto out;
1439 		read++;
1440 		cnt--;
1441 	}
1442 
1443 	/* We either got finished input or we have to wait for another call. */
1444 	if (isspace(ch) || !ch) {
1445 		parser->buffer[parser->idx] = 0;
1446 		parser->cont = false;
1447 	} else if (parser->idx < parser->size - 1) {
1448 		parser->cont = true;
1449 		parser->buffer[parser->idx++] = ch;
1450 		/* Make sure the parsed string always terminates with '\0'. */
1451 		parser->buffer[parser->idx] = 0;
1452 	} else {
1453 		ret = -EINVAL;
1454 		goto out;
1455 	}
1456 
1457 	*ppos += read;
1458 	ret = read;
1459 
1460 out:
1461 	return ret;
1462 }
1463 
1464 /* TODO add a seq_buf_to_buffer() */
1465 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
1466 {
1467 	int len;
1468 
1469 	if (trace_seq_used(s) <= s->seq.readpos)
1470 		return -EBUSY;
1471 
1472 	len = trace_seq_used(s) - s->seq.readpos;
1473 	if (cnt > len)
1474 		cnt = len;
1475 	memcpy(buf, s->buffer + s->seq.readpos, cnt);
1476 
1477 	s->seq.readpos += cnt;
1478 	return cnt;
1479 }
1480 
1481 unsigned long __read_mostly	tracing_thresh;
1482 
1483 #ifdef CONFIG_TRACER_MAX_TRACE
1484 /*
1485  * Copy the new maximum trace into the separate maximum-trace
1486  * structure. (this way the maximum trace is permanently saved,
1487  * for later retrieval via /sys/kernel/tracing/tracing_max_latency)
1488  */
1489 static void
1490 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1491 {
1492 	struct trace_buffer *trace_buf = &tr->trace_buffer;
1493 	struct trace_buffer *max_buf = &tr->max_buffer;
1494 	struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
1495 	struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
1496 
1497 	max_buf->cpu = cpu;
1498 	max_buf->time_start = data->preempt_timestamp;
1499 
1500 	max_data->saved_latency = tr->max_latency;
1501 	max_data->critical_start = data->critical_start;
1502 	max_data->critical_end = data->critical_end;
1503 
1504 	strncpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
1505 	max_data->pid = tsk->pid;
1506 	/*
1507 	 * If tsk == current, then use current_uid(), as that does not use
1508 	 * RCU. The irq tracer can be called out of RCU scope.
1509 	 */
1510 	if (tsk == current)
1511 		max_data->uid = current_uid();
1512 	else
1513 		max_data->uid = task_uid(tsk);
1514 
1515 	max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1516 	max_data->policy = tsk->policy;
1517 	max_data->rt_priority = tsk->rt_priority;
1518 
1519 	/* record this tasks comm */
1520 	tracing_record_cmdline(tsk);
1521 }
1522 
1523 /**
1524  * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1525  * @tr: tracer
1526  * @tsk: the task with the latency
1527  * @cpu: The cpu that initiated the trace.
1528  * @cond_data: User data associated with a conditional snapshot
1529  *
1530  * Flip the buffers between the @tr and the max_tr and record information
1531  * about which task was the cause of this latency.
1532  */
1533 void
1534 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu,
1535 	      void *cond_data)
1536 {
1537 	if (tr->stop_count)
1538 		return;
1539 
1540 	WARN_ON_ONCE(!irqs_disabled());
1541 
1542 	if (!tr->allocated_snapshot) {
1543 		/* Only the nop tracer should hit this when disabling */
1544 		WARN_ON_ONCE(tr->current_trace != &nop_trace);
1545 		return;
1546 	}
1547 
1548 	arch_spin_lock(&tr->max_lock);
1549 
1550 	/* Inherit the recordable setting from trace_buffer */
1551 	if (ring_buffer_record_is_set_on(tr->trace_buffer.buffer))
1552 		ring_buffer_record_on(tr->max_buffer.buffer);
1553 	else
1554 		ring_buffer_record_off(tr->max_buffer.buffer);
1555 
1556 #ifdef CONFIG_TRACER_SNAPSHOT
1557 	if (tr->cond_snapshot && !tr->cond_snapshot->update(tr, cond_data))
1558 		goto out_unlock;
1559 #endif
1560 	swap(tr->trace_buffer.buffer, tr->max_buffer.buffer);
1561 
1562 	__update_max_tr(tr, tsk, cpu);
1563 
1564  out_unlock:
1565 	arch_spin_unlock(&tr->max_lock);
1566 }
1567 
1568 /**
1569  * update_max_tr_single - only copy one trace over, and reset the rest
1570  * @tr: tracer
1571  * @tsk: task with the latency
1572  * @cpu: the cpu of the buffer to copy.
1573  *
1574  * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1575  */
1576 void
1577 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1578 {
1579 	int ret;
1580 
1581 	if (tr->stop_count)
1582 		return;
1583 
1584 	WARN_ON_ONCE(!irqs_disabled());
1585 	if (!tr->allocated_snapshot) {
1586 		/* Only the nop tracer should hit this when disabling */
1587 		WARN_ON_ONCE(tr->current_trace != &nop_trace);
1588 		return;
1589 	}
1590 
1591 	arch_spin_lock(&tr->max_lock);
1592 
1593 	ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1594 
1595 	if (ret == -EBUSY) {
1596 		/*
1597 		 * We failed to swap the buffer due to a commit taking
1598 		 * place on this CPU. We fail to record, but we reset
1599 		 * the max trace buffer (no one writes directly to it)
1600 		 * and flag that it failed.
1601 		 */
1602 		trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1603 			"Failed to swap buffers due to commit in progress\n");
1604 	}
1605 
1606 	WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1607 
1608 	__update_max_tr(tr, tsk, cpu);
1609 	arch_spin_unlock(&tr->max_lock);
1610 }
1611 #endif /* CONFIG_TRACER_MAX_TRACE */
1612 
1613 static int wait_on_pipe(struct trace_iterator *iter, int full)
1614 {
1615 	/* Iterators are static, they should be filled or empty */
1616 	if (trace_buffer_iter(iter, iter->cpu_file))
1617 		return 0;
1618 
1619 	return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
1620 				full);
1621 }
1622 
1623 #ifdef CONFIG_FTRACE_STARTUP_TEST
1624 static bool selftests_can_run;
1625 
1626 struct trace_selftests {
1627 	struct list_head		list;
1628 	struct tracer			*type;
1629 };
1630 
1631 static LIST_HEAD(postponed_selftests);
1632 
1633 static int save_selftest(struct tracer *type)
1634 {
1635 	struct trace_selftests *selftest;
1636 
1637 	selftest = kmalloc(sizeof(*selftest), GFP_KERNEL);
1638 	if (!selftest)
1639 		return -ENOMEM;
1640 
1641 	selftest->type = type;
1642 	list_add(&selftest->list, &postponed_selftests);
1643 	return 0;
1644 }
1645 
1646 static int run_tracer_selftest(struct tracer *type)
1647 {
1648 	struct trace_array *tr = &global_trace;
1649 	struct tracer *saved_tracer = tr->current_trace;
1650 	int ret;
1651 
1652 	if (!type->selftest || tracing_selftest_disabled)
1653 		return 0;
1654 
1655 	/*
1656 	 * If a tracer registers early in boot up (before scheduling is
1657 	 * initialized and such), then do not run its selftests yet.
1658 	 * Instead, run it a little later in the boot process.
1659 	 */
1660 	if (!selftests_can_run)
1661 		return save_selftest(type);
1662 
1663 	/*
1664 	 * Run a selftest on this tracer.
1665 	 * Here we reset the trace buffer, and set the current
1666 	 * tracer to be this tracer. The tracer can then run some
1667 	 * internal tracing to verify that everything is in order.
1668 	 * If we fail, we do not register this tracer.
1669 	 */
1670 	tracing_reset_online_cpus(&tr->trace_buffer);
1671 
1672 	tr->current_trace = type;
1673 
1674 #ifdef CONFIG_TRACER_MAX_TRACE
1675 	if (type->use_max_tr) {
1676 		/* If we expanded the buffers, make sure the max is expanded too */
1677 		if (ring_buffer_expanded)
1678 			ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1679 					   RING_BUFFER_ALL_CPUS);
1680 		tr->allocated_snapshot = true;
1681 	}
1682 #endif
1683 
1684 	/* the test is responsible for initializing and enabling */
1685 	pr_info("Testing tracer %s: ", type->name);
1686 	ret = type->selftest(type, tr);
1687 	/* the test is responsible for resetting too */
1688 	tr->current_trace = saved_tracer;
1689 	if (ret) {
1690 		printk(KERN_CONT "FAILED!\n");
1691 		/* Add the warning after printing 'FAILED' */
1692 		WARN_ON(1);
1693 		return -1;
1694 	}
1695 	/* Only reset on passing, to avoid touching corrupted buffers */
1696 	tracing_reset_online_cpus(&tr->trace_buffer);
1697 
1698 #ifdef CONFIG_TRACER_MAX_TRACE
1699 	if (type->use_max_tr) {
1700 		tr->allocated_snapshot = false;
1701 
1702 		/* Shrink the max buffer again */
1703 		if (ring_buffer_expanded)
1704 			ring_buffer_resize(tr->max_buffer.buffer, 1,
1705 					   RING_BUFFER_ALL_CPUS);
1706 	}
1707 #endif
1708 
1709 	printk(KERN_CONT "PASSED\n");
1710 	return 0;
1711 }
1712 
1713 static __init int init_trace_selftests(void)
1714 {
1715 	struct trace_selftests *p, *n;
1716 	struct tracer *t, **last;
1717 	int ret;
1718 
1719 	selftests_can_run = true;
1720 
1721 	mutex_lock(&trace_types_lock);
1722 
1723 	if (list_empty(&postponed_selftests))
1724 		goto out;
1725 
1726 	pr_info("Running postponed tracer tests:\n");
1727 
1728 	list_for_each_entry_safe(p, n, &postponed_selftests, list) {
1729 		/* This loop can take minutes when sanitizers are enabled, so
1730 		 * lets make sure we allow RCU processing.
1731 		 */
1732 		cond_resched();
1733 		ret = run_tracer_selftest(p->type);
1734 		/* If the test fails, then warn and remove from available_tracers */
1735 		if (ret < 0) {
1736 			WARN(1, "tracer: %s failed selftest, disabling\n",
1737 			     p->type->name);
1738 			last = &trace_types;
1739 			for (t = trace_types; t; t = t->next) {
1740 				if (t == p->type) {
1741 					*last = t->next;
1742 					break;
1743 				}
1744 				last = &t->next;
1745 			}
1746 		}
1747 		list_del(&p->list);
1748 		kfree(p);
1749 	}
1750 
1751  out:
1752 	mutex_unlock(&trace_types_lock);
1753 
1754 	return 0;
1755 }
1756 core_initcall(init_trace_selftests);
1757 #else
1758 static inline int run_tracer_selftest(struct tracer *type)
1759 {
1760 	return 0;
1761 }
1762 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1763 
1764 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
1765 
1766 static void __init apply_trace_boot_options(void);
1767 
1768 /**
1769  * register_tracer - register a tracer with the ftrace system.
1770  * @type: the plugin for the tracer
1771  *
1772  * Register a new plugin tracer.
1773  */
1774 int __init register_tracer(struct tracer *type)
1775 {
1776 	struct tracer *t;
1777 	int ret = 0;
1778 
1779 	if (!type->name) {
1780 		pr_info("Tracer must have a name\n");
1781 		return -1;
1782 	}
1783 
1784 	if (strlen(type->name) >= MAX_TRACER_SIZE) {
1785 		pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1786 		return -1;
1787 	}
1788 
1789 	mutex_lock(&trace_types_lock);
1790 
1791 	tracing_selftest_running = true;
1792 
1793 	for (t = trace_types; t; t = t->next) {
1794 		if (strcmp(type->name, t->name) == 0) {
1795 			/* already found */
1796 			pr_info("Tracer %s already registered\n",
1797 				type->name);
1798 			ret = -1;
1799 			goto out;
1800 		}
1801 	}
1802 
1803 	if (!type->set_flag)
1804 		type->set_flag = &dummy_set_flag;
1805 	if (!type->flags) {
1806 		/*allocate a dummy tracer_flags*/
1807 		type->flags = kmalloc(sizeof(*type->flags), GFP_KERNEL);
1808 		if (!type->flags) {
1809 			ret = -ENOMEM;
1810 			goto out;
1811 		}
1812 		type->flags->val = 0;
1813 		type->flags->opts = dummy_tracer_opt;
1814 	} else
1815 		if (!type->flags->opts)
1816 			type->flags->opts = dummy_tracer_opt;
1817 
1818 	/* store the tracer for __set_tracer_option */
1819 	type->flags->trace = type;
1820 
1821 	ret = run_tracer_selftest(type);
1822 	if (ret < 0)
1823 		goto out;
1824 
1825 	type->next = trace_types;
1826 	trace_types = type;
1827 	add_tracer_options(&global_trace, type);
1828 
1829  out:
1830 	tracing_selftest_running = false;
1831 	mutex_unlock(&trace_types_lock);
1832 
1833 	if (ret || !default_bootup_tracer)
1834 		goto out_unlock;
1835 
1836 	if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1837 		goto out_unlock;
1838 
1839 	printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1840 	/* Do we want this tracer to start on bootup? */
1841 	tracing_set_tracer(&global_trace, type->name);
1842 	default_bootup_tracer = NULL;
1843 
1844 	apply_trace_boot_options();
1845 
1846 	/* disable other selftests, since this will break it. */
1847 	tracing_selftest_disabled = true;
1848 #ifdef CONFIG_FTRACE_STARTUP_TEST
1849 	printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1850 	       type->name);
1851 #endif
1852 
1853  out_unlock:
1854 	return ret;
1855 }
1856 
1857 static void tracing_reset_cpu(struct trace_buffer *buf, int cpu)
1858 {
1859 	struct ring_buffer *buffer = buf->buffer;
1860 
1861 	if (!buffer)
1862 		return;
1863 
1864 	ring_buffer_record_disable(buffer);
1865 
1866 	/* Make sure all commits have finished */
1867 	synchronize_rcu();
1868 	ring_buffer_reset_cpu(buffer, cpu);
1869 
1870 	ring_buffer_record_enable(buffer);
1871 }
1872 
1873 void tracing_reset_online_cpus(struct trace_buffer *buf)
1874 {
1875 	struct ring_buffer *buffer = buf->buffer;
1876 	int cpu;
1877 
1878 	if (!buffer)
1879 		return;
1880 
1881 	ring_buffer_record_disable(buffer);
1882 
1883 	/* Make sure all commits have finished */
1884 	synchronize_rcu();
1885 
1886 	buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1887 
1888 	for_each_online_cpu(cpu)
1889 		ring_buffer_reset_cpu(buffer, cpu);
1890 
1891 	ring_buffer_record_enable(buffer);
1892 }
1893 
1894 /* Must have trace_types_lock held */
1895 void tracing_reset_all_online_cpus(void)
1896 {
1897 	struct trace_array *tr;
1898 
1899 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1900 		if (!tr->clear_trace)
1901 			continue;
1902 		tr->clear_trace = false;
1903 		tracing_reset_online_cpus(&tr->trace_buffer);
1904 #ifdef CONFIG_TRACER_MAX_TRACE
1905 		tracing_reset_online_cpus(&tr->max_buffer);
1906 #endif
1907 	}
1908 }
1909 
1910 static int *tgid_map;
1911 
1912 #define SAVED_CMDLINES_DEFAULT 128
1913 #define NO_CMDLINE_MAP UINT_MAX
1914 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1915 struct saved_cmdlines_buffer {
1916 	unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1917 	unsigned *map_cmdline_to_pid;
1918 	unsigned cmdline_num;
1919 	int cmdline_idx;
1920 	char *saved_cmdlines;
1921 };
1922 static struct saved_cmdlines_buffer *savedcmd;
1923 
1924 /* temporary disable recording */
1925 static atomic_t trace_record_taskinfo_disabled __read_mostly;
1926 
1927 static inline char *get_saved_cmdlines(int idx)
1928 {
1929 	return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1930 }
1931 
1932 static inline void set_cmdline(int idx, const char *cmdline)
1933 {
1934 	strncpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1935 }
1936 
1937 static int allocate_cmdlines_buffer(unsigned int val,
1938 				    struct saved_cmdlines_buffer *s)
1939 {
1940 	s->map_cmdline_to_pid = kmalloc_array(val,
1941 					      sizeof(*s->map_cmdline_to_pid),
1942 					      GFP_KERNEL);
1943 	if (!s->map_cmdline_to_pid)
1944 		return -ENOMEM;
1945 
1946 	s->saved_cmdlines = kmalloc_array(TASK_COMM_LEN, val, GFP_KERNEL);
1947 	if (!s->saved_cmdlines) {
1948 		kfree(s->map_cmdline_to_pid);
1949 		return -ENOMEM;
1950 	}
1951 
1952 	s->cmdline_idx = 0;
1953 	s->cmdline_num = val;
1954 	memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1955 	       sizeof(s->map_pid_to_cmdline));
1956 	memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1957 	       val * sizeof(*s->map_cmdline_to_pid));
1958 
1959 	return 0;
1960 }
1961 
1962 static int trace_create_savedcmd(void)
1963 {
1964 	int ret;
1965 
1966 	savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1967 	if (!savedcmd)
1968 		return -ENOMEM;
1969 
1970 	ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1971 	if (ret < 0) {
1972 		kfree(savedcmd);
1973 		savedcmd = NULL;
1974 		return -ENOMEM;
1975 	}
1976 
1977 	return 0;
1978 }
1979 
1980 int is_tracing_stopped(void)
1981 {
1982 	return global_trace.stop_count;
1983 }
1984 
1985 /**
1986  * tracing_start - quick start of the tracer
1987  *
1988  * If tracing is enabled but was stopped by tracing_stop,
1989  * this will start the tracer back up.
1990  */
1991 void tracing_start(void)
1992 {
1993 	struct ring_buffer *buffer;
1994 	unsigned long flags;
1995 
1996 	if (tracing_disabled)
1997 		return;
1998 
1999 	raw_spin_lock_irqsave(&global_trace.start_lock, flags);
2000 	if (--global_trace.stop_count) {
2001 		if (global_trace.stop_count < 0) {
2002 			/* Someone screwed up their debugging */
2003 			WARN_ON_ONCE(1);
2004 			global_trace.stop_count = 0;
2005 		}
2006 		goto out;
2007 	}
2008 
2009 	/* Prevent the buffers from switching */
2010 	arch_spin_lock(&global_trace.max_lock);
2011 
2012 	buffer = global_trace.trace_buffer.buffer;
2013 	if (buffer)
2014 		ring_buffer_record_enable(buffer);
2015 
2016 #ifdef CONFIG_TRACER_MAX_TRACE
2017 	buffer = global_trace.max_buffer.buffer;
2018 	if (buffer)
2019 		ring_buffer_record_enable(buffer);
2020 #endif
2021 
2022 	arch_spin_unlock(&global_trace.max_lock);
2023 
2024  out:
2025 	raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
2026 }
2027 
2028 static void tracing_start_tr(struct trace_array *tr)
2029 {
2030 	struct ring_buffer *buffer;
2031 	unsigned long flags;
2032 
2033 	if (tracing_disabled)
2034 		return;
2035 
2036 	/* If global, we need to also start the max tracer */
2037 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
2038 		return tracing_start();
2039 
2040 	raw_spin_lock_irqsave(&tr->start_lock, flags);
2041 
2042 	if (--tr->stop_count) {
2043 		if (tr->stop_count < 0) {
2044 			/* Someone screwed up their debugging */
2045 			WARN_ON_ONCE(1);
2046 			tr->stop_count = 0;
2047 		}
2048 		goto out;
2049 	}
2050 
2051 	buffer = tr->trace_buffer.buffer;
2052 	if (buffer)
2053 		ring_buffer_record_enable(buffer);
2054 
2055  out:
2056 	raw_spin_unlock_irqrestore(&tr->start_lock, flags);
2057 }
2058 
2059 /**
2060  * tracing_stop - quick stop of the tracer
2061  *
2062  * Light weight way to stop tracing. Use in conjunction with
2063  * tracing_start.
2064  */
2065 void tracing_stop(void)
2066 {
2067 	struct ring_buffer *buffer;
2068 	unsigned long flags;
2069 
2070 	raw_spin_lock_irqsave(&global_trace.start_lock, flags);
2071 	if (global_trace.stop_count++)
2072 		goto out;
2073 
2074 	/* Prevent the buffers from switching */
2075 	arch_spin_lock(&global_trace.max_lock);
2076 
2077 	buffer = global_trace.trace_buffer.buffer;
2078 	if (buffer)
2079 		ring_buffer_record_disable(buffer);
2080 
2081 #ifdef CONFIG_TRACER_MAX_TRACE
2082 	buffer = global_trace.max_buffer.buffer;
2083 	if (buffer)
2084 		ring_buffer_record_disable(buffer);
2085 #endif
2086 
2087 	arch_spin_unlock(&global_trace.max_lock);
2088 
2089  out:
2090 	raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
2091 }
2092 
2093 static void tracing_stop_tr(struct trace_array *tr)
2094 {
2095 	struct ring_buffer *buffer;
2096 	unsigned long flags;
2097 
2098 	/* If global, we need to also stop the max tracer */
2099 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
2100 		return tracing_stop();
2101 
2102 	raw_spin_lock_irqsave(&tr->start_lock, flags);
2103 	if (tr->stop_count++)
2104 		goto out;
2105 
2106 	buffer = tr->trace_buffer.buffer;
2107 	if (buffer)
2108 		ring_buffer_record_disable(buffer);
2109 
2110  out:
2111 	raw_spin_unlock_irqrestore(&tr->start_lock, flags);
2112 }
2113 
2114 static int trace_save_cmdline(struct task_struct *tsk)
2115 {
2116 	unsigned pid, idx;
2117 
2118 	/* treat recording of idle task as a success */
2119 	if (!tsk->pid)
2120 		return 1;
2121 
2122 	if (unlikely(tsk->pid > PID_MAX_DEFAULT))
2123 		return 0;
2124 
2125 	/*
2126 	 * It's not the end of the world if we don't get
2127 	 * the lock, but we also don't want to spin
2128 	 * nor do we want to disable interrupts,
2129 	 * so if we miss here, then better luck next time.
2130 	 */
2131 	if (!arch_spin_trylock(&trace_cmdline_lock))
2132 		return 0;
2133 
2134 	idx = savedcmd->map_pid_to_cmdline[tsk->pid];
2135 	if (idx == NO_CMDLINE_MAP) {
2136 		idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
2137 
2138 		/*
2139 		 * Check whether the cmdline buffer at idx has a pid
2140 		 * mapped. We are going to overwrite that entry so we
2141 		 * need to clear the map_pid_to_cmdline. Otherwise we
2142 		 * would read the new comm for the old pid.
2143 		 */
2144 		pid = savedcmd->map_cmdline_to_pid[idx];
2145 		if (pid != NO_CMDLINE_MAP)
2146 			savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
2147 
2148 		savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
2149 		savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
2150 
2151 		savedcmd->cmdline_idx = idx;
2152 	}
2153 
2154 	set_cmdline(idx, tsk->comm);
2155 
2156 	arch_spin_unlock(&trace_cmdline_lock);
2157 
2158 	return 1;
2159 }
2160 
2161 static void __trace_find_cmdline(int pid, char comm[])
2162 {
2163 	unsigned map;
2164 
2165 	if (!pid) {
2166 		strcpy(comm, "<idle>");
2167 		return;
2168 	}
2169 
2170 	if (WARN_ON_ONCE(pid < 0)) {
2171 		strcpy(comm, "<XXX>");
2172 		return;
2173 	}
2174 
2175 	if (pid > PID_MAX_DEFAULT) {
2176 		strcpy(comm, "<...>");
2177 		return;
2178 	}
2179 
2180 	map = savedcmd->map_pid_to_cmdline[pid];
2181 	if (map != NO_CMDLINE_MAP)
2182 		strlcpy(comm, get_saved_cmdlines(map), TASK_COMM_LEN);
2183 	else
2184 		strcpy(comm, "<...>");
2185 }
2186 
2187 void trace_find_cmdline(int pid, char comm[])
2188 {
2189 	preempt_disable();
2190 	arch_spin_lock(&trace_cmdline_lock);
2191 
2192 	__trace_find_cmdline(pid, comm);
2193 
2194 	arch_spin_unlock(&trace_cmdline_lock);
2195 	preempt_enable();
2196 }
2197 
2198 int trace_find_tgid(int pid)
2199 {
2200 	if (unlikely(!tgid_map || !pid || pid > PID_MAX_DEFAULT))
2201 		return 0;
2202 
2203 	return tgid_map[pid];
2204 }
2205 
2206 static int trace_save_tgid(struct task_struct *tsk)
2207 {
2208 	/* treat recording of idle task as a success */
2209 	if (!tsk->pid)
2210 		return 1;
2211 
2212 	if (unlikely(!tgid_map || tsk->pid > PID_MAX_DEFAULT))
2213 		return 0;
2214 
2215 	tgid_map[tsk->pid] = tsk->tgid;
2216 	return 1;
2217 }
2218 
2219 static bool tracing_record_taskinfo_skip(int flags)
2220 {
2221 	if (unlikely(!(flags & (TRACE_RECORD_CMDLINE | TRACE_RECORD_TGID))))
2222 		return true;
2223 	if (atomic_read(&trace_record_taskinfo_disabled) || !tracing_is_on())
2224 		return true;
2225 	if (!__this_cpu_read(trace_taskinfo_save))
2226 		return true;
2227 	return false;
2228 }
2229 
2230 /**
2231  * tracing_record_taskinfo - record the task info of a task
2232  *
2233  * @task:  task to record
2234  * @flags: TRACE_RECORD_CMDLINE for recording comm
2235  *         TRACE_RECORD_TGID for recording tgid
2236  */
2237 void tracing_record_taskinfo(struct task_struct *task, int flags)
2238 {
2239 	bool done;
2240 
2241 	if (tracing_record_taskinfo_skip(flags))
2242 		return;
2243 
2244 	/*
2245 	 * Record as much task information as possible. If some fail, continue
2246 	 * to try to record the others.
2247 	 */
2248 	done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(task);
2249 	done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(task);
2250 
2251 	/* If recording any information failed, retry again soon. */
2252 	if (!done)
2253 		return;
2254 
2255 	__this_cpu_write(trace_taskinfo_save, false);
2256 }
2257 
2258 /**
2259  * tracing_record_taskinfo_sched_switch - record task info for sched_switch
2260  *
2261  * @prev: previous task during sched_switch
2262  * @next: next task during sched_switch
2263  * @flags: TRACE_RECORD_CMDLINE for recording comm
2264  *         TRACE_RECORD_TGID for recording tgid
2265  */
2266 void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
2267 					  struct task_struct *next, int flags)
2268 {
2269 	bool done;
2270 
2271 	if (tracing_record_taskinfo_skip(flags))
2272 		return;
2273 
2274 	/*
2275 	 * Record as much task information as possible. If some fail, continue
2276 	 * to try to record the others.
2277 	 */
2278 	done  = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(prev);
2279 	done &= !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(next);
2280 	done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(prev);
2281 	done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(next);
2282 
2283 	/* If recording any information failed, retry again soon. */
2284 	if (!done)
2285 		return;
2286 
2287 	__this_cpu_write(trace_taskinfo_save, false);
2288 }
2289 
2290 /* Helpers to record a specific task information */
2291 void tracing_record_cmdline(struct task_struct *task)
2292 {
2293 	tracing_record_taskinfo(task, TRACE_RECORD_CMDLINE);
2294 }
2295 
2296 void tracing_record_tgid(struct task_struct *task)
2297 {
2298 	tracing_record_taskinfo(task, TRACE_RECORD_TGID);
2299 }
2300 
2301 /*
2302  * Several functions return TRACE_TYPE_PARTIAL_LINE if the trace_seq
2303  * overflowed, and TRACE_TYPE_HANDLED otherwise. This helper function
2304  * simplifies those functions and keeps them in sync.
2305  */
2306 enum print_line_t trace_handle_return(struct trace_seq *s)
2307 {
2308 	return trace_seq_has_overflowed(s) ?
2309 		TRACE_TYPE_PARTIAL_LINE : TRACE_TYPE_HANDLED;
2310 }
2311 EXPORT_SYMBOL_GPL(trace_handle_return);
2312 
2313 void
2314 tracing_generic_entry_update(struct trace_entry *entry, unsigned short type,
2315 			     unsigned long flags, int pc)
2316 {
2317 	struct task_struct *tsk = current;
2318 
2319 	entry->preempt_count		= pc & 0xff;
2320 	entry->pid			= (tsk) ? tsk->pid : 0;
2321 	entry->type			= type;
2322 	entry->flags =
2323 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
2324 		(irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
2325 #else
2326 		TRACE_FLAG_IRQS_NOSUPPORT |
2327 #endif
2328 		((pc & NMI_MASK    ) ? TRACE_FLAG_NMI     : 0) |
2329 		((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
2330 		((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) |
2331 		(tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
2332 		(test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
2333 }
2334 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
2335 
2336 struct ring_buffer_event *
2337 trace_buffer_lock_reserve(struct ring_buffer *buffer,
2338 			  int type,
2339 			  unsigned long len,
2340 			  unsigned long flags, int pc)
2341 {
2342 	return __trace_buffer_lock_reserve(buffer, type, len, flags, pc);
2343 }
2344 
2345 DEFINE_PER_CPU(struct ring_buffer_event *, trace_buffered_event);
2346 DEFINE_PER_CPU(int, trace_buffered_event_cnt);
2347 static int trace_buffered_event_ref;
2348 
2349 /**
2350  * trace_buffered_event_enable - enable buffering events
2351  *
2352  * When events are being filtered, it is quicker to use a temporary
2353  * buffer to write the event data into if there's a likely chance
2354  * that it will not be committed. The discard of the ring buffer
2355  * is not as fast as committing, and is much slower than copying
2356  * a commit.
2357  *
2358  * When an event is to be filtered, allocate per cpu buffers to
2359  * write the event data into, and if the event is filtered and discarded
2360  * it is simply dropped, otherwise, the entire data is to be committed
2361  * in one shot.
2362  */
2363 void trace_buffered_event_enable(void)
2364 {
2365 	struct ring_buffer_event *event;
2366 	struct page *page;
2367 	int cpu;
2368 
2369 	WARN_ON_ONCE(!mutex_is_locked(&event_mutex));
2370 
2371 	if (trace_buffered_event_ref++)
2372 		return;
2373 
2374 	for_each_tracing_cpu(cpu) {
2375 		page = alloc_pages_node(cpu_to_node(cpu),
2376 					GFP_KERNEL | __GFP_NORETRY, 0);
2377 		if (!page)
2378 			goto failed;
2379 
2380 		event = page_address(page);
2381 		memset(event, 0, sizeof(*event));
2382 
2383 		per_cpu(trace_buffered_event, cpu) = event;
2384 
2385 		preempt_disable();
2386 		if (cpu == smp_processor_id() &&
2387 		    this_cpu_read(trace_buffered_event) !=
2388 		    per_cpu(trace_buffered_event, cpu))
2389 			WARN_ON_ONCE(1);
2390 		preempt_enable();
2391 	}
2392 
2393 	return;
2394  failed:
2395 	trace_buffered_event_disable();
2396 }
2397 
2398 static void enable_trace_buffered_event(void *data)
2399 {
2400 	/* Probably not needed, but do it anyway */
2401 	smp_rmb();
2402 	this_cpu_dec(trace_buffered_event_cnt);
2403 }
2404 
2405 static void disable_trace_buffered_event(void *data)
2406 {
2407 	this_cpu_inc(trace_buffered_event_cnt);
2408 }
2409 
2410 /**
2411  * trace_buffered_event_disable - disable buffering events
2412  *
2413  * When a filter is removed, it is faster to not use the buffered
2414  * events, and to commit directly into the ring buffer. Free up
2415  * the temp buffers when there are no more users. This requires
2416  * special synchronization with current events.
2417  */
2418 void trace_buffered_event_disable(void)
2419 {
2420 	int cpu;
2421 
2422 	WARN_ON_ONCE(!mutex_is_locked(&event_mutex));
2423 
2424 	if (WARN_ON_ONCE(!trace_buffered_event_ref))
2425 		return;
2426 
2427 	if (--trace_buffered_event_ref)
2428 		return;
2429 
2430 	preempt_disable();
2431 	/* For each CPU, set the buffer as used. */
2432 	smp_call_function_many(tracing_buffer_mask,
2433 			       disable_trace_buffered_event, NULL, 1);
2434 	preempt_enable();
2435 
2436 	/* Wait for all current users to finish */
2437 	synchronize_rcu();
2438 
2439 	for_each_tracing_cpu(cpu) {
2440 		free_page((unsigned long)per_cpu(trace_buffered_event, cpu));
2441 		per_cpu(trace_buffered_event, cpu) = NULL;
2442 	}
2443 	/*
2444 	 * Make sure trace_buffered_event is NULL before clearing
2445 	 * trace_buffered_event_cnt.
2446 	 */
2447 	smp_wmb();
2448 
2449 	preempt_disable();
2450 	/* Do the work on each cpu */
2451 	smp_call_function_many(tracing_buffer_mask,
2452 			       enable_trace_buffered_event, NULL, 1);
2453 	preempt_enable();
2454 }
2455 
2456 static struct ring_buffer *temp_buffer;
2457 
2458 struct ring_buffer_event *
2459 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
2460 			  struct trace_event_file *trace_file,
2461 			  int type, unsigned long len,
2462 			  unsigned long flags, int pc)
2463 {
2464 	struct ring_buffer_event *entry;
2465 	int val;
2466 
2467 	*current_rb = trace_file->tr->trace_buffer.buffer;
2468 
2469 	if (!ring_buffer_time_stamp_abs(*current_rb) && (trace_file->flags &
2470 	     (EVENT_FILE_FL_SOFT_DISABLED | EVENT_FILE_FL_FILTERED)) &&
2471 	    (entry = this_cpu_read(trace_buffered_event))) {
2472 		/* Try to use the per cpu buffer first */
2473 		val = this_cpu_inc_return(trace_buffered_event_cnt);
2474 		if (val == 1) {
2475 			trace_event_setup(entry, type, flags, pc);
2476 			entry->array[0] = len;
2477 			return entry;
2478 		}
2479 		this_cpu_dec(trace_buffered_event_cnt);
2480 	}
2481 
2482 	entry = __trace_buffer_lock_reserve(*current_rb,
2483 					    type, len, flags, pc);
2484 	/*
2485 	 * If tracing is off, but we have triggers enabled
2486 	 * we still need to look at the event data. Use the temp_buffer
2487 	 * to store the trace event for the tigger to use. It's recusive
2488 	 * safe and will not be recorded anywhere.
2489 	 */
2490 	if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) {
2491 		*current_rb = temp_buffer;
2492 		entry = __trace_buffer_lock_reserve(*current_rb,
2493 						    type, len, flags, pc);
2494 	}
2495 	return entry;
2496 }
2497 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
2498 
2499 static DEFINE_SPINLOCK(tracepoint_iter_lock);
2500 static DEFINE_MUTEX(tracepoint_printk_mutex);
2501 
2502 static void output_printk(struct trace_event_buffer *fbuffer)
2503 {
2504 	struct trace_event_call *event_call;
2505 	struct trace_event *event;
2506 	unsigned long flags;
2507 	struct trace_iterator *iter = tracepoint_print_iter;
2508 
2509 	/* We should never get here if iter is NULL */
2510 	if (WARN_ON_ONCE(!iter))
2511 		return;
2512 
2513 	event_call = fbuffer->trace_file->event_call;
2514 	if (!event_call || !event_call->event.funcs ||
2515 	    !event_call->event.funcs->trace)
2516 		return;
2517 
2518 	event = &fbuffer->trace_file->event_call->event;
2519 
2520 	spin_lock_irqsave(&tracepoint_iter_lock, flags);
2521 	trace_seq_init(&iter->seq);
2522 	iter->ent = fbuffer->entry;
2523 	event_call->event.funcs->trace(iter, 0, event);
2524 	trace_seq_putc(&iter->seq, 0);
2525 	printk("%s", iter->seq.buffer);
2526 
2527 	spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
2528 }
2529 
2530 int tracepoint_printk_sysctl(struct ctl_table *table, int write,
2531 			     void __user *buffer, size_t *lenp,
2532 			     loff_t *ppos)
2533 {
2534 	int save_tracepoint_printk;
2535 	int ret;
2536 
2537 	mutex_lock(&tracepoint_printk_mutex);
2538 	save_tracepoint_printk = tracepoint_printk;
2539 
2540 	ret = proc_dointvec(table, write, buffer, lenp, ppos);
2541 
2542 	/*
2543 	 * This will force exiting early, as tracepoint_printk
2544 	 * is always zero when tracepoint_printk_iter is not allocated
2545 	 */
2546 	if (!tracepoint_print_iter)
2547 		tracepoint_printk = 0;
2548 
2549 	if (save_tracepoint_printk == tracepoint_printk)
2550 		goto out;
2551 
2552 	if (tracepoint_printk)
2553 		static_key_enable(&tracepoint_printk_key.key);
2554 	else
2555 		static_key_disable(&tracepoint_printk_key.key);
2556 
2557  out:
2558 	mutex_unlock(&tracepoint_printk_mutex);
2559 
2560 	return ret;
2561 }
2562 
2563 void trace_event_buffer_commit(struct trace_event_buffer *fbuffer)
2564 {
2565 	if (static_key_false(&tracepoint_printk_key.key))
2566 		output_printk(fbuffer);
2567 
2568 	event_trigger_unlock_commit(fbuffer->trace_file, fbuffer->buffer,
2569 				    fbuffer->event, fbuffer->entry,
2570 				    fbuffer->flags, fbuffer->pc);
2571 }
2572 EXPORT_SYMBOL_GPL(trace_event_buffer_commit);
2573 
2574 /*
2575  * Skip 3:
2576  *
2577  *   trace_buffer_unlock_commit_regs()
2578  *   trace_event_buffer_commit()
2579  *   trace_event_raw_event_xxx()
2580  */
2581 # define STACK_SKIP 3
2582 
2583 void trace_buffer_unlock_commit_regs(struct trace_array *tr,
2584 				     struct ring_buffer *buffer,
2585 				     struct ring_buffer_event *event,
2586 				     unsigned long flags, int pc,
2587 				     struct pt_regs *regs)
2588 {
2589 	__buffer_unlock_commit(buffer, event);
2590 
2591 	/*
2592 	 * If regs is not set, then skip the necessary functions.
2593 	 * Note, we can still get here via blktrace, wakeup tracer
2594 	 * and mmiotrace, but that's ok if they lose a function or
2595 	 * two. They are not that meaningful.
2596 	 */
2597 	ftrace_trace_stack(tr, buffer, flags, regs ? 0 : STACK_SKIP, pc, regs);
2598 	ftrace_trace_userstack(buffer, flags, pc);
2599 }
2600 
2601 /*
2602  * Similar to trace_buffer_unlock_commit_regs() but do not dump stack.
2603  */
2604 void
2605 trace_buffer_unlock_commit_nostack(struct ring_buffer *buffer,
2606 				   struct ring_buffer_event *event)
2607 {
2608 	__buffer_unlock_commit(buffer, event);
2609 }
2610 
2611 static void
2612 trace_process_export(struct trace_export *export,
2613 	       struct ring_buffer_event *event)
2614 {
2615 	struct trace_entry *entry;
2616 	unsigned int size = 0;
2617 
2618 	entry = ring_buffer_event_data(event);
2619 	size = ring_buffer_event_length(event);
2620 	export->write(export, entry, size);
2621 }
2622 
2623 static DEFINE_MUTEX(ftrace_export_lock);
2624 
2625 static struct trace_export __rcu *ftrace_exports_list __read_mostly;
2626 
2627 static DEFINE_STATIC_KEY_FALSE(ftrace_exports_enabled);
2628 
2629 static inline void ftrace_exports_enable(void)
2630 {
2631 	static_branch_enable(&ftrace_exports_enabled);
2632 }
2633 
2634 static inline void ftrace_exports_disable(void)
2635 {
2636 	static_branch_disable(&ftrace_exports_enabled);
2637 }
2638 
2639 static void ftrace_exports(struct ring_buffer_event *event)
2640 {
2641 	struct trace_export *export;
2642 
2643 	preempt_disable_notrace();
2644 
2645 	export = rcu_dereference_raw_check(ftrace_exports_list);
2646 	while (export) {
2647 		trace_process_export(export, event);
2648 		export = rcu_dereference_raw_check(export->next);
2649 	}
2650 
2651 	preempt_enable_notrace();
2652 }
2653 
2654 static inline void
2655 add_trace_export(struct trace_export **list, struct trace_export *export)
2656 {
2657 	rcu_assign_pointer(export->next, *list);
2658 	/*
2659 	 * We are entering export into the list but another
2660 	 * CPU might be walking that list. We need to make sure
2661 	 * the export->next pointer is valid before another CPU sees
2662 	 * the export pointer included into the list.
2663 	 */
2664 	rcu_assign_pointer(*list, export);
2665 }
2666 
2667 static inline int
2668 rm_trace_export(struct trace_export **list, struct trace_export *export)
2669 {
2670 	struct trace_export **p;
2671 
2672 	for (p = list; *p != NULL; p = &(*p)->next)
2673 		if (*p == export)
2674 			break;
2675 
2676 	if (*p != export)
2677 		return -1;
2678 
2679 	rcu_assign_pointer(*p, (*p)->next);
2680 
2681 	return 0;
2682 }
2683 
2684 static inline void
2685 add_ftrace_export(struct trace_export **list, struct trace_export *export)
2686 {
2687 	if (*list == NULL)
2688 		ftrace_exports_enable();
2689 
2690 	add_trace_export(list, export);
2691 }
2692 
2693 static inline int
2694 rm_ftrace_export(struct trace_export **list, struct trace_export *export)
2695 {
2696 	int ret;
2697 
2698 	ret = rm_trace_export(list, export);
2699 	if (*list == NULL)
2700 		ftrace_exports_disable();
2701 
2702 	return ret;
2703 }
2704 
2705 int register_ftrace_export(struct trace_export *export)
2706 {
2707 	if (WARN_ON_ONCE(!export->write))
2708 		return -1;
2709 
2710 	mutex_lock(&ftrace_export_lock);
2711 
2712 	add_ftrace_export(&ftrace_exports_list, export);
2713 
2714 	mutex_unlock(&ftrace_export_lock);
2715 
2716 	return 0;
2717 }
2718 EXPORT_SYMBOL_GPL(register_ftrace_export);
2719 
2720 int unregister_ftrace_export(struct trace_export *export)
2721 {
2722 	int ret;
2723 
2724 	mutex_lock(&ftrace_export_lock);
2725 
2726 	ret = rm_ftrace_export(&ftrace_exports_list, export);
2727 
2728 	mutex_unlock(&ftrace_export_lock);
2729 
2730 	return ret;
2731 }
2732 EXPORT_SYMBOL_GPL(unregister_ftrace_export);
2733 
2734 void
2735 trace_function(struct trace_array *tr,
2736 	       unsigned long ip, unsigned long parent_ip, unsigned long flags,
2737 	       int pc)
2738 {
2739 	struct trace_event_call *call = &event_function;
2740 	struct ring_buffer *buffer = tr->trace_buffer.buffer;
2741 	struct ring_buffer_event *event;
2742 	struct ftrace_entry *entry;
2743 
2744 	event = __trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
2745 					    flags, pc);
2746 	if (!event)
2747 		return;
2748 	entry	= ring_buffer_event_data(event);
2749 	entry->ip			= ip;
2750 	entry->parent_ip		= parent_ip;
2751 
2752 	if (!call_filter_check_discard(call, entry, buffer, event)) {
2753 		if (static_branch_unlikely(&ftrace_exports_enabled))
2754 			ftrace_exports(event);
2755 		__buffer_unlock_commit(buffer, event);
2756 	}
2757 }
2758 
2759 #ifdef CONFIG_STACKTRACE
2760 
2761 /* Allow 4 levels of nesting: normal, softirq, irq, NMI */
2762 #define FTRACE_KSTACK_NESTING	4
2763 
2764 #define FTRACE_KSTACK_ENTRIES	(PAGE_SIZE / FTRACE_KSTACK_NESTING)
2765 
2766 struct ftrace_stack {
2767 	unsigned long		calls[FTRACE_KSTACK_ENTRIES];
2768 };
2769 
2770 
2771 struct ftrace_stacks {
2772 	struct ftrace_stack	stacks[FTRACE_KSTACK_NESTING];
2773 };
2774 
2775 static DEFINE_PER_CPU(struct ftrace_stacks, ftrace_stacks);
2776 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
2777 
2778 static void __ftrace_trace_stack(struct ring_buffer *buffer,
2779 				 unsigned long flags,
2780 				 int skip, int pc, struct pt_regs *regs)
2781 {
2782 	struct trace_event_call *call = &event_kernel_stack;
2783 	struct ring_buffer_event *event;
2784 	unsigned int size, nr_entries;
2785 	struct ftrace_stack *fstack;
2786 	struct stack_entry *entry;
2787 	int stackidx;
2788 
2789 	/*
2790 	 * Add one, for this function and the call to save_stack_trace()
2791 	 * If regs is set, then these functions will not be in the way.
2792 	 */
2793 #ifndef CONFIG_UNWINDER_ORC
2794 	if (!regs)
2795 		skip++;
2796 #endif
2797 
2798 	/*
2799 	 * Since events can happen in NMIs there's no safe way to
2800 	 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
2801 	 * or NMI comes in, it will just have to use the default
2802 	 * FTRACE_STACK_SIZE.
2803 	 */
2804 	preempt_disable_notrace();
2805 
2806 	stackidx = __this_cpu_inc_return(ftrace_stack_reserve) - 1;
2807 
2808 	/* This should never happen. If it does, yell once and skip */
2809 	if (WARN_ON_ONCE(stackidx > FTRACE_KSTACK_NESTING))
2810 		goto out;
2811 
2812 	/*
2813 	 * The above __this_cpu_inc_return() is 'atomic' cpu local. An
2814 	 * interrupt will either see the value pre increment or post
2815 	 * increment. If the interrupt happens pre increment it will have
2816 	 * restored the counter when it returns.  We just need a barrier to
2817 	 * keep gcc from moving things around.
2818 	 */
2819 	barrier();
2820 
2821 	fstack = this_cpu_ptr(ftrace_stacks.stacks) + stackidx;
2822 	size = ARRAY_SIZE(fstack->calls);
2823 
2824 	if (regs) {
2825 		nr_entries = stack_trace_save_regs(regs, fstack->calls,
2826 						   size, skip);
2827 	} else {
2828 		nr_entries = stack_trace_save(fstack->calls, size, skip);
2829 	}
2830 
2831 	size = nr_entries * sizeof(unsigned long);
2832 	event = __trace_buffer_lock_reserve(buffer, TRACE_STACK,
2833 					    sizeof(*entry) + size, flags, pc);
2834 	if (!event)
2835 		goto out;
2836 	entry = ring_buffer_event_data(event);
2837 
2838 	memcpy(&entry->caller, fstack->calls, size);
2839 	entry->size = nr_entries;
2840 
2841 	if (!call_filter_check_discard(call, entry, buffer, event))
2842 		__buffer_unlock_commit(buffer, event);
2843 
2844  out:
2845 	/* Again, don't let gcc optimize things here */
2846 	barrier();
2847 	__this_cpu_dec(ftrace_stack_reserve);
2848 	preempt_enable_notrace();
2849 
2850 }
2851 
2852 static inline void ftrace_trace_stack(struct trace_array *tr,
2853 				      struct ring_buffer *buffer,
2854 				      unsigned long flags,
2855 				      int skip, int pc, struct pt_regs *regs)
2856 {
2857 	if (!(tr->trace_flags & TRACE_ITER_STACKTRACE))
2858 		return;
2859 
2860 	__ftrace_trace_stack(buffer, flags, skip, pc, regs);
2861 }
2862 
2863 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
2864 		   int pc)
2865 {
2866 	struct ring_buffer *buffer = tr->trace_buffer.buffer;
2867 
2868 	if (rcu_is_watching()) {
2869 		__ftrace_trace_stack(buffer, flags, skip, pc, NULL);
2870 		return;
2871 	}
2872 
2873 	/*
2874 	 * When an NMI triggers, RCU is enabled via rcu_nmi_enter(),
2875 	 * but if the above rcu_is_watching() failed, then the NMI
2876 	 * triggered someplace critical, and rcu_irq_enter() should
2877 	 * not be called from NMI.
2878 	 */
2879 	if (unlikely(in_nmi()))
2880 		return;
2881 
2882 	rcu_irq_enter_irqson();
2883 	__ftrace_trace_stack(buffer, flags, skip, pc, NULL);
2884 	rcu_irq_exit_irqson();
2885 }
2886 
2887 /**
2888  * trace_dump_stack - record a stack back trace in the trace buffer
2889  * @skip: Number of functions to skip (helper handlers)
2890  */
2891 void trace_dump_stack(int skip)
2892 {
2893 	unsigned long flags;
2894 
2895 	if (tracing_disabled || tracing_selftest_running)
2896 		return;
2897 
2898 	local_save_flags(flags);
2899 
2900 #ifndef CONFIG_UNWINDER_ORC
2901 	/* Skip 1 to skip this function. */
2902 	skip++;
2903 #endif
2904 	__ftrace_trace_stack(global_trace.trace_buffer.buffer,
2905 			     flags, skip, preempt_count(), NULL);
2906 }
2907 EXPORT_SYMBOL_GPL(trace_dump_stack);
2908 
2909 #ifdef CONFIG_USER_STACKTRACE_SUPPORT
2910 static DEFINE_PER_CPU(int, user_stack_count);
2911 
2912 static void
2913 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
2914 {
2915 	struct trace_event_call *call = &event_user_stack;
2916 	struct ring_buffer_event *event;
2917 	struct userstack_entry *entry;
2918 
2919 	if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE))
2920 		return;
2921 
2922 	/*
2923 	 * NMIs can not handle page faults, even with fix ups.
2924 	 * The save user stack can (and often does) fault.
2925 	 */
2926 	if (unlikely(in_nmi()))
2927 		return;
2928 
2929 	/*
2930 	 * prevent recursion, since the user stack tracing may
2931 	 * trigger other kernel events.
2932 	 */
2933 	preempt_disable();
2934 	if (__this_cpu_read(user_stack_count))
2935 		goto out;
2936 
2937 	__this_cpu_inc(user_stack_count);
2938 
2939 	event = __trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
2940 					    sizeof(*entry), flags, pc);
2941 	if (!event)
2942 		goto out_drop_count;
2943 	entry	= ring_buffer_event_data(event);
2944 
2945 	entry->tgid		= current->tgid;
2946 	memset(&entry->caller, 0, sizeof(entry->caller));
2947 
2948 	stack_trace_save_user(entry->caller, FTRACE_STACK_ENTRIES);
2949 	if (!call_filter_check_discard(call, entry, buffer, event))
2950 		__buffer_unlock_commit(buffer, event);
2951 
2952  out_drop_count:
2953 	__this_cpu_dec(user_stack_count);
2954  out:
2955 	preempt_enable();
2956 }
2957 #else /* CONFIG_USER_STACKTRACE_SUPPORT */
2958 static void ftrace_trace_userstack(struct ring_buffer *buffer,
2959 				   unsigned long flags, int pc)
2960 {
2961 }
2962 #endif /* !CONFIG_USER_STACKTRACE_SUPPORT */
2963 
2964 #endif /* CONFIG_STACKTRACE */
2965 
2966 /* created for use with alloc_percpu */
2967 struct trace_buffer_struct {
2968 	int nesting;
2969 	char buffer[4][TRACE_BUF_SIZE];
2970 };
2971 
2972 static struct trace_buffer_struct *trace_percpu_buffer;
2973 
2974 /*
2975  * Thise allows for lockless recording.  If we're nested too deeply, then
2976  * this returns NULL.
2977  */
2978 static char *get_trace_buf(void)
2979 {
2980 	struct trace_buffer_struct *buffer = this_cpu_ptr(trace_percpu_buffer);
2981 
2982 	if (!buffer || buffer->nesting >= 4)
2983 		return NULL;
2984 
2985 	buffer->nesting++;
2986 
2987 	/* Interrupts must see nesting incremented before we use the buffer */
2988 	barrier();
2989 	return &buffer->buffer[buffer->nesting][0];
2990 }
2991 
2992 static void put_trace_buf(void)
2993 {
2994 	/* Don't let the decrement of nesting leak before this */
2995 	barrier();
2996 	this_cpu_dec(trace_percpu_buffer->nesting);
2997 }
2998 
2999 static int alloc_percpu_trace_buffer(void)
3000 {
3001 	struct trace_buffer_struct *buffers;
3002 
3003 	buffers = alloc_percpu(struct trace_buffer_struct);
3004 	if (WARN(!buffers, "Could not allocate percpu trace_printk buffer"))
3005 		return -ENOMEM;
3006 
3007 	trace_percpu_buffer = buffers;
3008 	return 0;
3009 }
3010 
3011 static int buffers_allocated;
3012 
3013 void trace_printk_init_buffers(void)
3014 {
3015 	if (buffers_allocated)
3016 		return;
3017 
3018 	if (alloc_percpu_trace_buffer())
3019 		return;
3020 
3021 	/* trace_printk() is for debug use only. Don't use it in production. */
3022 
3023 	pr_warn("\n");
3024 	pr_warn("**********************************************************\n");
3025 	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
3026 	pr_warn("**                                                      **\n");
3027 	pr_warn("** trace_printk() being used. Allocating extra memory.  **\n");
3028 	pr_warn("**                                                      **\n");
3029 	pr_warn("** This means that this is a DEBUG kernel and it is     **\n");
3030 	pr_warn("** unsafe for production use.                           **\n");
3031 	pr_warn("**                                                      **\n");
3032 	pr_warn("** If you see this message and you are not debugging    **\n");
3033 	pr_warn("** the kernel, report this immediately to your vendor!  **\n");
3034 	pr_warn("**                                                      **\n");
3035 	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
3036 	pr_warn("**********************************************************\n");
3037 
3038 	/* Expand the buffers to set size */
3039 	tracing_update_buffers();
3040 
3041 	buffers_allocated = 1;
3042 
3043 	/*
3044 	 * trace_printk_init_buffers() can be called by modules.
3045 	 * If that happens, then we need to start cmdline recording
3046 	 * directly here. If the global_trace.buffer is already
3047 	 * allocated here, then this was called by module code.
3048 	 */
3049 	if (global_trace.trace_buffer.buffer)
3050 		tracing_start_cmdline_record();
3051 }
3052 EXPORT_SYMBOL_GPL(trace_printk_init_buffers);
3053 
3054 void trace_printk_start_comm(void)
3055 {
3056 	/* Start tracing comms if trace printk is set */
3057 	if (!buffers_allocated)
3058 		return;
3059 	tracing_start_cmdline_record();
3060 }
3061 
3062 static void trace_printk_start_stop_comm(int enabled)
3063 {
3064 	if (!buffers_allocated)
3065 		return;
3066 
3067 	if (enabled)
3068 		tracing_start_cmdline_record();
3069 	else
3070 		tracing_stop_cmdline_record();
3071 }
3072 
3073 /**
3074  * trace_vbprintk - write binary msg to tracing buffer
3075  * @ip:    The address of the caller
3076  * @fmt:   The string format to write to the buffer
3077  * @args:  Arguments for @fmt
3078  */
3079 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
3080 {
3081 	struct trace_event_call *call = &event_bprint;
3082 	struct ring_buffer_event *event;
3083 	struct ring_buffer *buffer;
3084 	struct trace_array *tr = &global_trace;
3085 	struct bprint_entry *entry;
3086 	unsigned long flags;
3087 	char *tbuffer;
3088 	int len = 0, size, pc;
3089 
3090 	if (unlikely(tracing_selftest_running || tracing_disabled))
3091 		return 0;
3092 
3093 	/* Don't pollute graph traces with trace_vprintk internals */
3094 	pause_graph_tracing();
3095 
3096 	pc = preempt_count();
3097 	preempt_disable_notrace();
3098 
3099 	tbuffer = get_trace_buf();
3100 	if (!tbuffer) {
3101 		len = 0;
3102 		goto out_nobuffer;
3103 	}
3104 
3105 	len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
3106 
3107 	if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
3108 		goto out;
3109 
3110 	local_save_flags(flags);
3111 	size = sizeof(*entry) + sizeof(u32) * len;
3112 	buffer = tr->trace_buffer.buffer;
3113 	event = __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
3114 					    flags, pc);
3115 	if (!event)
3116 		goto out;
3117 	entry = ring_buffer_event_data(event);
3118 	entry->ip			= ip;
3119 	entry->fmt			= fmt;
3120 
3121 	memcpy(entry->buf, tbuffer, sizeof(u32) * len);
3122 	if (!call_filter_check_discard(call, entry, buffer, event)) {
3123 		__buffer_unlock_commit(buffer, event);
3124 		ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
3125 	}
3126 
3127 out:
3128 	put_trace_buf();
3129 
3130 out_nobuffer:
3131 	preempt_enable_notrace();
3132 	unpause_graph_tracing();
3133 
3134 	return len;
3135 }
3136 EXPORT_SYMBOL_GPL(trace_vbprintk);
3137 
3138 __printf(3, 0)
3139 static int
3140 __trace_array_vprintk(struct ring_buffer *buffer,
3141 		      unsigned long ip, const char *fmt, va_list args)
3142 {
3143 	struct trace_event_call *call = &event_print;
3144 	struct ring_buffer_event *event;
3145 	int len = 0, size, pc;
3146 	struct print_entry *entry;
3147 	unsigned long flags;
3148 	char *tbuffer;
3149 
3150 	if (tracing_disabled || tracing_selftest_running)
3151 		return 0;
3152 
3153 	/* Don't pollute graph traces with trace_vprintk internals */
3154 	pause_graph_tracing();
3155 
3156 	pc = preempt_count();
3157 	preempt_disable_notrace();
3158 
3159 
3160 	tbuffer = get_trace_buf();
3161 	if (!tbuffer) {
3162 		len = 0;
3163 		goto out_nobuffer;
3164 	}
3165 
3166 	len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
3167 
3168 	local_save_flags(flags);
3169 	size = sizeof(*entry) + len + 1;
3170 	event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
3171 					    flags, pc);
3172 	if (!event)
3173 		goto out;
3174 	entry = ring_buffer_event_data(event);
3175 	entry->ip = ip;
3176 
3177 	memcpy(&entry->buf, tbuffer, len + 1);
3178 	if (!call_filter_check_discard(call, entry, buffer, event)) {
3179 		__buffer_unlock_commit(buffer, event);
3180 		ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL);
3181 	}
3182 
3183 out:
3184 	put_trace_buf();
3185 
3186 out_nobuffer:
3187 	preempt_enable_notrace();
3188 	unpause_graph_tracing();
3189 
3190 	return len;
3191 }
3192 
3193 __printf(3, 0)
3194 int trace_array_vprintk(struct trace_array *tr,
3195 			unsigned long ip, const char *fmt, va_list args)
3196 {
3197 	return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
3198 }
3199 
3200 __printf(3, 0)
3201 int trace_array_printk(struct trace_array *tr,
3202 		       unsigned long ip, const char *fmt, ...)
3203 {
3204 	int ret;
3205 	va_list ap;
3206 
3207 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
3208 		return 0;
3209 
3210 	va_start(ap, fmt);
3211 	ret = trace_array_vprintk(tr, ip, fmt, ap);
3212 	va_end(ap);
3213 	return ret;
3214 }
3215 EXPORT_SYMBOL_GPL(trace_array_printk);
3216 
3217 __printf(3, 4)
3218 int trace_array_printk_buf(struct ring_buffer *buffer,
3219 			   unsigned long ip, const char *fmt, ...)
3220 {
3221 	int ret;
3222 	va_list ap;
3223 
3224 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
3225 		return 0;
3226 
3227 	va_start(ap, fmt);
3228 	ret = __trace_array_vprintk(buffer, ip, fmt, ap);
3229 	va_end(ap);
3230 	return ret;
3231 }
3232 
3233 __printf(2, 0)
3234 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
3235 {
3236 	return trace_array_vprintk(&global_trace, ip, fmt, args);
3237 }
3238 EXPORT_SYMBOL_GPL(trace_vprintk);
3239 
3240 static void trace_iterator_increment(struct trace_iterator *iter)
3241 {
3242 	struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
3243 
3244 	iter->idx++;
3245 	if (buf_iter)
3246 		ring_buffer_read(buf_iter, NULL);
3247 }
3248 
3249 static struct trace_entry *
3250 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
3251 		unsigned long *lost_events)
3252 {
3253 	struct ring_buffer_event *event;
3254 	struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
3255 
3256 	if (buf_iter)
3257 		event = ring_buffer_iter_peek(buf_iter, ts);
3258 	else
3259 		event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
3260 					 lost_events);
3261 
3262 	if (event) {
3263 		iter->ent_size = ring_buffer_event_length(event);
3264 		return ring_buffer_event_data(event);
3265 	}
3266 	iter->ent_size = 0;
3267 	return NULL;
3268 }
3269 
3270 static struct trace_entry *
3271 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
3272 		  unsigned long *missing_events, u64 *ent_ts)
3273 {
3274 	struct ring_buffer *buffer = iter->trace_buffer->buffer;
3275 	struct trace_entry *ent, *next = NULL;
3276 	unsigned long lost_events = 0, next_lost = 0;
3277 	int cpu_file = iter->cpu_file;
3278 	u64 next_ts = 0, ts;
3279 	int next_cpu = -1;
3280 	int next_size = 0;
3281 	int cpu;
3282 
3283 	/*
3284 	 * If we are in a per_cpu trace file, don't bother by iterating over
3285 	 * all cpu and peek directly.
3286 	 */
3287 	if (cpu_file > RING_BUFFER_ALL_CPUS) {
3288 		if (ring_buffer_empty_cpu(buffer, cpu_file))
3289 			return NULL;
3290 		ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
3291 		if (ent_cpu)
3292 			*ent_cpu = cpu_file;
3293 
3294 		return ent;
3295 	}
3296 
3297 	for_each_tracing_cpu(cpu) {
3298 
3299 		if (ring_buffer_empty_cpu(buffer, cpu))
3300 			continue;
3301 
3302 		ent = peek_next_entry(iter, cpu, &ts, &lost_events);
3303 
3304 		/*
3305 		 * Pick the entry with the smallest timestamp:
3306 		 */
3307 		if (ent && (!next || ts < next_ts)) {
3308 			next = ent;
3309 			next_cpu = cpu;
3310 			next_ts = ts;
3311 			next_lost = lost_events;
3312 			next_size = iter->ent_size;
3313 		}
3314 	}
3315 
3316 	iter->ent_size = next_size;
3317 
3318 	if (ent_cpu)
3319 		*ent_cpu = next_cpu;
3320 
3321 	if (ent_ts)
3322 		*ent_ts = next_ts;
3323 
3324 	if (missing_events)
3325 		*missing_events = next_lost;
3326 
3327 	return next;
3328 }
3329 
3330 /* Find the next real entry, without updating the iterator itself */
3331 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
3332 					  int *ent_cpu, u64 *ent_ts)
3333 {
3334 	return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
3335 }
3336 
3337 /* Find the next real entry, and increment the iterator to the next entry */
3338 void *trace_find_next_entry_inc(struct trace_iterator *iter)
3339 {
3340 	iter->ent = __find_next_entry(iter, &iter->cpu,
3341 				      &iter->lost_events, &iter->ts);
3342 
3343 	if (iter->ent)
3344 		trace_iterator_increment(iter);
3345 
3346 	return iter->ent ? iter : NULL;
3347 }
3348 
3349 static void trace_consume(struct trace_iterator *iter)
3350 {
3351 	ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
3352 			    &iter->lost_events);
3353 }
3354 
3355 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
3356 {
3357 	struct trace_iterator *iter = m->private;
3358 	int i = (int)*pos;
3359 	void *ent;
3360 
3361 	WARN_ON_ONCE(iter->leftover);
3362 
3363 	(*pos)++;
3364 
3365 	/* can't go backwards */
3366 	if (iter->idx > i)
3367 		return NULL;
3368 
3369 	if (iter->idx < 0)
3370 		ent = trace_find_next_entry_inc(iter);
3371 	else
3372 		ent = iter;
3373 
3374 	while (ent && iter->idx < i)
3375 		ent = trace_find_next_entry_inc(iter);
3376 
3377 	iter->pos = *pos;
3378 
3379 	return ent;
3380 }
3381 
3382 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
3383 {
3384 	struct ring_buffer_event *event;
3385 	struct ring_buffer_iter *buf_iter;
3386 	unsigned long entries = 0;
3387 	u64 ts;
3388 
3389 	per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
3390 
3391 	buf_iter = trace_buffer_iter(iter, cpu);
3392 	if (!buf_iter)
3393 		return;
3394 
3395 	ring_buffer_iter_reset(buf_iter);
3396 
3397 	/*
3398 	 * We could have the case with the max latency tracers
3399 	 * that a reset never took place on a cpu. This is evident
3400 	 * by the timestamp being before the start of the buffer.
3401 	 */
3402 	while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
3403 		if (ts >= iter->trace_buffer->time_start)
3404 			break;
3405 		entries++;
3406 		ring_buffer_read(buf_iter, NULL);
3407 	}
3408 
3409 	per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
3410 }
3411 
3412 /*
3413  * The current tracer is copied to avoid a global locking
3414  * all around.
3415  */
3416 static void *s_start(struct seq_file *m, loff_t *pos)
3417 {
3418 	struct trace_iterator *iter = m->private;
3419 	struct trace_array *tr = iter->tr;
3420 	int cpu_file = iter->cpu_file;
3421 	void *p = NULL;
3422 	loff_t l = 0;
3423 	int cpu;
3424 
3425 	/*
3426 	 * copy the tracer to avoid using a global lock all around.
3427 	 * iter->trace is a copy of current_trace, the pointer to the
3428 	 * name may be used instead of a strcmp(), as iter->trace->name
3429 	 * will point to the same string as current_trace->name.
3430 	 */
3431 	mutex_lock(&trace_types_lock);
3432 	if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
3433 		*iter->trace = *tr->current_trace;
3434 	mutex_unlock(&trace_types_lock);
3435 
3436 #ifdef CONFIG_TRACER_MAX_TRACE
3437 	if (iter->snapshot && iter->trace->use_max_tr)
3438 		return ERR_PTR(-EBUSY);
3439 #endif
3440 
3441 	if (!iter->snapshot)
3442 		atomic_inc(&trace_record_taskinfo_disabled);
3443 
3444 	if (*pos != iter->pos) {
3445 		iter->ent = NULL;
3446 		iter->cpu = 0;
3447 		iter->idx = -1;
3448 
3449 		if (cpu_file == RING_BUFFER_ALL_CPUS) {
3450 			for_each_tracing_cpu(cpu)
3451 				tracing_iter_reset(iter, cpu);
3452 		} else
3453 			tracing_iter_reset(iter, cpu_file);
3454 
3455 		iter->leftover = 0;
3456 		for (p = iter; p && l < *pos; p = s_next(m, p, &l))
3457 			;
3458 
3459 	} else {
3460 		/*
3461 		 * If we overflowed the seq_file before, then we want
3462 		 * to just reuse the trace_seq buffer again.
3463 		 */
3464 		if (iter->leftover)
3465 			p = iter;
3466 		else {
3467 			l = *pos - 1;
3468 			p = s_next(m, p, &l);
3469 		}
3470 	}
3471 
3472 	trace_event_read_lock();
3473 	trace_access_lock(cpu_file);
3474 	return p;
3475 }
3476 
3477 static void s_stop(struct seq_file *m, void *p)
3478 {
3479 	struct trace_iterator *iter = m->private;
3480 
3481 #ifdef CONFIG_TRACER_MAX_TRACE
3482 	if (iter->snapshot && iter->trace->use_max_tr)
3483 		return;
3484 #endif
3485 
3486 	if (!iter->snapshot)
3487 		atomic_dec(&trace_record_taskinfo_disabled);
3488 
3489 	trace_access_unlock(iter->cpu_file);
3490 	trace_event_read_unlock();
3491 }
3492 
3493 static void
3494 get_total_entries_cpu(struct trace_buffer *buf, unsigned long *total,
3495 		      unsigned long *entries, int cpu)
3496 {
3497 	unsigned long count;
3498 
3499 	count = ring_buffer_entries_cpu(buf->buffer, cpu);
3500 	/*
3501 	 * If this buffer has skipped entries, then we hold all
3502 	 * entries for the trace and we need to ignore the
3503 	 * ones before the time stamp.
3504 	 */
3505 	if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
3506 		count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
3507 		/* total is the same as the entries */
3508 		*total = count;
3509 	} else
3510 		*total = count +
3511 			ring_buffer_overrun_cpu(buf->buffer, cpu);
3512 	*entries = count;
3513 }
3514 
3515 static void
3516 get_total_entries(struct trace_buffer *buf,
3517 		  unsigned long *total, unsigned long *entries)
3518 {
3519 	unsigned long t, e;
3520 	int cpu;
3521 
3522 	*total = 0;
3523 	*entries = 0;
3524 
3525 	for_each_tracing_cpu(cpu) {
3526 		get_total_entries_cpu(buf, &t, &e, cpu);
3527 		*total += t;
3528 		*entries += e;
3529 	}
3530 }
3531 
3532 unsigned long trace_total_entries_cpu(struct trace_array *tr, int cpu)
3533 {
3534 	unsigned long total, entries;
3535 
3536 	if (!tr)
3537 		tr = &global_trace;
3538 
3539 	get_total_entries_cpu(&tr->trace_buffer, &total, &entries, cpu);
3540 
3541 	return entries;
3542 }
3543 
3544 unsigned long trace_total_entries(struct trace_array *tr)
3545 {
3546 	unsigned long total, entries;
3547 
3548 	if (!tr)
3549 		tr = &global_trace;
3550 
3551 	get_total_entries(&tr->trace_buffer, &total, &entries);
3552 
3553 	return entries;
3554 }
3555 
3556 static void print_lat_help_header(struct seq_file *m)
3557 {
3558 	seq_puts(m, "#                  _------=> CPU#            \n"
3559 		    "#                 / _-----=> irqs-off        \n"
3560 		    "#                | / _----=> need-resched    \n"
3561 		    "#                || / _---=> hardirq/softirq \n"
3562 		    "#                ||| / _--=> preempt-depth   \n"
3563 		    "#                |||| /     delay            \n"
3564 		    "#  cmd     pid   ||||| time  |   caller      \n"
3565 		    "#     \\   /      |||||  \\    |   /         \n");
3566 }
3567 
3568 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
3569 {
3570 	unsigned long total;
3571 	unsigned long entries;
3572 
3573 	get_total_entries(buf, &total, &entries);
3574 	seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu   #P:%d\n",
3575 		   entries, total, num_online_cpus());
3576 	seq_puts(m, "#\n");
3577 }
3578 
3579 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m,
3580 				   unsigned int flags)
3581 {
3582 	bool tgid = flags & TRACE_ITER_RECORD_TGID;
3583 
3584 	print_event_info(buf, m);
3585 
3586 	seq_printf(m, "#           TASK-PID   %s  CPU#   TIMESTAMP  FUNCTION\n", tgid ? "TGID     " : "");
3587 	seq_printf(m, "#              | |     %s    |       |         |\n",	 tgid ? "  |      " : "");
3588 }
3589 
3590 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m,
3591 				       unsigned int flags)
3592 {
3593 	bool tgid = flags & TRACE_ITER_RECORD_TGID;
3594 	const char *space = "          ";
3595 	int prec = tgid ? 10 : 2;
3596 
3597 	print_event_info(buf, m);
3598 
3599 	seq_printf(m, "#                          %.*s  _-----=> irqs-off\n", prec, space);
3600 	seq_printf(m, "#                          %.*s / _----=> need-resched\n", prec, space);
3601 	seq_printf(m, "#                          %.*s| / _---=> hardirq/softirq\n", prec, space);
3602 	seq_printf(m, "#                          %.*s|| / _--=> preempt-depth\n", prec, space);
3603 	seq_printf(m, "#                          %.*s||| /     delay\n", prec, space);
3604 	seq_printf(m, "#           TASK-PID %.*sCPU#  ||||    TIMESTAMP  FUNCTION\n", prec, "   TGID   ");
3605 	seq_printf(m, "#              | |   %.*s  |   ||||       |         |\n", prec, "     |    ");
3606 }
3607 
3608 void
3609 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
3610 {
3611 	unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
3612 	struct trace_buffer *buf = iter->trace_buffer;
3613 	struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
3614 	struct tracer *type = iter->trace;
3615 	unsigned long entries;
3616 	unsigned long total;
3617 	const char *name = "preemption";
3618 
3619 	name = type->name;
3620 
3621 	get_total_entries(buf, &total, &entries);
3622 
3623 	seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
3624 		   name, UTS_RELEASE);
3625 	seq_puts(m, "# -----------------------------------"
3626 		 "---------------------------------\n");
3627 	seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
3628 		   " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
3629 		   nsecs_to_usecs(data->saved_latency),
3630 		   entries,
3631 		   total,
3632 		   buf->cpu,
3633 #if defined(CONFIG_PREEMPT_NONE)
3634 		   "server",
3635 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
3636 		   "desktop",
3637 #elif defined(CONFIG_PREEMPT)
3638 		   "preempt",
3639 #else
3640 		   "unknown",
3641 #endif
3642 		   /* These are reserved for later use */
3643 		   0, 0, 0, 0);
3644 #ifdef CONFIG_SMP
3645 	seq_printf(m, " #P:%d)\n", num_online_cpus());
3646 #else
3647 	seq_puts(m, ")\n");
3648 #endif
3649 	seq_puts(m, "#    -----------------\n");
3650 	seq_printf(m, "#    | task: %.16s-%d "
3651 		   "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
3652 		   data->comm, data->pid,
3653 		   from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
3654 		   data->policy, data->rt_priority);
3655 	seq_puts(m, "#    -----------------\n");
3656 
3657 	if (data->critical_start) {
3658 		seq_puts(m, "#  => started at: ");
3659 		seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
3660 		trace_print_seq(m, &iter->seq);
3661 		seq_puts(m, "\n#  => ended at:   ");
3662 		seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
3663 		trace_print_seq(m, &iter->seq);
3664 		seq_puts(m, "\n#\n");
3665 	}
3666 
3667 	seq_puts(m, "#\n");
3668 }
3669 
3670 static void test_cpu_buff_start(struct trace_iterator *iter)
3671 {
3672 	struct trace_seq *s = &iter->seq;
3673 	struct trace_array *tr = iter->tr;
3674 
3675 	if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
3676 		return;
3677 
3678 	if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
3679 		return;
3680 
3681 	if (cpumask_available(iter->started) &&
3682 	    cpumask_test_cpu(iter->cpu, iter->started))
3683 		return;
3684 
3685 	if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
3686 		return;
3687 
3688 	if (cpumask_available(iter->started))
3689 		cpumask_set_cpu(iter->cpu, iter->started);
3690 
3691 	/* Don't print started cpu buffer for the first entry of the trace */
3692 	if (iter->idx > 1)
3693 		trace_seq_printf(s, "##### CPU %u buffer started ####\n",
3694 				iter->cpu);
3695 }
3696 
3697 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
3698 {
3699 	struct trace_array *tr = iter->tr;
3700 	struct trace_seq *s = &iter->seq;
3701 	unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
3702 	struct trace_entry *entry;
3703 	struct trace_event *event;
3704 
3705 	entry = iter->ent;
3706 
3707 	test_cpu_buff_start(iter);
3708 
3709 	event = ftrace_find_event(entry->type);
3710 
3711 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
3712 		if (iter->iter_flags & TRACE_FILE_LAT_FMT)
3713 			trace_print_lat_context(iter);
3714 		else
3715 			trace_print_context(iter);
3716 	}
3717 
3718 	if (trace_seq_has_overflowed(s))
3719 		return TRACE_TYPE_PARTIAL_LINE;
3720 
3721 	if (event)
3722 		return event->funcs->trace(iter, sym_flags, event);
3723 
3724 	trace_seq_printf(s, "Unknown type %d\n", entry->type);
3725 
3726 	return trace_handle_return(s);
3727 }
3728 
3729 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
3730 {
3731 	struct trace_array *tr = iter->tr;
3732 	struct trace_seq *s = &iter->seq;
3733 	struct trace_entry *entry;
3734 	struct trace_event *event;
3735 
3736 	entry = iter->ent;
3737 
3738 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
3739 		trace_seq_printf(s, "%d %d %llu ",
3740 				 entry->pid, iter->cpu, iter->ts);
3741 
3742 	if (trace_seq_has_overflowed(s))
3743 		return TRACE_TYPE_PARTIAL_LINE;
3744 
3745 	event = ftrace_find_event(entry->type);
3746 	if (event)
3747 		return event->funcs->raw(iter, 0, event);
3748 
3749 	trace_seq_printf(s, "%d ?\n", entry->type);
3750 
3751 	return trace_handle_return(s);
3752 }
3753 
3754 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
3755 {
3756 	struct trace_array *tr = iter->tr;
3757 	struct trace_seq *s = &iter->seq;
3758 	unsigned char newline = '\n';
3759 	struct trace_entry *entry;
3760 	struct trace_event *event;
3761 
3762 	entry = iter->ent;
3763 
3764 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
3765 		SEQ_PUT_HEX_FIELD(s, entry->pid);
3766 		SEQ_PUT_HEX_FIELD(s, iter->cpu);
3767 		SEQ_PUT_HEX_FIELD(s, iter->ts);
3768 		if (trace_seq_has_overflowed(s))
3769 			return TRACE_TYPE_PARTIAL_LINE;
3770 	}
3771 
3772 	event = ftrace_find_event(entry->type);
3773 	if (event) {
3774 		enum print_line_t ret = event->funcs->hex(iter, 0, event);
3775 		if (ret != TRACE_TYPE_HANDLED)
3776 			return ret;
3777 	}
3778 
3779 	SEQ_PUT_FIELD(s, newline);
3780 
3781 	return trace_handle_return(s);
3782 }
3783 
3784 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
3785 {
3786 	struct trace_array *tr = iter->tr;
3787 	struct trace_seq *s = &iter->seq;
3788 	struct trace_entry *entry;
3789 	struct trace_event *event;
3790 
3791 	entry = iter->ent;
3792 
3793 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
3794 		SEQ_PUT_FIELD(s, entry->pid);
3795 		SEQ_PUT_FIELD(s, iter->cpu);
3796 		SEQ_PUT_FIELD(s, iter->ts);
3797 		if (trace_seq_has_overflowed(s))
3798 			return TRACE_TYPE_PARTIAL_LINE;
3799 	}
3800 
3801 	event = ftrace_find_event(entry->type);
3802 	return event ? event->funcs->binary(iter, 0, event) :
3803 		TRACE_TYPE_HANDLED;
3804 }
3805 
3806 int trace_empty(struct trace_iterator *iter)
3807 {
3808 	struct ring_buffer_iter *buf_iter;
3809 	int cpu;
3810 
3811 	/* If we are looking at one CPU buffer, only check that one */
3812 	if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
3813 		cpu = iter->cpu_file;
3814 		buf_iter = trace_buffer_iter(iter, cpu);
3815 		if (buf_iter) {
3816 			if (!ring_buffer_iter_empty(buf_iter))
3817 				return 0;
3818 		} else {
3819 			if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
3820 				return 0;
3821 		}
3822 		return 1;
3823 	}
3824 
3825 	for_each_tracing_cpu(cpu) {
3826 		buf_iter = trace_buffer_iter(iter, cpu);
3827 		if (buf_iter) {
3828 			if (!ring_buffer_iter_empty(buf_iter))
3829 				return 0;
3830 		} else {
3831 			if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
3832 				return 0;
3833 		}
3834 	}
3835 
3836 	return 1;
3837 }
3838 
3839 /*  Called with trace_event_read_lock() held. */
3840 enum print_line_t print_trace_line(struct trace_iterator *iter)
3841 {
3842 	struct trace_array *tr = iter->tr;
3843 	unsigned long trace_flags = tr->trace_flags;
3844 	enum print_line_t ret;
3845 
3846 	if (iter->lost_events) {
3847 		trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
3848 				 iter->cpu, iter->lost_events);
3849 		if (trace_seq_has_overflowed(&iter->seq))
3850 			return TRACE_TYPE_PARTIAL_LINE;
3851 	}
3852 
3853 	if (iter->trace && iter->trace->print_line) {
3854 		ret = iter->trace->print_line(iter);
3855 		if (ret != TRACE_TYPE_UNHANDLED)
3856 			return ret;
3857 	}
3858 
3859 	if (iter->ent->type == TRACE_BPUTS &&
3860 			trace_flags & TRACE_ITER_PRINTK &&
3861 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
3862 		return trace_print_bputs_msg_only(iter);
3863 
3864 	if (iter->ent->type == TRACE_BPRINT &&
3865 			trace_flags & TRACE_ITER_PRINTK &&
3866 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
3867 		return trace_print_bprintk_msg_only(iter);
3868 
3869 	if (iter->ent->type == TRACE_PRINT &&
3870 			trace_flags & TRACE_ITER_PRINTK &&
3871 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
3872 		return trace_print_printk_msg_only(iter);
3873 
3874 	if (trace_flags & TRACE_ITER_BIN)
3875 		return print_bin_fmt(iter);
3876 
3877 	if (trace_flags & TRACE_ITER_HEX)
3878 		return print_hex_fmt(iter);
3879 
3880 	if (trace_flags & TRACE_ITER_RAW)
3881 		return print_raw_fmt(iter);
3882 
3883 	return print_trace_fmt(iter);
3884 }
3885 
3886 void trace_latency_header(struct seq_file *m)
3887 {
3888 	struct trace_iterator *iter = m->private;
3889 	struct trace_array *tr = iter->tr;
3890 
3891 	/* print nothing if the buffers are empty */
3892 	if (trace_empty(iter))
3893 		return;
3894 
3895 	if (iter->iter_flags & TRACE_FILE_LAT_FMT)
3896 		print_trace_header(m, iter);
3897 
3898 	if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
3899 		print_lat_help_header(m);
3900 }
3901 
3902 void trace_default_header(struct seq_file *m)
3903 {
3904 	struct trace_iterator *iter = m->private;
3905 	struct trace_array *tr = iter->tr;
3906 	unsigned long trace_flags = tr->trace_flags;
3907 
3908 	if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
3909 		return;
3910 
3911 	if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
3912 		/* print nothing if the buffers are empty */
3913 		if (trace_empty(iter))
3914 			return;
3915 		print_trace_header(m, iter);
3916 		if (!(trace_flags & TRACE_ITER_VERBOSE))
3917 			print_lat_help_header(m);
3918 	} else {
3919 		if (!(trace_flags & TRACE_ITER_VERBOSE)) {
3920 			if (trace_flags & TRACE_ITER_IRQ_INFO)
3921 				print_func_help_header_irq(iter->trace_buffer,
3922 							   m, trace_flags);
3923 			else
3924 				print_func_help_header(iter->trace_buffer, m,
3925 						       trace_flags);
3926 		}
3927 	}
3928 }
3929 
3930 static void test_ftrace_alive(struct seq_file *m)
3931 {
3932 	if (!ftrace_is_dead())
3933 		return;
3934 	seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
3935 		    "#          MAY BE MISSING FUNCTION EVENTS\n");
3936 }
3937 
3938 #ifdef CONFIG_TRACER_MAX_TRACE
3939 static void show_snapshot_main_help(struct seq_file *m)
3940 {
3941 	seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
3942 		    "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
3943 		    "#                      Takes a snapshot of the main buffer.\n"
3944 		    "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
3945 		    "#                      (Doesn't have to be '2' works with any number that\n"
3946 		    "#                       is not a '0' or '1')\n");
3947 }
3948 
3949 static void show_snapshot_percpu_help(struct seq_file *m)
3950 {
3951 	seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
3952 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
3953 	seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
3954 		    "#                      Takes a snapshot of the main buffer for this cpu.\n");
3955 #else
3956 	seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
3957 		    "#                     Must use main snapshot file to allocate.\n");
3958 #endif
3959 	seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
3960 		    "#                      (Doesn't have to be '2' works with any number that\n"
3961 		    "#                       is not a '0' or '1')\n");
3962 }
3963 
3964 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
3965 {
3966 	if (iter->tr->allocated_snapshot)
3967 		seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
3968 	else
3969 		seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
3970 
3971 	seq_puts(m, "# Snapshot commands:\n");
3972 	if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
3973 		show_snapshot_main_help(m);
3974 	else
3975 		show_snapshot_percpu_help(m);
3976 }
3977 #else
3978 /* Should never be called */
3979 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
3980 #endif
3981 
3982 static int s_show(struct seq_file *m, void *v)
3983 {
3984 	struct trace_iterator *iter = v;
3985 	int ret;
3986 
3987 	if (iter->ent == NULL) {
3988 		if (iter->tr) {
3989 			seq_printf(m, "# tracer: %s\n", iter->trace->name);
3990 			seq_puts(m, "#\n");
3991 			test_ftrace_alive(m);
3992 		}
3993 		if (iter->snapshot && trace_empty(iter))
3994 			print_snapshot_help(m, iter);
3995 		else if (iter->trace && iter->trace->print_header)
3996 			iter->trace->print_header(m);
3997 		else
3998 			trace_default_header(m);
3999 
4000 	} else if (iter->leftover) {
4001 		/*
4002 		 * If we filled the seq_file buffer earlier, we
4003 		 * want to just show it now.
4004 		 */
4005 		ret = trace_print_seq(m, &iter->seq);
4006 
4007 		/* ret should this time be zero, but you never know */
4008 		iter->leftover = ret;
4009 
4010 	} else {
4011 		print_trace_line(iter);
4012 		ret = trace_print_seq(m, &iter->seq);
4013 		/*
4014 		 * If we overflow the seq_file buffer, then it will
4015 		 * ask us for this data again at start up.
4016 		 * Use that instead.
4017 		 *  ret is 0 if seq_file write succeeded.
4018 		 *        -1 otherwise.
4019 		 */
4020 		iter->leftover = ret;
4021 	}
4022 
4023 	return 0;
4024 }
4025 
4026 /*
4027  * Should be used after trace_array_get(), trace_types_lock
4028  * ensures that i_cdev was already initialized.
4029  */
4030 static inline int tracing_get_cpu(struct inode *inode)
4031 {
4032 	if (inode->i_cdev) /* See trace_create_cpu_file() */
4033 		return (long)inode->i_cdev - 1;
4034 	return RING_BUFFER_ALL_CPUS;
4035 }
4036 
4037 static const struct seq_operations tracer_seq_ops = {
4038 	.start		= s_start,
4039 	.next		= s_next,
4040 	.stop		= s_stop,
4041 	.show		= s_show,
4042 };
4043 
4044 static struct trace_iterator *
4045 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
4046 {
4047 	struct trace_array *tr = inode->i_private;
4048 	struct trace_iterator *iter;
4049 	int cpu;
4050 
4051 	if (tracing_disabled)
4052 		return ERR_PTR(-ENODEV);
4053 
4054 	iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
4055 	if (!iter)
4056 		return ERR_PTR(-ENOMEM);
4057 
4058 	iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
4059 				    GFP_KERNEL);
4060 	if (!iter->buffer_iter)
4061 		goto release;
4062 
4063 	/*
4064 	 * We make a copy of the current tracer to avoid concurrent
4065 	 * changes on it while we are reading.
4066 	 */
4067 	mutex_lock(&trace_types_lock);
4068 	iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
4069 	if (!iter->trace)
4070 		goto fail;
4071 
4072 	*iter->trace = *tr->current_trace;
4073 
4074 	if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
4075 		goto fail;
4076 
4077 	iter->tr = tr;
4078 
4079 #ifdef CONFIG_TRACER_MAX_TRACE
4080 	/* Currently only the top directory has a snapshot */
4081 	if (tr->current_trace->print_max || snapshot)
4082 		iter->trace_buffer = &tr->max_buffer;
4083 	else
4084 #endif
4085 		iter->trace_buffer = &tr->trace_buffer;
4086 	iter->snapshot = snapshot;
4087 	iter->pos = -1;
4088 	iter->cpu_file = tracing_get_cpu(inode);
4089 	mutex_init(&iter->mutex);
4090 
4091 	/* Notify the tracer early; before we stop tracing. */
4092 	if (iter->trace && iter->trace->open)
4093 		iter->trace->open(iter);
4094 
4095 	/* Annotate start of buffers if we had overruns */
4096 	if (ring_buffer_overruns(iter->trace_buffer->buffer))
4097 		iter->iter_flags |= TRACE_FILE_ANNOTATE;
4098 
4099 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
4100 	if (trace_clocks[tr->clock_id].in_ns)
4101 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4102 
4103 	/* stop the trace while dumping if we are not opening "snapshot" */
4104 	if (!iter->snapshot)
4105 		tracing_stop_tr(tr);
4106 
4107 	if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
4108 		for_each_tracing_cpu(cpu) {
4109 			iter->buffer_iter[cpu] =
4110 				ring_buffer_read_prepare(iter->trace_buffer->buffer,
4111 							 cpu, GFP_KERNEL);
4112 		}
4113 		ring_buffer_read_prepare_sync();
4114 		for_each_tracing_cpu(cpu) {
4115 			ring_buffer_read_start(iter->buffer_iter[cpu]);
4116 			tracing_iter_reset(iter, cpu);
4117 		}
4118 	} else {
4119 		cpu = iter->cpu_file;
4120 		iter->buffer_iter[cpu] =
4121 			ring_buffer_read_prepare(iter->trace_buffer->buffer,
4122 						 cpu, GFP_KERNEL);
4123 		ring_buffer_read_prepare_sync();
4124 		ring_buffer_read_start(iter->buffer_iter[cpu]);
4125 		tracing_iter_reset(iter, cpu);
4126 	}
4127 
4128 	mutex_unlock(&trace_types_lock);
4129 
4130 	return iter;
4131 
4132  fail:
4133 	mutex_unlock(&trace_types_lock);
4134 	kfree(iter->trace);
4135 	kfree(iter->buffer_iter);
4136 release:
4137 	seq_release_private(inode, file);
4138 	return ERR_PTR(-ENOMEM);
4139 }
4140 
4141 int tracing_open_generic(struct inode *inode, struct file *filp)
4142 {
4143 	if (tracing_disabled)
4144 		return -ENODEV;
4145 
4146 	filp->private_data = inode->i_private;
4147 	return 0;
4148 }
4149 
4150 bool tracing_is_disabled(void)
4151 {
4152 	return (tracing_disabled) ? true: false;
4153 }
4154 
4155 /*
4156  * Open and update trace_array ref count.
4157  * Must have the current trace_array passed to it.
4158  */
4159 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
4160 {
4161 	struct trace_array *tr = inode->i_private;
4162 
4163 	if (tracing_disabled)
4164 		return -ENODEV;
4165 
4166 	if (trace_array_get(tr) < 0)
4167 		return -ENODEV;
4168 
4169 	filp->private_data = inode->i_private;
4170 
4171 	return 0;
4172 }
4173 
4174 static int tracing_release(struct inode *inode, struct file *file)
4175 {
4176 	struct trace_array *tr = inode->i_private;
4177 	struct seq_file *m = file->private_data;
4178 	struct trace_iterator *iter;
4179 	int cpu;
4180 
4181 	if (!(file->f_mode & FMODE_READ)) {
4182 		trace_array_put(tr);
4183 		return 0;
4184 	}
4185 
4186 	/* Writes do not use seq_file */
4187 	iter = m->private;
4188 	mutex_lock(&trace_types_lock);
4189 
4190 	for_each_tracing_cpu(cpu) {
4191 		if (iter->buffer_iter[cpu])
4192 			ring_buffer_read_finish(iter->buffer_iter[cpu]);
4193 	}
4194 
4195 	if (iter->trace && iter->trace->close)
4196 		iter->trace->close(iter);
4197 
4198 	if (!iter->snapshot)
4199 		/* reenable tracing if it was previously enabled */
4200 		tracing_start_tr(tr);
4201 
4202 	__trace_array_put(tr);
4203 
4204 	mutex_unlock(&trace_types_lock);
4205 
4206 	mutex_destroy(&iter->mutex);
4207 	free_cpumask_var(iter->started);
4208 	kfree(iter->trace);
4209 	kfree(iter->buffer_iter);
4210 	seq_release_private(inode, file);
4211 
4212 	return 0;
4213 }
4214 
4215 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
4216 {
4217 	struct trace_array *tr = inode->i_private;
4218 
4219 	trace_array_put(tr);
4220 	return 0;
4221 }
4222 
4223 static int tracing_single_release_tr(struct inode *inode, struct file *file)
4224 {
4225 	struct trace_array *tr = inode->i_private;
4226 
4227 	trace_array_put(tr);
4228 
4229 	return single_release(inode, file);
4230 }
4231 
4232 static int tracing_open(struct inode *inode, struct file *file)
4233 {
4234 	struct trace_array *tr = inode->i_private;
4235 	struct trace_iterator *iter;
4236 	int ret = 0;
4237 
4238 	if (trace_array_get(tr) < 0)
4239 		return -ENODEV;
4240 
4241 	/* If this file was open for write, then erase contents */
4242 	if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
4243 		int cpu = tracing_get_cpu(inode);
4244 		struct trace_buffer *trace_buf = &tr->trace_buffer;
4245 
4246 #ifdef CONFIG_TRACER_MAX_TRACE
4247 		if (tr->current_trace->print_max)
4248 			trace_buf = &tr->max_buffer;
4249 #endif
4250 
4251 		if (cpu == RING_BUFFER_ALL_CPUS)
4252 			tracing_reset_online_cpus(trace_buf);
4253 		else
4254 			tracing_reset_cpu(trace_buf, cpu);
4255 	}
4256 
4257 	if (file->f_mode & FMODE_READ) {
4258 		iter = __tracing_open(inode, file, false);
4259 		if (IS_ERR(iter))
4260 			ret = PTR_ERR(iter);
4261 		else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4262 			iter->iter_flags |= TRACE_FILE_LAT_FMT;
4263 	}
4264 
4265 	if (ret < 0)
4266 		trace_array_put(tr);
4267 
4268 	return ret;
4269 }
4270 
4271 /*
4272  * Some tracers are not suitable for instance buffers.
4273  * A tracer is always available for the global array (toplevel)
4274  * or if it explicitly states that it is.
4275  */
4276 static bool
4277 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
4278 {
4279 	return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
4280 }
4281 
4282 /* Find the next tracer that this trace array may use */
4283 static struct tracer *
4284 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
4285 {
4286 	while (t && !trace_ok_for_array(t, tr))
4287 		t = t->next;
4288 
4289 	return t;
4290 }
4291 
4292 static void *
4293 t_next(struct seq_file *m, void *v, loff_t *pos)
4294 {
4295 	struct trace_array *tr = m->private;
4296 	struct tracer *t = v;
4297 
4298 	(*pos)++;
4299 
4300 	if (t)
4301 		t = get_tracer_for_array(tr, t->next);
4302 
4303 	return t;
4304 }
4305 
4306 static void *t_start(struct seq_file *m, loff_t *pos)
4307 {
4308 	struct trace_array *tr = m->private;
4309 	struct tracer *t;
4310 	loff_t l = 0;
4311 
4312 	mutex_lock(&trace_types_lock);
4313 
4314 	t = get_tracer_for_array(tr, trace_types);
4315 	for (; t && l < *pos; t = t_next(m, t, &l))
4316 			;
4317 
4318 	return t;
4319 }
4320 
4321 static void t_stop(struct seq_file *m, void *p)
4322 {
4323 	mutex_unlock(&trace_types_lock);
4324 }
4325 
4326 static int t_show(struct seq_file *m, void *v)
4327 {
4328 	struct tracer *t = v;
4329 
4330 	if (!t)
4331 		return 0;
4332 
4333 	seq_puts(m, t->name);
4334 	if (t->next)
4335 		seq_putc(m, ' ');
4336 	else
4337 		seq_putc(m, '\n');
4338 
4339 	return 0;
4340 }
4341 
4342 static const struct seq_operations show_traces_seq_ops = {
4343 	.start		= t_start,
4344 	.next		= t_next,
4345 	.stop		= t_stop,
4346 	.show		= t_show,
4347 };
4348 
4349 static int show_traces_open(struct inode *inode, struct file *file)
4350 {
4351 	struct trace_array *tr = inode->i_private;
4352 	struct seq_file *m;
4353 	int ret;
4354 
4355 	if (tracing_disabled)
4356 		return -ENODEV;
4357 
4358 	ret = seq_open(file, &show_traces_seq_ops);
4359 	if (ret)
4360 		return ret;
4361 
4362 	m = file->private_data;
4363 	m->private = tr;
4364 
4365 	return 0;
4366 }
4367 
4368 static ssize_t
4369 tracing_write_stub(struct file *filp, const char __user *ubuf,
4370 		   size_t count, loff_t *ppos)
4371 {
4372 	return count;
4373 }
4374 
4375 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
4376 {
4377 	int ret;
4378 
4379 	if (file->f_mode & FMODE_READ)
4380 		ret = seq_lseek(file, offset, whence);
4381 	else
4382 		file->f_pos = ret = 0;
4383 
4384 	return ret;
4385 }
4386 
4387 static const struct file_operations tracing_fops = {
4388 	.open		= tracing_open,
4389 	.read		= seq_read,
4390 	.write		= tracing_write_stub,
4391 	.llseek		= tracing_lseek,
4392 	.release	= tracing_release,
4393 };
4394 
4395 static const struct file_operations show_traces_fops = {
4396 	.open		= show_traces_open,
4397 	.read		= seq_read,
4398 	.release	= seq_release,
4399 	.llseek		= seq_lseek,
4400 };
4401 
4402 static ssize_t
4403 tracing_cpumask_read(struct file *filp, char __user *ubuf,
4404 		     size_t count, loff_t *ppos)
4405 {
4406 	struct trace_array *tr = file_inode(filp)->i_private;
4407 	char *mask_str;
4408 	int len;
4409 
4410 	len = snprintf(NULL, 0, "%*pb\n",
4411 		       cpumask_pr_args(tr->tracing_cpumask)) + 1;
4412 	mask_str = kmalloc(len, GFP_KERNEL);
4413 	if (!mask_str)
4414 		return -ENOMEM;
4415 
4416 	len = snprintf(mask_str, len, "%*pb\n",
4417 		       cpumask_pr_args(tr->tracing_cpumask));
4418 	if (len >= count) {
4419 		count = -EINVAL;
4420 		goto out_err;
4421 	}
4422 	count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
4423 
4424 out_err:
4425 	kfree(mask_str);
4426 
4427 	return count;
4428 }
4429 
4430 static ssize_t
4431 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
4432 		      size_t count, loff_t *ppos)
4433 {
4434 	struct trace_array *tr = file_inode(filp)->i_private;
4435 	cpumask_var_t tracing_cpumask_new;
4436 	int err, cpu;
4437 
4438 	if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
4439 		return -ENOMEM;
4440 
4441 	err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
4442 	if (err)
4443 		goto err_unlock;
4444 
4445 	local_irq_disable();
4446 	arch_spin_lock(&tr->max_lock);
4447 	for_each_tracing_cpu(cpu) {
4448 		/*
4449 		 * Increase/decrease the disabled counter if we are
4450 		 * about to flip a bit in the cpumask:
4451 		 */
4452 		if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
4453 				!cpumask_test_cpu(cpu, tracing_cpumask_new)) {
4454 			atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
4455 			ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
4456 		}
4457 		if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
4458 				cpumask_test_cpu(cpu, tracing_cpumask_new)) {
4459 			atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
4460 			ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
4461 		}
4462 	}
4463 	arch_spin_unlock(&tr->max_lock);
4464 	local_irq_enable();
4465 
4466 	cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
4467 	free_cpumask_var(tracing_cpumask_new);
4468 
4469 	return count;
4470 
4471 err_unlock:
4472 	free_cpumask_var(tracing_cpumask_new);
4473 
4474 	return err;
4475 }
4476 
4477 static const struct file_operations tracing_cpumask_fops = {
4478 	.open		= tracing_open_generic_tr,
4479 	.read		= tracing_cpumask_read,
4480 	.write		= tracing_cpumask_write,
4481 	.release	= tracing_release_generic_tr,
4482 	.llseek		= generic_file_llseek,
4483 };
4484 
4485 static int tracing_trace_options_show(struct seq_file *m, void *v)
4486 {
4487 	struct tracer_opt *trace_opts;
4488 	struct trace_array *tr = m->private;
4489 	u32 tracer_flags;
4490 	int i;
4491 
4492 	mutex_lock(&trace_types_lock);
4493 	tracer_flags = tr->current_trace->flags->val;
4494 	trace_opts = tr->current_trace->flags->opts;
4495 
4496 	for (i = 0; trace_options[i]; i++) {
4497 		if (tr->trace_flags & (1 << i))
4498 			seq_printf(m, "%s\n", trace_options[i]);
4499 		else
4500 			seq_printf(m, "no%s\n", trace_options[i]);
4501 	}
4502 
4503 	for (i = 0; trace_opts[i].name; i++) {
4504 		if (tracer_flags & trace_opts[i].bit)
4505 			seq_printf(m, "%s\n", trace_opts[i].name);
4506 		else
4507 			seq_printf(m, "no%s\n", trace_opts[i].name);
4508 	}
4509 	mutex_unlock(&trace_types_lock);
4510 
4511 	return 0;
4512 }
4513 
4514 static int __set_tracer_option(struct trace_array *tr,
4515 			       struct tracer_flags *tracer_flags,
4516 			       struct tracer_opt *opts, int neg)
4517 {
4518 	struct tracer *trace = tracer_flags->trace;
4519 	int ret;
4520 
4521 	ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
4522 	if (ret)
4523 		return ret;
4524 
4525 	if (neg)
4526 		tracer_flags->val &= ~opts->bit;
4527 	else
4528 		tracer_flags->val |= opts->bit;
4529 	return 0;
4530 }
4531 
4532 /* Try to assign a tracer specific option */
4533 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
4534 {
4535 	struct tracer *trace = tr->current_trace;
4536 	struct tracer_flags *tracer_flags = trace->flags;
4537 	struct tracer_opt *opts = NULL;
4538 	int i;
4539 
4540 	for (i = 0; tracer_flags->opts[i].name; i++) {
4541 		opts = &tracer_flags->opts[i];
4542 
4543 		if (strcmp(cmp, opts->name) == 0)
4544 			return __set_tracer_option(tr, trace->flags, opts, neg);
4545 	}
4546 
4547 	return -EINVAL;
4548 }
4549 
4550 /* Some tracers require overwrite to stay enabled */
4551 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
4552 {
4553 	if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
4554 		return -1;
4555 
4556 	return 0;
4557 }
4558 
4559 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
4560 {
4561 	/* do nothing if flag is already set */
4562 	if (!!(tr->trace_flags & mask) == !!enabled)
4563 		return 0;
4564 
4565 	/* Give the tracer a chance to approve the change */
4566 	if (tr->current_trace->flag_changed)
4567 		if (tr->current_trace->flag_changed(tr, mask, !!enabled))
4568 			return -EINVAL;
4569 
4570 	if (enabled)
4571 		tr->trace_flags |= mask;
4572 	else
4573 		tr->trace_flags &= ~mask;
4574 
4575 	if (mask == TRACE_ITER_RECORD_CMD)
4576 		trace_event_enable_cmd_record(enabled);
4577 
4578 	if (mask == TRACE_ITER_RECORD_TGID) {
4579 		if (!tgid_map)
4580 			tgid_map = kcalloc(PID_MAX_DEFAULT + 1,
4581 					   sizeof(*tgid_map),
4582 					   GFP_KERNEL);
4583 		if (!tgid_map) {
4584 			tr->trace_flags &= ~TRACE_ITER_RECORD_TGID;
4585 			return -ENOMEM;
4586 		}
4587 
4588 		trace_event_enable_tgid_record(enabled);
4589 	}
4590 
4591 	if (mask == TRACE_ITER_EVENT_FORK)
4592 		trace_event_follow_fork(tr, enabled);
4593 
4594 	if (mask == TRACE_ITER_FUNC_FORK)
4595 		ftrace_pid_follow_fork(tr, enabled);
4596 
4597 	if (mask == TRACE_ITER_OVERWRITE) {
4598 		ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
4599 #ifdef CONFIG_TRACER_MAX_TRACE
4600 		ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
4601 #endif
4602 	}
4603 
4604 	if (mask == TRACE_ITER_PRINTK) {
4605 		trace_printk_start_stop_comm(enabled);
4606 		trace_printk_control(enabled);
4607 	}
4608 
4609 	return 0;
4610 }
4611 
4612 static int trace_set_options(struct trace_array *tr, char *option)
4613 {
4614 	char *cmp;
4615 	int neg = 0;
4616 	int ret;
4617 	size_t orig_len = strlen(option);
4618 	int len;
4619 
4620 	cmp = strstrip(option);
4621 
4622 	len = str_has_prefix(cmp, "no");
4623 	if (len)
4624 		neg = 1;
4625 
4626 	cmp += len;
4627 
4628 	mutex_lock(&trace_types_lock);
4629 
4630 	ret = match_string(trace_options, -1, cmp);
4631 	/* If no option could be set, test the specific tracer options */
4632 	if (ret < 0)
4633 		ret = set_tracer_option(tr, cmp, neg);
4634 	else
4635 		ret = set_tracer_flag(tr, 1 << ret, !neg);
4636 
4637 	mutex_unlock(&trace_types_lock);
4638 
4639 	/*
4640 	 * If the first trailing whitespace is replaced with '\0' by strstrip,
4641 	 * turn it back into a space.
4642 	 */
4643 	if (orig_len > strlen(option))
4644 		option[strlen(option)] = ' ';
4645 
4646 	return ret;
4647 }
4648 
4649 static void __init apply_trace_boot_options(void)
4650 {
4651 	char *buf = trace_boot_options_buf;
4652 	char *option;
4653 
4654 	while (true) {
4655 		option = strsep(&buf, ",");
4656 
4657 		if (!option)
4658 			break;
4659 
4660 		if (*option)
4661 			trace_set_options(&global_trace, option);
4662 
4663 		/* Put back the comma to allow this to be called again */
4664 		if (buf)
4665 			*(buf - 1) = ',';
4666 	}
4667 }
4668 
4669 static ssize_t
4670 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
4671 			size_t cnt, loff_t *ppos)
4672 {
4673 	struct seq_file *m = filp->private_data;
4674 	struct trace_array *tr = m->private;
4675 	char buf[64];
4676 	int ret;
4677 
4678 	if (cnt >= sizeof(buf))
4679 		return -EINVAL;
4680 
4681 	if (copy_from_user(buf, ubuf, cnt))
4682 		return -EFAULT;
4683 
4684 	buf[cnt] = 0;
4685 
4686 	ret = trace_set_options(tr, buf);
4687 	if (ret < 0)
4688 		return ret;
4689 
4690 	*ppos += cnt;
4691 
4692 	return cnt;
4693 }
4694 
4695 static int tracing_trace_options_open(struct inode *inode, struct file *file)
4696 {
4697 	struct trace_array *tr = inode->i_private;
4698 	int ret;
4699 
4700 	if (tracing_disabled)
4701 		return -ENODEV;
4702 
4703 	if (trace_array_get(tr) < 0)
4704 		return -ENODEV;
4705 
4706 	ret = single_open(file, tracing_trace_options_show, inode->i_private);
4707 	if (ret < 0)
4708 		trace_array_put(tr);
4709 
4710 	return ret;
4711 }
4712 
4713 static const struct file_operations tracing_iter_fops = {
4714 	.open		= tracing_trace_options_open,
4715 	.read		= seq_read,
4716 	.llseek		= seq_lseek,
4717 	.release	= tracing_single_release_tr,
4718 	.write		= tracing_trace_options_write,
4719 };
4720 
4721 static const char readme_msg[] =
4722 	"tracing mini-HOWTO:\n\n"
4723 	"# echo 0 > tracing_on : quick way to disable tracing\n"
4724 	"# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
4725 	" Important files:\n"
4726 	"  trace\t\t\t- The static contents of the buffer\n"
4727 	"\t\t\t  To clear the buffer write into this file: echo > trace\n"
4728 	"  trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
4729 	"  current_tracer\t- function and latency tracers\n"
4730 	"  available_tracers\t- list of configured tracers for current_tracer\n"
4731 	"  error_log\t- error log for failed commands (that support it)\n"
4732 	"  buffer_size_kb\t- view and modify size of per cpu buffer\n"
4733 	"  buffer_total_size_kb  - view total size of all cpu buffers\n\n"
4734 	"  trace_clock\t\t-change the clock used to order events\n"
4735 	"       local:   Per cpu clock but may not be synced across CPUs\n"
4736 	"      global:   Synced across CPUs but slows tracing down.\n"
4737 	"     counter:   Not a clock, but just an increment\n"
4738 	"      uptime:   Jiffy counter from time of boot\n"
4739 	"        perf:   Same clock that perf events use\n"
4740 #ifdef CONFIG_X86_64
4741 	"     x86-tsc:   TSC cycle counter\n"
4742 #endif
4743 	"\n  timestamp_mode\t-view the mode used to timestamp events\n"
4744 	"       delta:   Delta difference against a buffer-wide timestamp\n"
4745 	"    absolute:   Absolute (standalone) timestamp\n"
4746 	"\n  trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
4747 	"\n  trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n"
4748 	"  tracing_cpumask\t- Limit which CPUs to trace\n"
4749 	"  instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
4750 	"\t\t\t  Remove sub-buffer with rmdir\n"
4751 	"  trace_options\t\t- Set format or modify how tracing happens\n"
4752 	"\t\t\t  Disable an option by prefixing 'no' to the\n"
4753 	"\t\t\t  option name\n"
4754 	"  saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
4755 #ifdef CONFIG_DYNAMIC_FTRACE
4756 	"\n  available_filter_functions - list of functions that can be filtered on\n"
4757 	"  set_ftrace_filter\t- echo function name in here to only trace these\n"
4758 	"\t\t\t  functions\n"
4759 	"\t     accepts: func_full_name or glob-matching-pattern\n"
4760 	"\t     modules: Can select a group via module\n"
4761 	"\t      Format: :mod:<module-name>\n"
4762 	"\t     example: echo :mod:ext3 > set_ftrace_filter\n"
4763 	"\t    triggers: a command to perform when function is hit\n"
4764 	"\t      Format: <function>:<trigger>[:count]\n"
4765 	"\t     trigger: traceon, traceoff\n"
4766 	"\t\t      enable_event:<system>:<event>\n"
4767 	"\t\t      disable_event:<system>:<event>\n"
4768 #ifdef CONFIG_STACKTRACE
4769 	"\t\t      stacktrace\n"
4770 #endif
4771 #ifdef CONFIG_TRACER_SNAPSHOT
4772 	"\t\t      snapshot\n"
4773 #endif
4774 	"\t\t      dump\n"
4775 	"\t\t      cpudump\n"
4776 	"\t     example: echo do_fault:traceoff > set_ftrace_filter\n"
4777 	"\t              echo do_trap:traceoff:3 > set_ftrace_filter\n"
4778 	"\t     The first one will disable tracing every time do_fault is hit\n"
4779 	"\t     The second will disable tracing at most 3 times when do_trap is hit\n"
4780 	"\t       The first time do trap is hit and it disables tracing, the\n"
4781 	"\t       counter will decrement to 2. If tracing is already disabled,\n"
4782 	"\t       the counter will not decrement. It only decrements when the\n"
4783 	"\t       trigger did work\n"
4784 	"\t     To remove trigger without count:\n"
4785 	"\t       echo '!<function>:<trigger> > set_ftrace_filter\n"
4786 	"\t     To remove trigger with a count:\n"
4787 	"\t       echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
4788 	"  set_ftrace_notrace\t- echo function name in here to never trace.\n"
4789 	"\t    accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
4790 	"\t    modules: Can select a group via module command :mod:\n"
4791 	"\t    Does not accept triggers\n"
4792 #endif /* CONFIG_DYNAMIC_FTRACE */
4793 #ifdef CONFIG_FUNCTION_TRACER
4794 	"  set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
4795 	"\t\t    (function)\n"
4796 #endif
4797 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
4798 	"  set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
4799 	"  set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
4800 	"  max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
4801 #endif
4802 #ifdef CONFIG_TRACER_SNAPSHOT
4803 	"\n  snapshot\t\t- Like 'trace' but shows the content of the static\n"
4804 	"\t\t\t  snapshot buffer. Read the contents for more\n"
4805 	"\t\t\t  information\n"
4806 #endif
4807 #ifdef CONFIG_STACK_TRACER
4808 	"  stack_trace\t\t- Shows the max stack trace when active\n"
4809 	"  stack_max_size\t- Shows current max stack size that was traced\n"
4810 	"\t\t\t  Write into this file to reset the max size (trigger a\n"
4811 	"\t\t\t  new trace)\n"
4812 #ifdef CONFIG_DYNAMIC_FTRACE
4813 	"  stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
4814 	"\t\t\t  traces\n"
4815 #endif
4816 #endif /* CONFIG_STACK_TRACER */
4817 #ifdef CONFIG_DYNAMIC_EVENTS
4818 	"  dynamic_events\t\t- Create/append/remove/show the generic dynamic events\n"
4819 	"\t\t\t  Write into this file to define/undefine new trace events.\n"
4820 #endif
4821 #ifdef CONFIG_KPROBE_EVENTS
4822 	"  kprobe_events\t\t- Create/append/remove/show the kernel dynamic events\n"
4823 	"\t\t\t  Write into this file to define/undefine new trace events.\n"
4824 #endif
4825 #ifdef CONFIG_UPROBE_EVENTS
4826 	"  uprobe_events\t\t- Create/append/remove/show the userspace dynamic events\n"
4827 	"\t\t\t  Write into this file to define/undefine new trace events.\n"
4828 #endif
4829 #if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS)
4830 	"\t  accepts: event-definitions (one definition per line)\n"
4831 	"\t   Format: p[:[<group>/]<event>] <place> [<args>]\n"
4832 	"\t           r[maxactive][:[<group>/]<event>] <place> [<args>]\n"
4833 #ifdef CONFIG_HIST_TRIGGERS
4834 	"\t           s:[synthetic/]<event> <field> [<field>]\n"
4835 #endif
4836 	"\t           -:[<group>/]<event>\n"
4837 #ifdef CONFIG_KPROBE_EVENTS
4838 	"\t    place: [<module>:]<symbol>[+<offset>]|<memaddr>\n"
4839   "place (kretprobe): [<module>:]<symbol>[+<offset>]|<memaddr>\n"
4840 #endif
4841 #ifdef CONFIG_UPROBE_EVENTS
4842   "   place (uprobe): <path>:<offset>[(ref_ctr_offset)]\n"
4843 #endif
4844 	"\t     args: <name>=fetcharg[:type]\n"
4845 	"\t fetcharg: %<register>, @<address>, @<symbol>[+|-<offset>],\n"
4846 #ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
4847 	"\t           $stack<index>, $stack, $retval, $comm, $arg<N>,\n"
4848 #else
4849 	"\t           $stack<index>, $stack, $retval, $comm,\n"
4850 #endif
4851 	"\t           +|-[u]<offset>(<fetcharg>), \\imm-value, \\\"imm-string\"\n"
4852 	"\t     type: s8/16/32/64, u8/16/32/64, x8/16/32/64, string, symbol,\n"
4853 	"\t           b<bit-width>@<bit-offset>/<container-size>, ustring,\n"
4854 	"\t           <type>\\[<array-size>\\]\n"
4855 #ifdef CONFIG_HIST_TRIGGERS
4856 	"\t    field: <stype> <name>;\n"
4857 	"\t    stype: u8/u16/u32/u64, s8/s16/s32/s64, pid_t,\n"
4858 	"\t           [unsigned] char/int/long\n"
4859 #endif
4860 #endif
4861 	"  events/\t\t- Directory containing all trace event subsystems:\n"
4862 	"      enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
4863 	"  events/<system>/\t- Directory containing all trace events for <system>:\n"
4864 	"      enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
4865 	"\t\t\t  events\n"
4866 	"      filter\t\t- If set, only events passing filter are traced\n"
4867 	"  events/<system>/<event>/\t- Directory containing control files for\n"
4868 	"\t\t\t  <event>:\n"
4869 	"      enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
4870 	"      filter\t\t- If set, only events passing filter are traced\n"
4871 	"      trigger\t\t- If set, a command to perform when event is hit\n"
4872 	"\t    Format: <trigger>[:count][if <filter>]\n"
4873 	"\t   trigger: traceon, traceoff\n"
4874 	"\t            enable_event:<system>:<event>\n"
4875 	"\t            disable_event:<system>:<event>\n"
4876 #ifdef CONFIG_HIST_TRIGGERS
4877 	"\t            enable_hist:<system>:<event>\n"
4878 	"\t            disable_hist:<system>:<event>\n"
4879 #endif
4880 #ifdef CONFIG_STACKTRACE
4881 	"\t\t    stacktrace\n"
4882 #endif
4883 #ifdef CONFIG_TRACER_SNAPSHOT
4884 	"\t\t    snapshot\n"
4885 #endif
4886 #ifdef CONFIG_HIST_TRIGGERS
4887 	"\t\t    hist (see below)\n"
4888 #endif
4889 	"\t   example: echo traceoff > events/block/block_unplug/trigger\n"
4890 	"\t            echo traceoff:3 > events/block/block_unplug/trigger\n"
4891 	"\t            echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
4892 	"\t                  events/block/block_unplug/trigger\n"
4893 	"\t   The first disables tracing every time block_unplug is hit.\n"
4894 	"\t   The second disables tracing the first 3 times block_unplug is hit.\n"
4895 	"\t   The third enables the kmalloc event the first 3 times block_unplug\n"
4896 	"\t     is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
4897 	"\t   Like function triggers, the counter is only decremented if it\n"
4898 	"\t    enabled or disabled tracing.\n"
4899 	"\t   To remove a trigger without a count:\n"
4900 	"\t     echo '!<trigger> > <system>/<event>/trigger\n"
4901 	"\t   To remove a trigger with a count:\n"
4902 	"\t     echo '!<trigger>:0 > <system>/<event>/trigger\n"
4903 	"\t   Filters can be ignored when removing a trigger.\n"
4904 #ifdef CONFIG_HIST_TRIGGERS
4905 	"      hist trigger\t- If set, event hits are aggregated into a hash table\n"
4906 	"\t    Format: hist:keys=<field1[,field2,...]>\n"
4907 	"\t            [:values=<field1[,field2,...]>]\n"
4908 	"\t            [:sort=<field1[,field2,...]>]\n"
4909 	"\t            [:size=#entries]\n"
4910 	"\t            [:pause][:continue][:clear]\n"
4911 	"\t            [:name=histname1]\n"
4912 	"\t            [:<handler>.<action>]\n"
4913 	"\t            [if <filter>]\n\n"
4914 	"\t    When a matching event is hit, an entry is added to a hash\n"
4915 	"\t    table using the key(s) and value(s) named, and the value of a\n"
4916 	"\t    sum called 'hitcount' is incremented.  Keys and values\n"
4917 	"\t    correspond to fields in the event's format description.  Keys\n"
4918 	"\t    can be any field, or the special string 'stacktrace'.\n"
4919 	"\t    Compound keys consisting of up to two fields can be specified\n"
4920 	"\t    by the 'keys' keyword.  Values must correspond to numeric\n"
4921 	"\t    fields.  Sort keys consisting of up to two fields can be\n"
4922 	"\t    specified using the 'sort' keyword.  The sort direction can\n"
4923 	"\t    be modified by appending '.descending' or '.ascending' to a\n"
4924 	"\t    sort field.  The 'size' parameter can be used to specify more\n"
4925 	"\t    or fewer than the default 2048 entries for the hashtable size.\n"
4926 	"\t    If a hist trigger is given a name using the 'name' parameter,\n"
4927 	"\t    its histogram data will be shared with other triggers of the\n"
4928 	"\t    same name, and trigger hits will update this common data.\n\n"
4929 	"\t    Reading the 'hist' file for the event will dump the hash\n"
4930 	"\t    table in its entirety to stdout.  If there are multiple hist\n"
4931 	"\t    triggers attached to an event, there will be a table for each\n"
4932 	"\t    trigger in the output.  The table displayed for a named\n"
4933 	"\t    trigger will be the same as any other instance having the\n"
4934 	"\t    same name.  The default format used to display a given field\n"
4935 	"\t    can be modified by appending any of the following modifiers\n"
4936 	"\t    to the field name, as applicable:\n\n"
4937 	"\t            .hex        display a number as a hex value\n"
4938 	"\t            .sym        display an address as a symbol\n"
4939 	"\t            .sym-offset display an address as a symbol and offset\n"
4940 	"\t            .execname   display a common_pid as a program name\n"
4941 	"\t            .syscall    display a syscall id as a syscall name\n"
4942 	"\t            .log2       display log2 value rather than raw number\n"
4943 	"\t            .usecs      display a common_timestamp in microseconds\n\n"
4944 	"\t    The 'pause' parameter can be used to pause an existing hist\n"
4945 	"\t    trigger or to start a hist trigger but not log any events\n"
4946 	"\t    until told to do so.  'continue' can be used to start or\n"
4947 	"\t    restart a paused hist trigger.\n\n"
4948 	"\t    The 'clear' parameter will clear the contents of a running\n"
4949 	"\t    hist trigger and leave its current paused/active state\n"
4950 	"\t    unchanged.\n\n"
4951 	"\t    The enable_hist and disable_hist triggers can be used to\n"
4952 	"\t    have one event conditionally start and stop another event's\n"
4953 	"\t    already-attached hist trigger.  The syntax is analogous to\n"
4954 	"\t    the enable_event and disable_event triggers.\n\n"
4955 	"\t    Hist trigger handlers and actions are executed whenever a\n"
4956 	"\t    a histogram entry is added or updated.  They take the form:\n\n"
4957 	"\t        <handler>.<action>\n\n"
4958 	"\t    The available handlers are:\n\n"
4959 	"\t        onmatch(matching.event)  - invoke on addition or update\n"
4960 	"\t        onmax(var)               - invoke if var exceeds current max\n"
4961 	"\t        onchange(var)            - invoke action if var changes\n\n"
4962 	"\t    The available actions are:\n\n"
4963 	"\t        trace(<synthetic_event>,param list)  - generate synthetic event\n"
4964 	"\t        save(field,...)                      - save current event fields\n"
4965 #ifdef CONFIG_TRACER_SNAPSHOT
4966 	"\t        snapshot()                           - snapshot the trace buffer\n"
4967 #endif
4968 #endif
4969 ;
4970 
4971 static ssize_t
4972 tracing_readme_read(struct file *filp, char __user *ubuf,
4973 		       size_t cnt, loff_t *ppos)
4974 {
4975 	return simple_read_from_buffer(ubuf, cnt, ppos,
4976 					readme_msg, strlen(readme_msg));
4977 }
4978 
4979 static const struct file_operations tracing_readme_fops = {
4980 	.open		= tracing_open_generic,
4981 	.read		= tracing_readme_read,
4982 	.llseek		= generic_file_llseek,
4983 };
4984 
4985 static void *saved_tgids_next(struct seq_file *m, void *v, loff_t *pos)
4986 {
4987 	int *ptr = v;
4988 
4989 	if (*pos || m->count)
4990 		ptr++;
4991 
4992 	(*pos)++;
4993 
4994 	for (; ptr <= &tgid_map[PID_MAX_DEFAULT]; ptr++) {
4995 		if (trace_find_tgid(*ptr))
4996 			return ptr;
4997 	}
4998 
4999 	return NULL;
5000 }
5001 
5002 static void *saved_tgids_start(struct seq_file *m, loff_t *pos)
5003 {
5004 	void *v;
5005 	loff_t l = 0;
5006 
5007 	if (!tgid_map)
5008 		return NULL;
5009 
5010 	v = &tgid_map[0];
5011 	while (l <= *pos) {
5012 		v = saved_tgids_next(m, v, &l);
5013 		if (!v)
5014 			return NULL;
5015 	}
5016 
5017 	return v;
5018 }
5019 
5020 static void saved_tgids_stop(struct seq_file *m, void *v)
5021 {
5022 }
5023 
5024 static int saved_tgids_show(struct seq_file *m, void *v)
5025 {
5026 	int pid = (int *)v - tgid_map;
5027 
5028 	seq_printf(m, "%d %d\n", pid, trace_find_tgid(pid));
5029 	return 0;
5030 }
5031 
5032 static const struct seq_operations tracing_saved_tgids_seq_ops = {
5033 	.start		= saved_tgids_start,
5034 	.stop		= saved_tgids_stop,
5035 	.next		= saved_tgids_next,
5036 	.show		= saved_tgids_show,
5037 };
5038 
5039 static int tracing_saved_tgids_open(struct inode *inode, struct file *filp)
5040 {
5041 	if (tracing_disabled)
5042 		return -ENODEV;
5043 
5044 	return seq_open(filp, &tracing_saved_tgids_seq_ops);
5045 }
5046 
5047 
5048 static const struct file_operations tracing_saved_tgids_fops = {
5049 	.open		= tracing_saved_tgids_open,
5050 	.read		= seq_read,
5051 	.llseek		= seq_lseek,
5052 	.release	= seq_release,
5053 };
5054 
5055 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
5056 {
5057 	unsigned int *ptr = v;
5058 
5059 	if (*pos || m->count)
5060 		ptr++;
5061 
5062 	(*pos)++;
5063 
5064 	for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
5065 	     ptr++) {
5066 		if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
5067 			continue;
5068 
5069 		return ptr;
5070 	}
5071 
5072 	return NULL;
5073 }
5074 
5075 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
5076 {
5077 	void *v;
5078 	loff_t l = 0;
5079 
5080 	preempt_disable();
5081 	arch_spin_lock(&trace_cmdline_lock);
5082 
5083 	v = &savedcmd->map_cmdline_to_pid[0];
5084 	while (l <= *pos) {
5085 		v = saved_cmdlines_next(m, v, &l);
5086 		if (!v)
5087 			return NULL;
5088 	}
5089 
5090 	return v;
5091 }
5092 
5093 static void saved_cmdlines_stop(struct seq_file *m, void *v)
5094 {
5095 	arch_spin_unlock(&trace_cmdline_lock);
5096 	preempt_enable();
5097 }
5098 
5099 static int saved_cmdlines_show(struct seq_file *m, void *v)
5100 {
5101 	char buf[TASK_COMM_LEN];
5102 	unsigned int *pid = v;
5103 
5104 	__trace_find_cmdline(*pid, buf);
5105 	seq_printf(m, "%d %s\n", *pid, buf);
5106 	return 0;
5107 }
5108 
5109 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
5110 	.start		= saved_cmdlines_start,
5111 	.next		= saved_cmdlines_next,
5112 	.stop		= saved_cmdlines_stop,
5113 	.show		= saved_cmdlines_show,
5114 };
5115 
5116 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
5117 {
5118 	if (tracing_disabled)
5119 		return -ENODEV;
5120 
5121 	return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
5122 }
5123 
5124 static const struct file_operations tracing_saved_cmdlines_fops = {
5125 	.open		= tracing_saved_cmdlines_open,
5126 	.read		= seq_read,
5127 	.llseek		= seq_lseek,
5128 	.release	= seq_release,
5129 };
5130 
5131 static ssize_t
5132 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
5133 				 size_t cnt, loff_t *ppos)
5134 {
5135 	char buf[64];
5136 	int r;
5137 
5138 	arch_spin_lock(&trace_cmdline_lock);
5139 	r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
5140 	arch_spin_unlock(&trace_cmdline_lock);
5141 
5142 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5143 }
5144 
5145 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
5146 {
5147 	kfree(s->saved_cmdlines);
5148 	kfree(s->map_cmdline_to_pid);
5149 	kfree(s);
5150 }
5151 
5152 static int tracing_resize_saved_cmdlines(unsigned int val)
5153 {
5154 	struct saved_cmdlines_buffer *s, *savedcmd_temp;
5155 
5156 	s = kmalloc(sizeof(*s), GFP_KERNEL);
5157 	if (!s)
5158 		return -ENOMEM;
5159 
5160 	if (allocate_cmdlines_buffer(val, s) < 0) {
5161 		kfree(s);
5162 		return -ENOMEM;
5163 	}
5164 
5165 	arch_spin_lock(&trace_cmdline_lock);
5166 	savedcmd_temp = savedcmd;
5167 	savedcmd = s;
5168 	arch_spin_unlock(&trace_cmdline_lock);
5169 	free_saved_cmdlines_buffer(savedcmd_temp);
5170 
5171 	return 0;
5172 }
5173 
5174 static ssize_t
5175 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
5176 				  size_t cnt, loff_t *ppos)
5177 {
5178 	unsigned long val;
5179 	int ret;
5180 
5181 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5182 	if (ret)
5183 		return ret;
5184 
5185 	/* must have at least 1 entry or less than PID_MAX_DEFAULT */
5186 	if (!val || val > PID_MAX_DEFAULT)
5187 		return -EINVAL;
5188 
5189 	ret = tracing_resize_saved_cmdlines((unsigned int)val);
5190 	if (ret < 0)
5191 		return ret;
5192 
5193 	*ppos += cnt;
5194 
5195 	return cnt;
5196 }
5197 
5198 static const struct file_operations tracing_saved_cmdlines_size_fops = {
5199 	.open		= tracing_open_generic,
5200 	.read		= tracing_saved_cmdlines_size_read,
5201 	.write		= tracing_saved_cmdlines_size_write,
5202 };
5203 
5204 #ifdef CONFIG_TRACE_EVAL_MAP_FILE
5205 static union trace_eval_map_item *
5206 update_eval_map(union trace_eval_map_item *ptr)
5207 {
5208 	if (!ptr->map.eval_string) {
5209 		if (ptr->tail.next) {
5210 			ptr = ptr->tail.next;
5211 			/* Set ptr to the next real item (skip head) */
5212 			ptr++;
5213 		} else
5214 			return NULL;
5215 	}
5216 	return ptr;
5217 }
5218 
5219 static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos)
5220 {
5221 	union trace_eval_map_item *ptr = v;
5222 
5223 	/*
5224 	 * Paranoid! If ptr points to end, we don't want to increment past it.
5225 	 * This really should never happen.
5226 	 */
5227 	ptr = update_eval_map(ptr);
5228 	if (WARN_ON_ONCE(!ptr))
5229 		return NULL;
5230 
5231 	ptr++;
5232 
5233 	(*pos)++;
5234 
5235 	ptr = update_eval_map(ptr);
5236 
5237 	return ptr;
5238 }
5239 
5240 static void *eval_map_start(struct seq_file *m, loff_t *pos)
5241 {
5242 	union trace_eval_map_item *v;
5243 	loff_t l = 0;
5244 
5245 	mutex_lock(&trace_eval_mutex);
5246 
5247 	v = trace_eval_maps;
5248 	if (v)
5249 		v++;
5250 
5251 	while (v && l < *pos) {
5252 		v = eval_map_next(m, v, &l);
5253 	}
5254 
5255 	return v;
5256 }
5257 
5258 static void eval_map_stop(struct seq_file *m, void *v)
5259 {
5260 	mutex_unlock(&trace_eval_mutex);
5261 }
5262 
5263 static int eval_map_show(struct seq_file *m, void *v)
5264 {
5265 	union trace_eval_map_item *ptr = v;
5266 
5267 	seq_printf(m, "%s %ld (%s)\n",
5268 		   ptr->map.eval_string, ptr->map.eval_value,
5269 		   ptr->map.system);
5270 
5271 	return 0;
5272 }
5273 
5274 static const struct seq_operations tracing_eval_map_seq_ops = {
5275 	.start		= eval_map_start,
5276 	.next		= eval_map_next,
5277 	.stop		= eval_map_stop,
5278 	.show		= eval_map_show,
5279 };
5280 
5281 static int tracing_eval_map_open(struct inode *inode, struct file *filp)
5282 {
5283 	if (tracing_disabled)
5284 		return -ENODEV;
5285 
5286 	return seq_open(filp, &tracing_eval_map_seq_ops);
5287 }
5288 
5289 static const struct file_operations tracing_eval_map_fops = {
5290 	.open		= tracing_eval_map_open,
5291 	.read		= seq_read,
5292 	.llseek		= seq_lseek,
5293 	.release	= seq_release,
5294 };
5295 
5296 static inline union trace_eval_map_item *
5297 trace_eval_jmp_to_tail(union trace_eval_map_item *ptr)
5298 {
5299 	/* Return tail of array given the head */
5300 	return ptr + ptr->head.length + 1;
5301 }
5302 
5303 static void
5304 trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,
5305 			   int len)
5306 {
5307 	struct trace_eval_map **stop;
5308 	struct trace_eval_map **map;
5309 	union trace_eval_map_item *map_array;
5310 	union trace_eval_map_item *ptr;
5311 
5312 	stop = start + len;
5313 
5314 	/*
5315 	 * The trace_eval_maps contains the map plus a head and tail item,
5316 	 * where the head holds the module and length of array, and the
5317 	 * tail holds a pointer to the next list.
5318 	 */
5319 	map_array = kmalloc_array(len + 2, sizeof(*map_array), GFP_KERNEL);
5320 	if (!map_array) {
5321 		pr_warn("Unable to allocate trace eval mapping\n");
5322 		return;
5323 	}
5324 
5325 	mutex_lock(&trace_eval_mutex);
5326 
5327 	if (!trace_eval_maps)
5328 		trace_eval_maps = map_array;
5329 	else {
5330 		ptr = trace_eval_maps;
5331 		for (;;) {
5332 			ptr = trace_eval_jmp_to_tail(ptr);
5333 			if (!ptr->tail.next)
5334 				break;
5335 			ptr = ptr->tail.next;
5336 
5337 		}
5338 		ptr->tail.next = map_array;
5339 	}
5340 	map_array->head.mod = mod;
5341 	map_array->head.length = len;
5342 	map_array++;
5343 
5344 	for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
5345 		map_array->map = **map;
5346 		map_array++;
5347 	}
5348 	memset(map_array, 0, sizeof(*map_array));
5349 
5350 	mutex_unlock(&trace_eval_mutex);
5351 }
5352 
5353 static void trace_create_eval_file(struct dentry *d_tracer)
5354 {
5355 	trace_create_file("eval_map", 0444, d_tracer,
5356 			  NULL, &tracing_eval_map_fops);
5357 }
5358 
5359 #else /* CONFIG_TRACE_EVAL_MAP_FILE */
5360 static inline void trace_create_eval_file(struct dentry *d_tracer) { }
5361 static inline void trace_insert_eval_map_file(struct module *mod,
5362 			      struct trace_eval_map **start, int len) { }
5363 #endif /* !CONFIG_TRACE_EVAL_MAP_FILE */
5364 
5365 static void trace_insert_eval_map(struct module *mod,
5366 				  struct trace_eval_map **start, int len)
5367 {
5368 	struct trace_eval_map **map;
5369 
5370 	if (len <= 0)
5371 		return;
5372 
5373 	map = start;
5374 
5375 	trace_event_eval_update(map, len);
5376 
5377 	trace_insert_eval_map_file(mod, start, len);
5378 }
5379 
5380 static ssize_t
5381 tracing_set_trace_read(struct file *filp, char __user *ubuf,
5382 		       size_t cnt, loff_t *ppos)
5383 {
5384 	struct trace_array *tr = filp->private_data;
5385 	char buf[MAX_TRACER_SIZE+2];
5386 	int r;
5387 
5388 	mutex_lock(&trace_types_lock);
5389 	r = sprintf(buf, "%s\n", tr->current_trace->name);
5390 	mutex_unlock(&trace_types_lock);
5391 
5392 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5393 }
5394 
5395 int tracer_init(struct tracer *t, struct trace_array *tr)
5396 {
5397 	tracing_reset_online_cpus(&tr->trace_buffer);
5398 	return t->init(tr);
5399 }
5400 
5401 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
5402 {
5403 	int cpu;
5404 
5405 	for_each_tracing_cpu(cpu)
5406 		per_cpu_ptr(buf->data, cpu)->entries = val;
5407 }
5408 
5409 #ifdef CONFIG_TRACER_MAX_TRACE
5410 /* resize @tr's buffer to the size of @size_tr's entries */
5411 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
5412 					struct trace_buffer *size_buf, int cpu_id)
5413 {
5414 	int cpu, ret = 0;
5415 
5416 	if (cpu_id == RING_BUFFER_ALL_CPUS) {
5417 		for_each_tracing_cpu(cpu) {
5418 			ret = ring_buffer_resize(trace_buf->buffer,
5419 				 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
5420 			if (ret < 0)
5421 				break;
5422 			per_cpu_ptr(trace_buf->data, cpu)->entries =
5423 				per_cpu_ptr(size_buf->data, cpu)->entries;
5424 		}
5425 	} else {
5426 		ret = ring_buffer_resize(trace_buf->buffer,
5427 				 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
5428 		if (ret == 0)
5429 			per_cpu_ptr(trace_buf->data, cpu_id)->entries =
5430 				per_cpu_ptr(size_buf->data, cpu_id)->entries;
5431 	}
5432 
5433 	return ret;
5434 }
5435 #endif /* CONFIG_TRACER_MAX_TRACE */
5436 
5437 static int __tracing_resize_ring_buffer(struct trace_array *tr,
5438 					unsigned long size, int cpu)
5439 {
5440 	int ret;
5441 
5442 	/*
5443 	 * If kernel or user changes the size of the ring buffer
5444 	 * we use the size that was given, and we can forget about
5445 	 * expanding it later.
5446 	 */
5447 	ring_buffer_expanded = true;
5448 
5449 	/* May be called before buffers are initialized */
5450 	if (!tr->trace_buffer.buffer)
5451 		return 0;
5452 
5453 	ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
5454 	if (ret < 0)
5455 		return ret;
5456 
5457 #ifdef CONFIG_TRACER_MAX_TRACE
5458 	if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
5459 	    !tr->current_trace->use_max_tr)
5460 		goto out;
5461 
5462 	ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
5463 	if (ret < 0) {
5464 		int r = resize_buffer_duplicate_size(&tr->trace_buffer,
5465 						     &tr->trace_buffer, cpu);
5466 		if (r < 0) {
5467 			/*
5468 			 * AARGH! We are left with different
5469 			 * size max buffer!!!!
5470 			 * The max buffer is our "snapshot" buffer.
5471 			 * When a tracer needs a snapshot (one of the
5472 			 * latency tracers), it swaps the max buffer
5473 			 * with the saved snap shot. We succeeded to
5474 			 * update the size of the main buffer, but failed to
5475 			 * update the size of the max buffer. But when we tried
5476 			 * to reset the main buffer to the original size, we
5477 			 * failed there too. This is very unlikely to
5478 			 * happen, but if it does, warn and kill all
5479 			 * tracing.
5480 			 */
5481 			WARN_ON(1);
5482 			tracing_disabled = 1;
5483 		}
5484 		return ret;
5485 	}
5486 
5487 	if (cpu == RING_BUFFER_ALL_CPUS)
5488 		set_buffer_entries(&tr->max_buffer, size);
5489 	else
5490 		per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
5491 
5492  out:
5493 #endif /* CONFIG_TRACER_MAX_TRACE */
5494 
5495 	if (cpu == RING_BUFFER_ALL_CPUS)
5496 		set_buffer_entries(&tr->trace_buffer, size);
5497 	else
5498 		per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
5499 
5500 	return ret;
5501 }
5502 
5503 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
5504 					  unsigned long size, int cpu_id)
5505 {
5506 	int ret = size;
5507 
5508 	mutex_lock(&trace_types_lock);
5509 
5510 	if (cpu_id != RING_BUFFER_ALL_CPUS) {
5511 		/* make sure, this cpu is enabled in the mask */
5512 		if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
5513 			ret = -EINVAL;
5514 			goto out;
5515 		}
5516 	}
5517 
5518 	ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
5519 	if (ret < 0)
5520 		ret = -ENOMEM;
5521 
5522 out:
5523 	mutex_unlock(&trace_types_lock);
5524 
5525 	return ret;
5526 }
5527 
5528 
5529 /**
5530  * tracing_update_buffers - used by tracing facility to expand ring buffers
5531  *
5532  * To save on memory when the tracing is never used on a system with it
5533  * configured in. The ring buffers are set to a minimum size. But once
5534  * a user starts to use the tracing facility, then they need to grow
5535  * to their default size.
5536  *
5537  * This function is to be called when a tracer is about to be used.
5538  */
5539 int tracing_update_buffers(void)
5540 {
5541 	int ret = 0;
5542 
5543 	mutex_lock(&trace_types_lock);
5544 	if (!ring_buffer_expanded)
5545 		ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
5546 						RING_BUFFER_ALL_CPUS);
5547 	mutex_unlock(&trace_types_lock);
5548 
5549 	return ret;
5550 }
5551 
5552 struct trace_option_dentry;
5553 
5554 static void
5555 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
5556 
5557 /*
5558  * Used to clear out the tracer before deletion of an instance.
5559  * Must have trace_types_lock held.
5560  */
5561 static void tracing_set_nop(struct trace_array *tr)
5562 {
5563 	if (tr->current_trace == &nop_trace)
5564 		return;
5565 
5566 	tr->current_trace->enabled--;
5567 
5568 	if (tr->current_trace->reset)
5569 		tr->current_trace->reset(tr);
5570 
5571 	tr->current_trace = &nop_trace;
5572 }
5573 
5574 static void add_tracer_options(struct trace_array *tr, struct tracer *t)
5575 {
5576 	/* Only enable if the directory has been created already. */
5577 	if (!tr->dir)
5578 		return;
5579 
5580 	create_trace_option_files(tr, t);
5581 }
5582 
5583 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
5584 {
5585 	struct tracer *t;
5586 #ifdef CONFIG_TRACER_MAX_TRACE
5587 	bool had_max_tr;
5588 #endif
5589 	int ret = 0;
5590 
5591 	mutex_lock(&trace_types_lock);
5592 
5593 	if (!ring_buffer_expanded) {
5594 		ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
5595 						RING_BUFFER_ALL_CPUS);
5596 		if (ret < 0)
5597 			goto out;
5598 		ret = 0;
5599 	}
5600 
5601 	for (t = trace_types; t; t = t->next) {
5602 		if (strcmp(t->name, buf) == 0)
5603 			break;
5604 	}
5605 	if (!t) {
5606 		ret = -EINVAL;
5607 		goto out;
5608 	}
5609 	if (t == tr->current_trace)
5610 		goto out;
5611 
5612 #ifdef CONFIG_TRACER_SNAPSHOT
5613 	if (t->use_max_tr) {
5614 		arch_spin_lock(&tr->max_lock);
5615 		if (tr->cond_snapshot)
5616 			ret = -EBUSY;
5617 		arch_spin_unlock(&tr->max_lock);
5618 		if (ret)
5619 			goto out;
5620 	}
5621 #endif
5622 	/* Some tracers won't work on kernel command line */
5623 	if (system_state < SYSTEM_RUNNING && t->noboot) {
5624 		pr_warn("Tracer '%s' is not allowed on command line, ignored\n",
5625 			t->name);
5626 		goto out;
5627 	}
5628 
5629 	/* Some tracers are only allowed for the top level buffer */
5630 	if (!trace_ok_for_array(t, tr)) {
5631 		ret = -EINVAL;
5632 		goto out;
5633 	}
5634 
5635 	/* If trace pipe files are being read, we can't change the tracer */
5636 	if (tr->current_trace->ref) {
5637 		ret = -EBUSY;
5638 		goto out;
5639 	}
5640 
5641 	trace_branch_disable();
5642 
5643 	tr->current_trace->enabled--;
5644 
5645 	if (tr->current_trace->reset)
5646 		tr->current_trace->reset(tr);
5647 
5648 	/* Current trace needs to be nop_trace before synchronize_rcu */
5649 	tr->current_trace = &nop_trace;
5650 
5651 #ifdef CONFIG_TRACER_MAX_TRACE
5652 	had_max_tr = tr->allocated_snapshot;
5653 
5654 	if (had_max_tr && !t->use_max_tr) {
5655 		/*
5656 		 * We need to make sure that the update_max_tr sees that
5657 		 * current_trace changed to nop_trace to keep it from
5658 		 * swapping the buffers after we resize it.
5659 		 * The update_max_tr is called from interrupts disabled
5660 		 * so a synchronized_sched() is sufficient.
5661 		 */
5662 		synchronize_rcu();
5663 		free_snapshot(tr);
5664 	}
5665 #endif
5666 
5667 #ifdef CONFIG_TRACER_MAX_TRACE
5668 	if (t->use_max_tr && !had_max_tr) {
5669 		ret = tracing_alloc_snapshot_instance(tr);
5670 		if (ret < 0)
5671 			goto out;
5672 	}
5673 #endif
5674 
5675 	if (t->init) {
5676 		ret = tracer_init(t, tr);
5677 		if (ret)
5678 			goto out;
5679 	}
5680 
5681 	tr->current_trace = t;
5682 	tr->current_trace->enabled++;
5683 	trace_branch_enable(tr);
5684  out:
5685 	mutex_unlock(&trace_types_lock);
5686 
5687 	return ret;
5688 }
5689 
5690 static ssize_t
5691 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
5692 			size_t cnt, loff_t *ppos)
5693 {
5694 	struct trace_array *tr = filp->private_data;
5695 	char buf[MAX_TRACER_SIZE+1];
5696 	int i;
5697 	size_t ret;
5698 	int err;
5699 
5700 	ret = cnt;
5701 
5702 	if (cnt > MAX_TRACER_SIZE)
5703 		cnt = MAX_TRACER_SIZE;
5704 
5705 	if (copy_from_user(buf, ubuf, cnt))
5706 		return -EFAULT;
5707 
5708 	buf[cnt] = 0;
5709 
5710 	/* strip ending whitespace. */
5711 	for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
5712 		buf[i] = 0;
5713 
5714 	err = tracing_set_tracer(tr, buf);
5715 	if (err)
5716 		return err;
5717 
5718 	*ppos += ret;
5719 
5720 	return ret;
5721 }
5722 
5723 static ssize_t
5724 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
5725 		   size_t cnt, loff_t *ppos)
5726 {
5727 	char buf[64];
5728 	int r;
5729 
5730 	r = snprintf(buf, sizeof(buf), "%ld\n",
5731 		     *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
5732 	if (r > sizeof(buf))
5733 		r = sizeof(buf);
5734 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5735 }
5736 
5737 static ssize_t
5738 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
5739 		    size_t cnt, loff_t *ppos)
5740 {
5741 	unsigned long val;
5742 	int ret;
5743 
5744 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5745 	if (ret)
5746 		return ret;
5747 
5748 	*ptr = val * 1000;
5749 
5750 	return cnt;
5751 }
5752 
5753 static ssize_t
5754 tracing_thresh_read(struct file *filp, char __user *ubuf,
5755 		    size_t cnt, loff_t *ppos)
5756 {
5757 	return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
5758 }
5759 
5760 static ssize_t
5761 tracing_thresh_write(struct file *filp, const char __user *ubuf,
5762 		     size_t cnt, loff_t *ppos)
5763 {
5764 	struct trace_array *tr = filp->private_data;
5765 	int ret;
5766 
5767 	mutex_lock(&trace_types_lock);
5768 	ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
5769 	if (ret < 0)
5770 		goto out;
5771 
5772 	if (tr->current_trace->update_thresh) {
5773 		ret = tr->current_trace->update_thresh(tr);
5774 		if (ret < 0)
5775 			goto out;
5776 	}
5777 
5778 	ret = cnt;
5779 out:
5780 	mutex_unlock(&trace_types_lock);
5781 
5782 	return ret;
5783 }
5784 
5785 #if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
5786 
5787 static ssize_t
5788 tracing_max_lat_read(struct file *filp, char __user *ubuf,
5789 		     size_t cnt, loff_t *ppos)
5790 {
5791 	return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
5792 }
5793 
5794 static ssize_t
5795 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
5796 		      size_t cnt, loff_t *ppos)
5797 {
5798 	return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
5799 }
5800 
5801 #endif
5802 
5803 static int tracing_open_pipe(struct inode *inode, struct file *filp)
5804 {
5805 	struct trace_array *tr = inode->i_private;
5806 	struct trace_iterator *iter;
5807 	int ret = 0;
5808 
5809 	if (tracing_disabled)
5810 		return -ENODEV;
5811 
5812 	if (trace_array_get(tr) < 0)
5813 		return -ENODEV;
5814 
5815 	mutex_lock(&trace_types_lock);
5816 
5817 	/* create a buffer to store the information to pass to userspace */
5818 	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5819 	if (!iter) {
5820 		ret = -ENOMEM;
5821 		__trace_array_put(tr);
5822 		goto out;
5823 	}
5824 
5825 	trace_seq_init(&iter->seq);
5826 	iter->trace = tr->current_trace;
5827 
5828 	if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
5829 		ret = -ENOMEM;
5830 		goto fail;
5831 	}
5832 
5833 	/* trace pipe does not show start of buffer */
5834 	cpumask_setall(iter->started);
5835 
5836 	if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
5837 		iter->iter_flags |= TRACE_FILE_LAT_FMT;
5838 
5839 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
5840 	if (trace_clocks[tr->clock_id].in_ns)
5841 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
5842 
5843 	iter->tr = tr;
5844 	iter->trace_buffer = &tr->trace_buffer;
5845 	iter->cpu_file = tracing_get_cpu(inode);
5846 	mutex_init(&iter->mutex);
5847 	filp->private_data = iter;
5848 
5849 	if (iter->trace->pipe_open)
5850 		iter->trace->pipe_open(iter);
5851 
5852 	nonseekable_open(inode, filp);
5853 
5854 	tr->current_trace->ref++;
5855 out:
5856 	mutex_unlock(&trace_types_lock);
5857 	return ret;
5858 
5859 fail:
5860 	kfree(iter);
5861 	__trace_array_put(tr);
5862 	mutex_unlock(&trace_types_lock);
5863 	return ret;
5864 }
5865 
5866 static int tracing_release_pipe(struct inode *inode, struct file *file)
5867 {
5868 	struct trace_iterator *iter = file->private_data;
5869 	struct trace_array *tr = inode->i_private;
5870 
5871 	mutex_lock(&trace_types_lock);
5872 
5873 	tr->current_trace->ref--;
5874 
5875 	if (iter->trace->pipe_close)
5876 		iter->trace->pipe_close(iter);
5877 
5878 	mutex_unlock(&trace_types_lock);
5879 
5880 	free_cpumask_var(iter->started);
5881 	mutex_destroy(&iter->mutex);
5882 	kfree(iter);
5883 
5884 	trace_array_put(tr);
5885 
5886 	return 0;
5887 }
5888 
5889 static __poll_t
5890 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
5891 {
5892 	struct trace_array *tr = iter->tr;
5893 
5894 	/* Iterators are static, they should be filled or empty */
5895 	if (trace_buffer_iter(iter, iter->cpu_file))
5896 		return EPOLLIN | EPOLLRDNORM;
5897 
5898 	if (tr->trace_flags & TRACE_ITER_BLOCK)
5899 		/*
5900 		 * Always select as readable when in blocking mode
5901 		 */
5902 		return EPOLLIN | EPOLLRDNORM;
5903 	else
5904 		return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
5905 					     filp, poll_table);
5906 }
5907 
5908 static __poll_t
5909 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
5910 {
5911 	struct trace_iterator *iter = filp->private_data;
5912 
5913 	return trace_poll(iter, filp, poll_table);
5914 }
5915 
5916 /* Must be called with iter->mutex held. */
5917 static int tracing_wait_pipe(struct file *filp)
5918 {
5919 	struct trace_iterator *iter = filp->private_data;
5920 	int ret;
5921 
5922 	while (trace_empty(iter)) {
5923 
5924 		if ((filp->f_flags & O_NONBLOCK)) {
5925 			return -EAGAIN;
5926 		}
5927 
5928 		/*
5929 		 * We block until we read something and tracing is disabled.
5930 		 * We still block if tracing is disabled, but we have never
5931 		 * read anything. This allows a user to cat this file, and
5932 		 * then enable tracing. But after we have read something,
5933 		 * we give an EOF when tracing is again disabled.
5934 		 *
5935 		 * iter->pos will be 0 if we haven't read anything.
5936 		 */
5937 		if (!tracer_tracing_is_on(iter->tr) && iter->pos)
5938 			break;
5939 
5940 		mutex_unlock(&iter->mutex);
5941 
5942 		ret = wait_on_pipe(iter, 0);
5943 
5944 		mutex_lock(&iter->mutex);
5945 
5946 		if (ret)
5947 			return ret;
5948 	}
5949 
5950 	return 1;
5951 }
5952 
5953 /*
5954  * Consumer reader.
5955  */
5956 static ssize_t
5957 tracing_read_pipe(struct file *filp, char __user *ubuf,
5958 		  size_t cnt, loff_t *ppos)
5959 {
5960 	struct trace_iterator *iter = filp->private_data;
5961 	ssize_t sret;
5962 
5963 	/*
5964 	 * Avoid more than one consumer on a single file descriptor
5965 	 * This is just a matter of traces coherency, the ring buffer itself
5966 	 * is protected.
5967 	 */
5968 	mutex_lock(&iter->mutex);
5969 
5970 	/* return any leftover data */
5971 	sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
5972 	if (sret != -EBUSY)
5973 		goto out;
5974 
5975 	trace_seq_init(&iter->seq);
5976 
5977 	if (iter->trace->read) {
5978 		sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
5979 		if (sret)
5980 			goto out;
5981 	}
5982 
5983 waitagain:
5984 	sret = tracing_wait_pipe(filp);
5985 	if (sret <= 0)
5986 		goto out;
5987 
5988 	/* stop when tracing is finished */
5989 	if (trace_empty(iter)) {
5990 		sret = 0;
5991 		goto out;
5992 	}
5993 
5994 	if (cnt >= PAGE_SIZE)
5995 		cnt = PAGE_SIZE - 1;
5996 
5997 	/* reset all but tr, trace, and overruns */
5998 	memset(&iter->seq, 0,
5999 	       sizeof(struct trace_iterator) -
6000 	       offsetof(struct trace_iterator, seq));
6001 	cpumask_clear(iter->started);
6002 	iter->pos = -1;
6003 
6004 	trace_event_read_lock();
6005 	trace_access_lock(iter->cpu_file);
6006 	while (trace_find_next_entry_inc(iter) != NULL) {
6007 		enum print_line_t ret;
6008 		int save_len = iter->seq.seq.len;
6009 
6010 		ret = print_trace_line(iter);
6011 		if (ret == TRACE_TYPE_PARTIAL_LINE) {
6012 			/* don't print partial lines */
6013 			iter->seq.seq.len = save_len;
6014 			break;
6015 		}
6016 		if (ret != TRACE_TYPE_NO_CONSUME)
6017 			trace_consume(iter);
6018 
6019 		if (trace_seq_used(&iter->seq) >= cnt)
6020 			break;
6021 
6022 		/*
6023 		 * Setting the full flag means we reached the trace_seq buffer
6024 		 * size and we should leave by partial output condition above.
6025 		 * One of the trace_seq_* functions is not used properly.
6026 		 */
6027 		WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
6028 			  iter->ent->type);
6029 	}
6030 	trace_access_unlock(iter->cpu_file);
6031 	trace_event_read_unlock();
6032 
6033 	/* Now copy what we have to the user */
6034 	sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
6035 	if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
6036 		trace_seq_init(&iter->seq);
6037 
6038 	/*
6039 	 * If there was nothing to send to user, in spite of consuming trace
6040 	 * entries, go back to wait for more entries.
6041 	 */
6042 	if (sret == -EBUSY)
6043 		goto waitagain;
6044 
6045 out:
6046 	mutex_unlock(&iter->mutex);
6047 
6048 	return sret;
6049 }
6050 
6051 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
6052 				     unsigned int idx)
6053 {
6054 	__free_page(spd->pages[idx]);
6055 }
6056 
6057 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
6058 	.confirm		= generic_pipe_buf_confirm,
6059 	.release		= generic_pipe_buf_release,
6060 	.steal			= generic_pipe_buf_steal,
6061 	.get			= generic_pipe_buf_get,
6062 };
6063 
6064 static size_t
6065 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
6066 {
6067 	size_t count;
6068 	int save_len;
6069 	int ret;
6070 
6071 	/* Seq buffer is page-sized, exactly what we need. */
6072 	for (;;) {
6073 		save_len = iter->seq.seq.len;
6074 		ret = print_trace_line(iter);
6075 
6076 		if (trace_seq_has_overflowed(&iter->seq)) {
6077 			iter->seq.seq.len = save_len;
6078 			break;
6079 		}
6080 
6081 		/*
6082 		 * This should not be hit, because it should only
6083 		 * be set if the iter->seq overflowed. But check it
6084 		 * anyway to be safe.
6085 		 */
6086 		if (ret == TRACE_TYPE_PARTIAL_LINE) {
6087 			iter->seq.seq.len = save_len;
6088 			break;
6089 		}
6090 
6091 		count = trace_seq_used(&iter->seq) - save_len;
6092 		if (rem < count) {
6093 			rem = 0;
6094 			iter->seq.seq.len = save_len;
6095 			break;
6096 		}
6097 
6098 		if (ret != TRACE_TYPE_NO_CONSUME)
6099 			trace_consume(iter);
6100 		rem -= count;
6101 		if (!trace_find_next_entry_inc(iter))	{
6102 			rem = 0;
6103 			iter->ent = NULL;
6104 			break;
6105 		}
6106 	}
6107 
6108 	return rem;
6109 }
6110 
6111 static ssize_t tracing_splice_read_pipe(struct file *filp,
6112 					loff_t *ppos,
6113 					struct pipe_inode_info *pipe,
6114 					size_t len,
6115 					unsigned int flags)
6116 {
6117 	struct page *pages_def[PIPE_DEF_BUFFERS];
6118 	struct partial_page partial_def[PIPE_DEF_BUFFERS];
6119 	struct trace_iterator *iter = filp->private_data;
6120 	struct splice_pipe_desc spd = {
6121 		.pages		= pages_def,
6122 		.partial	= partial_def,
6123 		.nr_pages	= 0, /* This gets updated below. */
6124 		.nr_pages_max	= PIPE_DEF_BUFFERS,
6125 		.ops		= &tracing_pipe_buf_ops,
6126 		.spd_release	= tracing_spd_release_pipe,
6127 	};
6128 	ssize_t ret;
6129 	size_t rem;
6130 	unsigned int i;
6131 
6132 	if (splice_grow_spd(pipe, &spd))
6133 		return -ENOMEM;
6134 
6135 	mutex_lock(&iter->mutex);
6136 
6137 	if (iter->trace->splice_read) {
6138 		ret = iter->trace->splice_read(iter, filp,
6139 					       ppos, pipe, len, flags);
6140 		if (ret)
6141 			goto out_err;
6142 	}
6143 
6144 	ret = tracing_wait_pipe(filp);
6145 	if (ret <= 0)
6146 		goto out_err;
6147 
6148 	if (!iter->ent && !trace_find_next_entry_inc(iter)) {
6149 		ret = -EFAULT;
6150 		goto out_err;
6151 	}
6152 
6153 	trace_event_read_lock();
6154 	trace_access_lock(iter->cpu_file);
6155 
6156 	/* Fill as many pages as possible. */
6157 	for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
6158 		spd.pages[i] = alloc_page(GFP_KERNEL);
6159 		if (!spd.pages[i])
6160 			break;
6161 
6162 		rem = tracing_fill_pipe_page(rem, iter);
6163 
6164 		/* Copy the data into the page, so we can start over. */
6165 		ret = trace_seq_to_buffer(&iter->seq,
6166 					  page_address(spd.pages[i]),
6167 					  trace_seq_used(&iter->seq));
6168 		if (ret < 0) {
6169 			__free_page(spd.pages[i]);
6170 			break;
6171 		}
6172 		spd.partial[i].offset = 0;
6173 		spd.partial[i].len = trace_seq_used(&iter->seq);
6174 
6175 		trace_seq_init(&iter->seq);
6176 	}
6177 
6178 	trace_access_unlock(iter->cpu_file);
6179 	trace_event_read_unlock();
6180 	mutex_unlock(&iter->mutex);
6181 
6182 	spd.nr_pages = i;
6183 
6184 	if (i)
6185 		ret = splice_to_pipe(pipe, &spd);
6186 	else
6187 		ret = 0;
6188 out:
6189 	splice_shrink_spd(&spd);
6190 	return ret;
6191 
6192 out_err:
6193 	mutex_unlock(&iter->mutex);
6194 	goto out;
6195 }
6196 
6197 static ssize_t
6198 tracing_entries_read(struct file *filp, char __user *ubuf,
6199 		     size_t cnt, loff_t *ppos)
6200 {
6201 	struct inode *inode = file_inode(filp);
6202 	struct trace_array *tr = inode->i_private;
6203 	int cpu = tracing_get_cpu(inode);
6204 	char buf[64];
6205 	int r = 0;
6206 	ssize_t ret;
6207 
6208 	mutex_lock(&trace_types_lock);
6209 
6210 	if (cpu == RING_BUFFER_ALL_CPUS) {
6211 		int cpu, buf_size_same;
6212 		unsigned long size;
6213 
6214 		size = 0;
6215 		buf_size_same = 1;
6216 		/* check if all cpu sizes are same */
6217 		for_each_tracing_cpu(cpu) {
6218 			/* fill in the size from first enabled cpu */
6219 			if (size == 0)
6220 				size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
6221 			if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
6222 				buf_size_same = 0;
6223 				break;
6224 			}
6225 		}
6226 
6227 		if (buf_size_same) {
6228 			if (!ring_buffer_expanded)
6229 				r = sprintf(buf, "%lu (expanded: %lu)\n",
6230 					    size >> 10,
6231 					    trace_buf_size >> 10);
6232 			else
6233 				r = sprintf(buf, "%lu\n", size >> 10);
6234 		} else
6235 			r = sprintf(buf, "X\n");
6236 	} else
6237 		r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
6238 
6239 	mutex_unlock(&trace_types_lock);
6240 
6241 	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6242 	return ret;
6243 }
6244 
6245 static ssize_t
6246 tracing_entries_write(struct file *filp, const char __user *ubuf,
6247 		      size_t cnt, loff_t *ppos)
6248 {
6249 	struct inode *inode = file_inode(filp);
6250 	struct trace_array *tr = inode->i_private;
6251 	unsigned long val;
6252 	int ret;
6253 
6254 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6255 	if (ret)
6256 		return ret;
6257 
6258 	/* must have at least 1 entry */
6259 	if (!val)
6260 		return -EINVAL;
6261 
6262 	/* value is in KB */
6263 	val <<= 10;
6264 	ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
6265 	if (ret < 0)
6266 		return ret;
6267 
6268 	*ppos += cnt;
6269 
6270 	return cnt;
6271 }
6272 
6273 static ssize_t
6274 tracing_total_entries_read(struct file *filp, char __user *ubuf,
6275 				size_t cnt, loff_t *ppos)
6276 {
6277 	struct trace_array *tr = filp->private_data;
6278 	char buf[64];
6279 	int r, cpu;
6280 	unsigned long size = 0, expanded_size = 0;
6281 
6282 	mutex_lock(&trace_types_lock);
6283 	for_each_tracing_cpu(cpu) {
6284 		size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
6285 		if (!ring_buffer_expanded)
6286 			expanded_size += trace_buf_size >> 10;
6287 	}
6288 	if (ring_buffer_expanded)
6289 		r = sprintf(buf, "%lu\n", size);
6290 	else
6291 		r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
6292 	mutex_unlock(&trace_types_lock);
6293 
6294 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6295 }
6296 
6297 static ssize_t
6298 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
6299 			  size_t cnt, loff_t *ppos)
6300 {
6301 	/*
6302 	 * There is no need to read what the user has written, this function
6303 	 * is just to make sure that there is no error when "echo" is used
6304 	 */
6305 
6306 	*ppos += cnt;
6307 
6308 	return cnt;
6309 }
6310 
6311 static int
6312 tracing_free_buffer_release(struct inode *inode, struct file *filp)
6313 {
6314 	struct trace_array *tr = inode->i_private;
6315 
6316 	/* disable tracing ? */
6317 	if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
6318 		tracer_tracing_off(tr);
6319 	/* resize the ring buffer to 0 */
6320 	tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
6321 
6322 	trace_array_put(tr);
6323 
6324 	return 0;
6325 }
6326 
6327 static ssize_t
6328 tracing_mark_write(struct file *filp, const char __user *ubuf,
6329 					size_t cnt, loff_t *fpos)
6330 {
6331 	struct trace_array *tr = filp->private_data;
6332 	struct ring_buffer_event *event;
6333 	enum event_trigger_type tt = ETT_NONE;
6334 	struct ring_buffer *buffer;
6335 	struct print_entry *entry;
6336 	unsigned long irq_flags;
6337 	ssize_t written;
6338 	int size;
6339 	int len;
6340 
6341 /* Used in tracing_mark_raw_write() as well */
6342 #define FAULTED_STR "<faulted>"
6343 #define FAULTED_SIZE (sizeof(FAULTED_STR) - 1) /* '\0' is already accounted for */
6344 
6345 	if (tracing_disabled)
6346 		return -EINVAL;
6347 
6348 	if (!(tr->trace_flags & TRACE_ITER_MARKERS))
6349 		return -EINVAL;
6350 
6351 	if (cnt > TRACE_BUF_SIZE)
6352 		cnt = TRACE_BUF_SIZE;
6353 
6354 	BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
6355 
6356 	local_save_flags(irq_flags);
6357 	size = sizeof(*entry) + cnt + 2; /* add '\0' and possible '\n' */
6358 
6359 	/* If less than "<faulted>", then make sure we can still add that */
6360 	if (cnt < FAULTED_SIZE)
6361 		size += FAULTED_SIZE - cnt;
6362 
6363 	buffer = tr->trace_buffer.buffer;
6364 	event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
6365 					    irq_flags, preempt_count());
6366 	if (unlikely(!event))
6367 		/* Ring buffer disabled, return as if not open for write */
6368 		return -EBADF;
6369 
6370 	entry = ring_buffer_event_data(event);
6371 	entry->ip = _THIS_IP_;
6372 
6373 	len = __copy_from_user_inatomic(&entry->buf, ubuf, cnt);
6374 	if (len) {
6375 		memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE);
6376 		cnt = FAULTED_SIZE;
6377 		written = -EFAULT;
6378 	} else
6379 		written = cnt;
6380 	len = cnt;
6381 
6382 	if (tr->trace_marker_file && !list_empty(&tr->trace_marker_file->triggers)) {
6383 		/* do not add \n before testing triggers, but add \0 */
6384 		entry->buf[cnt] = '\0';
6385 		tt = event_triggers_call(tr->trace_marker_file, entry, event);
6386 	}
6387 
6388 	if (entry->buf[cnt - 1] != '\n') {
6389 		entry->buf[cnt] = '\n';
6390 		entry->buf[cnt + 1] = '\0';
6391 	} else
6392 		entry->buf[cnt] = '\0';
6393 
6394 	__buffer_unlock_commit(buffer, event);
6395 
6396 	if (tt)
6397 		event_triggers_post_call(tr->trace_marker_file, tt);
6398 
6399 	if (written > 0)
6400 		*fpos += written;
6401 
6402 	return written;
6403 }
6404 
6405 /* Limit it for now to 3K (including tag) */
6406 #define RAW_DATA_MAX_SIZE (1024*3)
6407 
6408 static ssize_t
6409 tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
6410 					size_t cnt, loff_t *fpos)
6411 {
6412 	struct trace_array *tr = filp->private_data;
6413 	struct ring_buffer_event *event;
6414 	struct ring_buffer *buffer;
6415 	struct raw_data_entry *entry;
6416 	unsigned long irq_flags;
6417 	ssize_t written;
6418 	int size;
6419 	int len;
6420 
6421 #define FAULT_SIZE_ID (FAULTED_SIZE + sizeof(int))
6422 
6423 	if (tracing_disabled)
6424 		return -EINVAL;
6425 
6426 	if (!(tr->trace_flags & TRACE_ITER_MARKERS))
6427 		return -EINVAL;
6428 
6429 	/* The marker must at least have a tag id */
6430 	if (cnt < sizeof(unsigned int) || cnt > RAW_DATA_MAX_SIZE)
6431 		return -EINVAL;
6432 
6433 	if (cnt > TRACE_BUF_SIZE)
6434 		cnt = TRACE_BUF_SIZE;
6435 
6436 	BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
6437 
6438 	local_save_flags(irq_flags);
6439 	size = sizeof(*entry) + cnt;
6440 	if (cnt < FAULT_SIZE_ID)
6441 		size += FAULT_SIZE_ID - cnt;
6442 
6443 	buffer = tr->trace_buffer.buffer;
6444 	event = __trace_buffer_lock_reserve(buffer, TRACE_RAW_DATA, size,
6445 					    irq_flags, preempt_count());
6446 	if (!event)
6447 		/* Ring buffer disabled, return as if not open for write */
6448 		return -EBADF;
6449 
6450 	entry = ring_buffer_event_data(event);
6451 
6452 	len = __copy_from_user_inatomic(&entry->id, ubuf, cnt);
6453 	if (len) {
6454 		entry->id = -1;
6455 		memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE);
6456 		written = -EFAULT;
6457 	} else
6458 		written = cnt;
6459 
6460 	__buffer_unlock_commit(buffer, event);
6461 
6462 	if (written > 0)
6463 		*fpos += written;
6464 
6465 	return written;
6466 }
6467 
6468 static int tracing_clock_show(struct seq_file *m, void *v)
6469 {
6470 	struct trace_array *tr = m->private;
6471 	int i;
6472 
6473 	for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
6474 		seq_printf(m,
6475 			"%s%s%s%s", i ? " " : "",
6476 			i == tr->clock_id ? "[" : "", trace_clocks[i].name,
6477 			i == tr->clock_id ? "]" : "");
6478 	seq_putc(m, '\n');
6479 
6480 	return 0;
6481 }
6482 
6483 int tracing_set_clock(struct trace_array *tr, const char *clockstr)
6484 {
6485 	int i;
6486 
6487 	for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
6488 		if (strcmp(trace_clocks[i].name, clockstr) == 0)
6489 			break;
6490 	}
6491 	if (i == ARRAY_SIZE(trace_clocks))
6492 		return -EINVAL;
6493 
6494 	mutex_lock(&trace_types_lock);
6495 
6496 	tr->clock_id = i;
6497 
6498 	ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
6499 
6500 	/*
6501 	 * New clock may not be consistent with the previous clock.
6502 	 * Reset the buffer so that it doesn't have incomparable timestamps.
6503 	 */
6504 	tracing_reset_online_cpus(&tr->trace_buffer);
6505 
6506 #ifdef CONFIG_TRACER_MAX_TRACE
6507 	if (tr->max_buffer.buffer)
6508 		ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
6509 	tracing_reset_online_cpus(&tr->max_buffer);
6510 #endif
6511 
6512 	mutex_unlock(&trace_types_lock);
6513 
6514 	return 0;
6515 }
6516 
6517 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
6518 				   size_t cnt, loff_t *fpos)
6519 {
6520 	struct seq_file *m = filp->private_data;
6521 	struct trace_array *tr = m->private;
6522 	char buf[64];
6523 	const char *clockstr;
6524 	int ret;
6525 
6526 	if (cnt >= sizeof(buf))
6527 		return -EINVAL;
6528 
6529 	if (copy_from_user(buf, ubuf, cnt))
6530 		return -EFAULT;
6531 
6532 	buf[cnt] = 0;
6533 
6534 	clockstr = strstrip(buf);
6535 
6536 	ret = tracing_set_clock(tr, clockstr);
6537 	if (ret)
6538 		return ret;
6539 
6540 	*fpos += cnt;
6541 
6542 	return cnt;
6543 }
6544 
6545 static int tracing_clock_open(struct inode *inode, struct file *file)
6546 {
6547 	struct trace_array *tr = inode->i_private;
6548 	int ret;
6549 
6550 	if (tracing_disabled)
6551 		return -ENODEV;
6552 
6553 	if (trace_array_get(tr))
6554 		return -ENODEV;
6555 
6556 	ret = single_open(file, tracing_clock_show, inode->i_private);
6557 	if (ret < 0)
6558 		trace_array_put(tr);
6559 
6560 	return ret;
6561 }
6562 
6563 static int tracing_time_stamp_mode_show(struct seq_file *m, void *v)
6564 {
6565 	struct trace_array *tr = m->private;
6566 
6567 	mutex_lock(&trace_types_lock);
6568 
6569 	if (ring_buffer_time_stamp_abs(tr->trace_buffer.buffer))
6570 		seq_puts(m, "delta [absolute]\n");
6571 	else
6572 		seq_puts(m, "[delta] absolute\n");
6573 
6574 	mutex_unlock(&trace_types_lock);
6575 
6576 	return 0;
6577 }
6578 
6579 static int tracing_time_stamp_mode_open(struct inode *inode, struct file *file)
6580 {
6581 	struct trace_array *tr = inode->i_private;
6582 	int ret;
6583 
6584 	if (tracing_disabled)
6585 		return -ENODEV;
6586 
6587 	if (trace_array_get(tr))
6588 		return -ENODEV;
6589 
6590 	ret = single_open(file, tracing_time_stamp_mode_show, inode->i_private);
6591 	if (ret < 0)
6592 		trace_array_put(tr);
6593 
6594 	return ret;
6595 }
6596 
6597 int tracing_set_time_stamp_abs(struct trace_array *tr, bool abs)
6598 {
6599 	int ret = 0;
6600 
6601 	mutex_lock(&trace_types_lock);
6602 
6603 	if (abs && tr->time_stamp_abs_ref++)
6604 		goto out;
6605 
6606 	if (!abs) {
6607 		if (WARN_ON_ONCE(!tr->time_stamp_abs_ref)) {
6608 			ret = -EINVAL;
6609 			goto out;
6610 		}
6611 
6612 		if (--tr->time_stamp_abs_ref)
6613 			goto out;
6614 	}
6615 
6616 	ring_buffer_set_time_stamp_abs(tr->trace_buffer.buffer, abs);
6617 
6618 #ifdef CONFIG_TRACER_MAX_TRACE
6619 	if (tr->max_buffer.buffer)
6620 		ring_buffer_set_time_stamp_abs(tr->max_buffer.buffer, abs);
6621 #endif
6622  out:
6623 	mutex_unlock(&trace_types_lock);
6624 
6625 	return ret;
6626 }
6627 
6628 struct ftrace_buffer_info {
6629 	struct trace_iterator	iter;
6630 	void			*spare;
6631 	unsigned int		spare_cpu;
6632 	unsigned int		read;
6633 };
6634 
6635 #ifdef CONFIG_TRACER_SNAPSHOT
6636 static int tracing_snapshot_open(struct inode *inode, struct file *file)
6637 {
6638 	struct trace_array *tr = inode->i_private;
6639 	struct trace_iterator *iter;
6640 	struct seq_file *m;
6641 	int ret = 0;
6642 
6643 	if (trace_array_get(tr) < 0)
6644 		return -ENODEV;
6645 
6646 	if (file->f_mode & FMODE_READ) {
6647 		iter = __tracing_open(inode, file, true);
6648 		if (IS_ERR(iter))
6649 			ret = PTR_ERR(iter);
6650 	} else {
6651 		/* Writes still need the seq_file to hold the private data */
6652 		ret = -ENOMEM;
6653 		m = kzalloc(sizeof(*m), GFP_KERNEL);
6654 		if (!m)
6655 			goto out;
6656 		iter = kzalloc(sizeof(*iter), GFP_KERNEL);
6657 		if (!iter) {
6658 			kfree(m);
6659 			goto out;
6660 		}
6661 		ret = 0;
6662 
6663 		iter->tr = tr;
6664 		iter->trace_buffer = &tr->max_buffer;
6665 		iter->cpu_file = tracing_get_cpu(inode);
6666 		m->private = iter;
6667 		file->private_data = m;
6668 	}
6669 out:
6670 	if (ret < 0)
6671 		trace_array_put(tr);
6672 
6673 	return ret;
6674 }
6675 
6676 static ssize_t
6677 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
6678 		       loff_t *ppos)
6679 {
6680 	struct seq_file *m = filp->private_data;
6681 	struct trace_iterator *iter = m->private;
6682 	struct trace_array *tr = iter->tr;
6683 	unsigned long val;
6684 	int ret;
6685 
6686 	ret = tracing_update_buffers();
6687 	if (ret < 0)
6688 		return ret;
6689 
6690 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6691 	if (ret)
6692 		return ret;
6693 
6694 	mutex_lock(&trace_types_lock);
6695 
6696 	if (tr->current_trace->use_max_tr) {
6697 		ret = -EBUSY;
6698 		goto out;
6699 	}
6700 
6701 	arch_spin_lock(&tr->max_lock);
6702 	if (tr->cond_snapshot)
6703 		ret = -EBUSY;
6704 	arch_spin_unlock(&tr->max_lock);
6705 	if (ret)
6706 		goto out;
6707 
6708 	switch (val) {
6709 	case 0:
6710 		if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
6711 			ret = -EINVAL;
6712 			break;
6713 		}
6714 		if (tr->allocated_snapshot)
6715 			free_snapshot(tr);
6716 		break;
6717 	case 1:
6718 /* Only allow per-cpu swap if the ring buffer supports it */
6719 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
6720 		if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
6721 			ret = -EINVAL;
6722 			break;
6723 		}
6724 #endif
6725 		if (tr->allocated_snapshot)
6726 			ret = resize_buffer_duplicate_size(&tr->max_buffer,
6727 					&tr->trace_buffer, iter->cpu_file);
6728 		else
6729 			ret = tracing_alloc_snapshot_instance(tr);
6730 		if (ret < 0)
6731 			break;
6732 		local_irq_disable();
6733 		/* Now, we're going to swap */
6734 		if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
6735 			update_max_tr(tr, current, smp_processor_id(), NULL);
6736 		else
6737 			update_max_tr_single(tr, current, iter->cpu_file);
6738 		local_irq_enable();
6739 		break;
6740 	default:
6741 		if (tr->allocated_snapshot) {
6742 			if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
6743 				tracing_reset_online_cpus(&tr->max_buffer);
6744 			else
6745 				tracing_reset_cpu(&tr->max_buffer, iter->cpu_file);
6746 		}
6747 		break;
6748 	}
6749 
6750 	if (ret >= 0) {
6751 		*ppos += cnt;
6752 		ret = cnt;
6753 	}
6754 out:
6755 	mutex_unlock(&trace_types_lock);
6756 	return ret;
6757 }
6758 
6759 static int tracing_snapshot_release(struct inode *inode, struct file *file)
6760 {
6761 	struct seq_file *m = file->private_data;
6762 	int ret;
6763 
6764 	ret = tracing_release(inode, file);
6765 
6766 	if (file->f_mode & FMODE_READ)
6767 		return ret;
6768 
6769 	/* If write only, the seq_file is just a stub */
6770 	if (m)
6771 		kfree(m->private);
6772 	kfree(m);
6773 
6774 	return 0;
6775 }
6776 
6777 static int tracing_buffers_open(struct inode *inode, struct file *filp);
6778 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
6779 				    size_t count, loff_t *ppos);
6780 static int tracing_buffers_release(struct inode *inode, struct file *file);
6781 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
6782 		   struct pipe_inode_info *pipe, size_t len, unsigned int flags);
6783 
6784 static int snapshot_raw_open(struct inode *inode, struct file *filp)
6785 {
6786 	struct ftrace_buffer_info *info;
6787 	int ret;
6788 
6789 	ret = tracing_buffers_open(inode, filp);
6790 	if (ret < 0)
6791 		return ret;
6792 
6793 	info = filp->private_data;
6794 
6795 	if (info->iter.trace->use_max_tr) {
6796 		tracing_buffers_release(inode, filp);
6797 		return -EBUSY;
6798 	}
6799 
6800 	info->iter.snapshot = true;
6801 	info->iter.trace_buffer = &info->iter.tr->max_buffer;
6802 
6803 	return ret;
6804 }
6805 
6806 #endif /* CONFIG_TRACER_SNAPSHOT */
6807 
6808 
6809 static const struct file_operations tracing_thresh_fops = {
6810 	.open		= tracing_open_generic,
6811 	.read		= tracing_thresh_read,
6812 	.write		= tracing_thresh_write,
6813 	.llseek		= generic_file_llseek,
6814 };
6815 
6816 #if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
6817 static const struct file_operations tracing_max_lat_fops = {
6818 	.open		= tracing_open_generic,
6819 	.read		= tracing_max_lat_read,
6820 	.write		= tracing_max_lat_write,
6821 	.llseek		= generic_file_llseek,
6822 };
6823 #endif
6824 
6825 static const struct file_operations set_tracer_fops = {
6826 	.open		= tracing_open_generic,
6827 	.read		= tracing_set_trace_read,
6828 	.write		= tracing_set_trace_write,
6829 	.llseek		= generic_file_llseek,
6830 };
6831 
6832 static const struct file_operations tracing_pipe_fops = {
6833 	.open		= tracing_open_pipe,
6834 	.poll		= tracing_poll_pipe,
6835 	.read		= tracing_read_pipe,
6836 	.splice_read	= tracing_splice_read_pipe,
6837 	.release	= tracing_release_pipe,
6838 	.llseek		= no_llseek,
6839 };
6840 
6841 static const struct file_operations tracing_entries_fops = {
6842 	.open		= tracing_open_generic_tr,
6843 	.read		= tracing_entries_read,
6844 	.write		= tracing_entries_write,
6845 	.llseek		= generic_file_llseek,
6846 	.release	= tracing_release_generic_tr,
6847 };
6848 
6849 static const struct file_operations tracing_total_entries_fops = {
6850 	.open		= tracing_open_generic_tr,
6851 	.read		= tracing_total_entries_read,
6852 	.llseek		= generic_file_llseek,
6853 	.release	= tracing_release_generic_tr,
6854 };
6855 
6856 static const struct file_operations tracing_free_buffer_fops = {
6857 	.open		= tracing_open_generic_tr,
6858 	.write		= tracing_free_buffer_write,
6859 	.release	= tracing_free_buffer_release,
6860 };
6861 
6862 static const struct file_operations tracing_mark_fops = {
6863 	.open		= tracing_open_generic_tr,
6864 	.write		= tracing_mark_write,
6865 	.llseek		= generic_file_llseek,
6866 	.release	= tracing_release_generic_tr,
6867 };
6868 
6869 static const struct file_operations tracing_mark_raw_fops = {
6870 	.open		= tracing_open_generic_tr,
6871 	.write		= tracing_mark_raw_write,
6872 	.llseek		= generic_file_llseek,
6873 	.release	= tracing_release_generic_tr,
6874 };
6875 
6876 static const struct file_operations trace_clock_fops = {
6877 	.open		= tracing_clock_open,
6878 	.read		= seq_read,
6879 	.llseek		= seq_lseek,
6880 	.release	= tracing_single_release_tr,
6881 	.write		= tracing_clock_write,
6882 };
6883 
6884 static const struct file_operations trace_time_stamp_mode_fops = {
6885 	.open		= tracing_time_stamp_mode_open,
6886 	.read		= seq_read,
6887 	.llseek		= seq_lseek,
6888 	.release	= tracing_single_release_tr,
6889 };
6890 
6891 #ifdef CONFIG_TRACER_SNAPSHOT
6892 static const struct file_operations snapshot_fops = {
6893 	.open		= tracing_snapshot_open,
6894 	.read		= seq_read,
6895 	.write		= tracing_snapshot_write,
6896 	.llseek		= tracing_lseek,
6897 	.release	= tracing_snapshot_release,
6898 };
6899 
6900 static const struct file_operations snapshot_raw_fops = {
6901 	.open		= snapshot_raw_open,
6902 	.read		= tracing_buffers_read,
6903 	.release	= tracing_buffers_release,
6904 	.splice_read	= tracing_buffers_splice_read,
6905 	.llseek		= no_llseek,
6906 };
6907 
6908 #endif /* CONFIG_TRACER_SNAPSHOT */
6909 
6910 #define TRACING_LOG_ERRS_MAX	8
6911 #define TRACING_LOG_LOC_MAX	128
6912 
6913 #define CMD_PREFIX "  Command: "
6914 
6915 struct err_info {
6916 	const char	**errs;	/* ptr to loc-specific array of err strings */
6917 	u8		type;	/* index into errs -> specific err string */
6918 	u8		pos;	/* MAX_FILTER_STR_VAL = 256 */
6919 	u64		ts;
6920 };
6921 
6922 struct tracing_log_err {
6923 	struct list_head	list;
6924 	struct err_info		info;
6925 	char			loc[TRACING_LOG_LOC_MAX]; /* err location */
6926 	char			cmd[MAX_FILTER_STR_VAL]; /* what caused err */
6927 };
6928 
6929 static DEFINE_MUTEX(tracing_err_log_lock);
6930 
6931 static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr)
6932 {
6933 	struct tracing_log_err *err;
6934 
6935 	if (tr->n_err_log_entries < TRACING_LOG_ERRS_MAX) {
6936 		err = kzalloc(sizeof(*err), GFP_KERNEL);
6937 		if (!err)
6938 			err = ERR_PTR(-ENOMEM);
6939 		tr->n_err_log_entries++;
6940 
6941 		return err;
6942 	}
6943 
6944 	err = list_first_entry(&tr->err_log, struct tracing_log_err, list);
6945 	list_del(&err->list);
6946 
6947 	return err;
6948 }
6949 
6950 /**
6951  * err_pos - find the position of a string within a command for error careting
6952  * @cmd: The tracing command that caused the error
6953  * @str: The string to position the caret at within @cmd
6954  *
6955  * Finds the position of the first occurence of @str within @cmd.  The
6956  * return value can be passed to tracing_log_err() for caret placement
6957  * within @cmd.
6958  *
6959  * Returns the index within @cmd of the first occurence of @str or 0
6960  * if @str was not found.
6961  */
6962 unsigned int err_pos(char *cmd, const char *str)
6963 {
6964 	char *found;
6965 
6966 	if (WARN_ON(!strlen(cmd)))
6967 		return 0;
6968 
6969 	found = strstr(cmd, str);
6970 	if (found)
6971 		return found - cmd;
6972 
6973 	return 0;
6974 }
6975 
6976 /**
6977  * tracing_log_err - write an error to the tracing error log
6978  * @tr: The associated trace array for the error (NULL for top level array)
6979  * @loc: A string describing where the error occurred
6980  * @cmd: The tracing command that caused the error
6981  * @errs: The array of loc-specific static error strings
6982  * @type: The index into errs[], which produces the specific static err string
6983  * @pos: The position the caret should be placed in the cmd
6984  *
6985  * Writes an error into tracing/error_log of the form:
6986  *
6987  * <loc>: error: <text>
6988  *   Command: <cmd>
6989  *              ^
6990  *
6991  * tracing/error_log is a small log file containing the last
6992  * TRACING_LOG_ERRS_MAX errors (8).  Memory for errors isn't allocated
6993  * unless there has been a tracing error, and the error log can be
6994  * cleared and have its memory freed by writing the empty string in
6995  * truncation mode to it i.e. echo > tracing/error_log.
6996  *
6997  * NOTE: the @errs array along with the @type param are used to
6998  * produce a static error string - this string is not copied and saved
6999  * when the error is logged - only a pointer to it is saved.  See
7000  * existing callers for examples of how static strings are typically
7001  * defined for use with tracing_log_err().
7002  */
7003 void tracing_log_err(struct trace_array *tr,
7004 		     const char *loc, const char *cmd,
7005 		     const char **errs, u8 type, u8 pos)
7006 {
7007 	struct tracing_log_err *err;
7008 
7009 	if (!tr)
7010 		tr = &global_trace;
7011 
7012 	mutex_lock(&tracing_err_log_lock);
7013 	err = get_tracing_log_err(tr);
7014 	if (PTR_ERR(err) == -ENOMEM) {
7015 		mutex_unlock(&tracing_err_log_lock);
7016 		return;
7017 	}
7018 
7019 	snprintf(err->loc, TRACING_LOG_LOC_MAX, "%s: error: ", loc);
7020 	snprintf(err->cmd, MAX_FILTER_STR_VAL,"\n" CMD_PREFIX "%s\n", cmd);
7021 
7022 	err->info.errs = errs;
7023 	err->info.type = type;
7024 	err->info.pos = pos;
7025 	err->info.ts = local_clock();
7026 
7027 	list_add_tail(&err->list, &tr->err_log);
7028 	mutex_unlock(&tracing_err_log_lock);
7029 }
7030 
7031 static void clear_tracing_err_log(struct trace_array *tr)
7032 {
7033 	struct tracing_log_err *err, *next;
7034 
7035 	mutex_lock(&tracing_err_log_lock);
7036 	list_for_each_entry_safe(err, next, &tr->err_log, list) {
7037 		list_del(&err->list);
7038 		kfree(err);
7039 	}
7040 
7041 	tr->n_err_log_entries = 0;
7042 	mutex_unlock(&tracing_err_log_lock);
7043 }
7044 
7045 static void *tracing_err_log_seq_start(struct seq_file *m, loff_t *pos)
7046 {
7047 	struct trace_array *tr = m->private;
7048 
7049 	mutex_lock(&tracing_err_log_lock);
7050 
7051 	return seq_list_start(&tr->err_log, *pos);
7052 }
7053 
7054 static void *tracing_err_log_seq_next(struct seq_file *m, void *v, loff_t *pos)
7055 {
7056 	struct trace_array *tr = m->private;
7057 
7058 	return seq_list_next(v, &tr->err_log, pos);
7059 }
7060 
7061 static void tracing_err_log_seq_stop(struct seq_file *m, void *v)
7062 {
7063 	mutex_unlock(&tracing_err_log_lock);
7064 }
7065 
7066 static void tracing_err_log_show_pos(struct seq_file *m, u8 pos)
7067 {
7068 	u8 i;
7069 
7070 	for (i = 0; i < sizeof(CMD_PREFIX) - 1; i++)
7071 		seq_putc(m, ' ');
7072 	for (i = 0; i < pos; i++)
7073 		seq_putc(m, ' ');
7074 	seq_puts(m, "^\n");
7075 }
7076 
7077 static int tracing_err_log_seq_show(struct seq_file *m, void *v)
7078 {
7079 	struct tracing_log_err *err = v;
7080 
7081 	if (err) {
7082 		const char *err_text = err->info.errs[err->info.type];
7083 		u64 sec = err->info.ts;
7084 		u32 nsec;
7085 
7086 		nsec = do_div(sec, NSEC_PER_SEC);
7087 		seq_printf(m, "[%5llu.%06u] %s%s", sec, nsec / 1000,
7088 			   err->loc, err_text);
7089 		seq_printf(m, "%s", err->cmd);
7090 		tracing_err_log_show_pos(m, err->info.pos);
7091 	}
7092 
7093 	return 0;
7094 }
7095 
7096 static const struct seq_operations tracing_err_log_seq_ops = {
7097 	.start  = tracing_err_log_seq_start,
7098 	.next   = tracing_err_log_seq_next,
7099 	.stop   = tracing_err_log_seq_stop,
7100 	.show   = tracing_err_log_seq_show
7101 };
7102 
7103 static int tracing_err_log_open(struct inode *inode, struct file *file)
7104 {
7105 	struct trace_array *tr = inode->i_private;
7106 	int ret = 0;
7107 
7108 	if (trace_array_get(tr) < 0)
7109 		return -ENODEV;
7110 
7111 	/* If this file was opened for write, then erase contents */
7112 	if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC))
7113 		clear_tracing_err_log(tr);
7114 
7115 	if (file->f_mode & FMODE_READ) {
7116 		ret = seq_open(file, &tracing_err_log_seq_ops);
7117 		if (!ret) {
7118 			struct seq_file *m = file->private_data;
7119 			m->private = tr;
7120 		} else {
7121 			trace_array_put(tr);
7122 		}
7123 	}
7124 	return ret;
7125 }
7126 
7127 static ssize_t tracing_err_log_write(struct file *file,
7128 				     const char __user *buffer,
7129 				     size_t count, loff_t *ppos)
7130 {
7131 	return count;
7132 }
7133 
7134 static int tracing_err_log_release(struct inode *inode, struct file *file)
7135 {
7136 	struct trace_array *tr = inode->i_private;
7137 
7138 	trace_array_put(tr);
7139 
7140 	if (file->f_mode & FMODE_READ)
7141 		seq_release(inode, file);
7142 
7143 	return 0;
7144 }
7145 
7146 static const struct file_operations tracing_err_log_fops = {
7147 	.open           = tracing_err_log_open,
7148 	.write		= tracing_err_log_write,
7149 	.read           = seq_read,
7150 	.llseek         = seq_lseek,
7151 	.release        = tracing_err_log_release,
7152 };
7153 
7154 static int tracing_buffers_open(struct inode *inode, struct file *filp)
7155 {
7156 	struct trace_array *tr = inode->i_private;
7157 	struct ftrace_buffer_info *info;
7158 	int ret;
7159 
7160 	if (tracing_disabled)
7161 		return -ENODEV;
7162 
7163 	if (trace_array_get(tr) < 0)
7164 		return -ENODEV;
7165 
7166 	info = kzalloc(sizeof(*info), GFP_KERNEL);
7167 	if (!info) {
7168 		trace_array_put(tr);
7169 		return -ENOMEM;
7170 	}
7171 
7172 	mutex_lock(&trace_types_lock);
7173 
7174 	info->iter.tr		= tr;
7175 	info->iter.cpu_file	= tracing_get_cpu(inode);
7176 	info->iter.trace	= tr->current_trace;
7177 	info->iter.trace_buffer = &tr->trace_buffer;
7178 	info->spare		= NULL;
7179 	/* Force reading ring buffer for first read */
7180 	info->read		= (unsigned int)-1;
7181 
7182 	filp->private_data = info;
7183 
7184 	tr->current_trace->ref++;
7185 
7186 	mutex_unlock(&trace_types_lock);
7187 
7188 	ret = nonseekable_open(inode, filp);
7189 	if (ret < 0)
7190 		trace_array_put(tr);
7191 
7192 	return ret;
7193 }
7194 
7195 static __poll_t
7196 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
7197 {
7198 	struct ftrace_buffer_info *info = filp->private_data;
7199 	struct trace_iterator *iter = &info->iter;
7200 
7201 	return trace_poll(iter, filp, poll_table);
7202 }
7203 
7204 static ssize_t
7205 tracing_buffers_read(struct file *filp, char __user *ubuf,
7206 		     size_t count, loff_t *ppos)
7207 {
7208 	struct ftrace_buffer_info *info = filp->private_data;
7209 	struct trace_iterator *iter = &info->iter;
7210 	ssize_t ret = 0;
7211 	ssize_t size;
7212 
7213 	if (!count)
7214 		return 0;
7215 
7216 #ifdef CONFIG_TRACER_MAX_TRACE
7217 	if (iter->snapshot && iter->tr->current_trace->use_max_tr)
7218 		return -EBUSY;
7219 #endif
7220 
7221 	if (!info->spare) {
7222 		info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
7223 							  iter->cpu_file);
7224 		if (IS_ERR(info->spare)) {
7225 			ret = PTR_ERR(info->spare);
7226 			info->spare = NULL;
7227 		} else {
7228 			info->spare_cpu = iter->cpu_file;
7229 		}
7230 	}
7231 	if (!info->spare)
7232 		return ret;
7233 
7234 	/* Do we have previous read data to read? */
7235 	if (info->read < PAGE_SIZE)
7236 		goto read;
7237 
7238  again:
7239 	trace_access_lock(iter->cpu_file);
7240 	ret = ring_buffer_read_page(iter->trace_buffer->buffer,
7241 				    &info->spare,
7242 				    count,
7243 				    iter->cpu_file, 0);
7244 	trace_access_unlock(iter->cpu_file);
7245 
7246 	if (ret < 0) {
7247 		if (trace_empty(iter)) {
7248 			if ((filp->f_flags & O_NONBLOCK))
7249 				return -EAGAIN;
7250 
7251 			ret = wait_on_pipe(iter, 0);
7252 			if (ret)
7253 				return ret;
7254 
7255 			goto again;
7256 		}
7257 		return 0;
7258 	}
7259 
7260 	info->read = 0;
7261  read:
7262 	size = PAGE_SIZE - info->read;
7263 	if (size > count)
7264 		size = count;
7265 
7266 	ret = copy_to_user(ubuf, info->spare + info->read, size);
7267 	if (ret == size)
7268 		return -EFAULT;
7269 
7270 	size -= ret;
7271 
7272 	*ppos += size;
7273 	info->read += size;
7274 
7275 	return size;
7276 }
7277 
7278 static int tracing_buffers_release(struct inode *inode, struct file *file)
7279 {
7280 	struct ftrace_buffer_info *info = file->private_data;
7281 	struct trace_iterator *iter = &info->iter;
7282 
7283 	mutex_lock(&trace_types_lock);
7284 
7285 	iter->tr->current_trace->ref--;
7286 
7287 	__trace_array_put(iter->tr);
7288 
7289 	if (info->spare)
7290 		ring_buffer_free_read_page(iter->trace_buffer->buffer,
7291 					   info->spare_cpu, info->spare);
7292 	kfree(info);
7293 
7294 	mutex_unlock(&trace_types_lock);
7295 
7296 	return 0;
7297 }
7298 
7299 struct buffer_ref {
7300 	struct ring_buffer	*buffer;
7301 	void			*page;
7302 	int			cpu;
7303 	refcount_t		refcount;
7304 };
7305 
7306 static void buffer_ref_release(struct buffer_ref *ref)
7307 {
7308 	if (!refcount_dec_and_test(&ref->refcount))
7309 		return;
7310 	ring_buffer_free_read_page(ref->buffer, ref->cpu, ref->page);
7311 	kfree(ref);
7312 }
7313 
7314 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
7315 				    struct pipe_buffer *buf)
7316 {
7317 	struct buffer_ref *ref = (struct buffer_ref *)buf->private;
7318 
7319 	buffer_ref_release(ref);
7320 	buf->private = 0;
7321 }
7322 
7323 static bool buffer_pipe_buf_get(struct pipe_inode_info *pipe,
7324 				struct pipe_buffer *buf)
7325 {
7326 	struct buffer_ref *ref = (struct buffer_ref *)buf->private;
7327 
7328 	if (refcount_read(&ref->refcount) > INT_MAX/2)
7329 		return false;
7330 
7331 	refcount_inc(&ref->refcount);
7332 	return true;
7333 }
7334 
7335 /* Pipe buffer operations for a buffer. */
7336 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
7337 	.confirm		= generic_pipe_buf_confirm,
7338 	.release		= buffer_pipe_buf_release,
7339 	.steal			= generic_pipe_buf_nosteal,
7340 	.get			= buffer_pipe_buf_get,
7341 };
7342 
7343 /*
7344  * Callback from splice_to_pipe(), if we need to release some pages
7345  * at the end of the spd in case we error'ed out in filling the pipe.
7346  */
7347 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
7348 {
7349 	struct buffer_ref *ref =
7350 		(struct buffer_ref *)spd->partial[i].private;
7351 
7352 	buffer_ref_release(ref);
7353 	spd->partial[i].private = 0;
7354 }
7355 
7356 static ssize_t
7357 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
7358 			    struct pipe_inode_info *pipe, size_t len,
7359 			    unsigned int flags)
7360 {
7361 	struct ftrace_buffer_info *info = file->private_data;
7362 	struct trace_iterator *iter = &info->iter;
7363 	struct partial_page partial_def[PIPE_DEF_BUFFERS];
7364 	struct page *pages_def[PIPE_DEF_BUFFERS];
7365 	struct splice_pipe_desc spd = {
7366 		.pages		= pages_def,
7367 		.partial	= partial_def,
7368 		.nr_pages_max	= PIPE_DEF_BUFFERS,
7369 		.ops		= &buffer_pipe_buf_ops,
7370 		.spd_release	= buffer_spd_release,
7371 	};
7372 	struct buffer_ref *ref;
7373 	int entries, i;
7374 	ssize_t ret = 0;
7375 
7376 #ifdef CONFIG_TRACER_MAX_TRACE
7377 	if (iter->snapshot && iter->tr->current_trace->use_max_tr)
7378 		return -EBUSY;
7379 #endif
7380 
7381 	if (*ppos & (PAGE_SIZE - 1))
7382 		return -EINVAL;
7383 
7384 	if (len & (PAGE_SIZE - 1)) {
7385 		if (len < PAGE_SIZE)
7386 			return -EINVAL;
7387 		len &= PAGE_MASK;
7388 	}
7389 
7390 	if (splice_grow_spd(pipe, &spd))
7391 		return -ENOMEM;
7392 
7393  again:
7394 	trace_access_lock(iter->cpu_file);
7395 	entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
7396 
7397 	for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
7398 		struct page *page;
7399 		int r;
7400 
7401 		ref = kzalloc(sizeof(*ref), GFP_KERNEL);
7402 		if (!ref) {
7403 			ret = -ENOMEM;
7404 			break;
7405 		}
7406 
7407 		refcount_set(&ref->refcount, 1);
7408 		ref->buffer = iter->trace_buffer->buffer;
7409 		ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
7410 		if (IS_ERR(ref->page)) {
7411 			ret = PTR_ERR(ref->page);
7412 			ref->page = NULL;
7413 			kfree(ref);
7414 			break;
7415 		}
7416 		ref->cpu = iter->cpu_file;
7417 
7418 		r = ring_buffer_read_page(ref->buffer, &ref->page,
7419 					  len, iter->cpu_file, 1);
7420 		if (r < 0) {
7421 			ring_buffer_free_read_page(ref->buffer, ref->cpu,
7422 						   ref->page);
7423 			kfree(ref);
7424 			break;
7425 		}
7426 
7427 		page = virt_to_page(ref->page);
7428 
7429 		spd.pages[i] = page;
7430 		spd.partial[i].len = PAGE_SIZE;
7431 		spd.partial[i].offset = 0;
7432 		spd.partial[i].private = (unsigned long)ref;
7433 		spd.nr_pages++;
7434 		*ppos += PAGE_SIZE;
7435 
7436 		entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
7437 	}
7438 
7439 	trace_access_unlock(iter->cpu_file);
7440 	spd.nr_pages = i;
7441 
7442 	/* did we read anything? */
7443 	if (!spd.nr_pages) {
7444 		if (ret)
7445 			goto out;
7446 
7447 		ret = -EAGAIN;
7448 		if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
7449 			goto out;
7450 
7451 		ret = wait_on_pipe(iter, iter->tr->buffer_percent);
7452 		if (ret)
7453 			goto out;
7454 
7455 		goto again;
7456 	}
7457 
7458 	ret = splice_to_pipe(pipe, &spd);
7459 out:
7460 	splice_shrink_spd(&spd);
7461 
7462 	return ret;
7463 }
7464 
7465 static const struct file_operations tracing_buffers_fops = {
7466 	.open		= tracing_buffers_open,
7467 	.read		= tracing_buffers_read,
7468 	.poll		= tracing_buffers_poll,
7469 	.release	= tracing_buffers_release,
7470 	.splice_read	= tracing_buffers_splice_read,
7471 	.llseek		= no_llseek,
7472 };
7473 
7474 static ssize_t
7475 tracing_stats_read(struct file *filp, char __user *ubuf,
7476 		   size_t count, loff_t *ppos)
7477 {
7478 	struct inode *inode = file_inode(filp);
7479 	struct trace_array *tr = inode->i_private;
7480 	struct trace_buffer *trace_buf = &tr->trace_buffer;
7481 	int cpu = tracing_get_cpu(inode);
7482 	struct trace_seq *s;
7483 	unsigned long cnt;
7484 	unsigned long long t;
7485 	unsigned long usec_rem;
7486 
7487 	s = kmalloc(sizeof(*s), GFP_KERNEL);
7488 	if (!s)
7489 		return -ENOMEM;
7490 
7491 	trace_seq_init(s);
7492 
7493 	cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
7494 	trace_seq_printf(s, "entries: %ld\n", cnt);
7495 
7496 	cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
7497 	trace_seq_printf(s, "overrun: %ld\n", cnt);
7498 
7499 	cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
7500 	trace_seq_printf(s, "commit overrun: %ld\n", cnt);
7501 
7502 	cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
7503 	trace_seq_printf(s, "bytes: %ld\n", cnt);
7504 
7505 	if (trace_clocks[tr->clock_id].in_ns) {
7506 		/* local or global for trace_clock */
7507 		t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
7508 		usec_rem = do_div(t, USEC_PER_SEC);
7509 		trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
7510 								t, usec_rem);
7511 
7512 		t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
7513 		usec_rem = do_div(t, USEC_PER_SEC);
7514 		trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
7515 	} else {
7516 		/* counter or tsc mode for trace_clock */
7517 		trace_seq_printf(s, "oldest event ts: %llu\n",
7518 				ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
7519 
7520 		trace_seq_printf(s, "now ts: %llu\n",
7521 				ring_buffer_time_stamp(trace_buf->buffer, cpu));
7522 	}
7523 
7524 	cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
7525 	trace_seq_printf(s, "dropped events: %ld\n", cnt);
7526 
7527 	cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
7528 	trace_seq_printf(s, "read events: %ld\n", cnt);
7529 
7530 	count = simple_read_from_buffer(ubuf, count, ppos,
7531 					s->buffer, trace_seq_used(s));
7532 
7533 	kfree(s);
7534 
7535 	return count;
7536 }
7537 
7538 static const struct file_operations tracing_stats_fops = {
7539 	.open		= tracing_open_generic_tr,
7540 	.read		= tracing_stats_read,
7541 	.llseek		= generic_file_llseek,
7542 	.release	= tracing_release_generic_tr,
7543 };
7544 
7545 #ifdef CONFIG_DYNAMIC_FTRACE
7546 
7547 static ssize_t
7548 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
7549 		  size_t cnt, loff_t *ppos)
7550 {
7551 	unsigned long *p = filp->private_data;
7552 	char buf[64]; /* Not too big for a shallow stack */
7553 	int r;
7554 
7555 	r = scnprintf(buf, 63, "%ld", *p);
7556 	buf[r++] = '\n';
7557 
7558 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
7559 }
7560 
7561 static const struct file_operations tracing_dyn_info_fops = {
7562 	.open		= tracing_open_generic,
7563 	.read		= tracing_read_dyn_info,
7564 	.llseek		= generic_file_llseek,
7565 };
7566 #endif /* CONFIG_DYNAMIC_FTRACE */
7567 
7568 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
7569 static void
7570 ftrace_snapshot(unsigned long ip, unsigned long parent_ip,
7571 		struct trace_array *tr, struct ftrace_probe_ops *ops,
7572 		void *data)
7573 {
7574 	tracing_snapshot_instance(tr);
7575 }
7576 
7577 static void
7578 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip,
7579 		      struct trace_array *tr, struct ftrace_probe_ops *ops,
7580 		      void *data)
7581 {
7582 	struct ftrace_func_mapper *mapper = data;
7583 	long *count = NULL;
7584 
7585 	if (mapper)
7586 		count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
7587 
7588 	if (count) {
7589 
7590 		if (*count <= 0)
7591 			return;
7592 
7593 		(*count)--;
7594 	}
7595 
7596 	tracing_snapshot_instance(tr);
7597 }
7598 
7599 static int
7600 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
7601 		      struct ftrace_probe_ops *ops, void *data)
7602 {
7603 	struct ftrace_func_mapper *mapper = data;
7604 	long *count = NULL;
7605 
7606 	seq_printf(m, "%ps:", (void *)ip);
7607 
7608 	seq_puts(m, "snapshot");
7609 
7610 	if (mapper)
7611 		count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
7612 
7613 	if (count)
7614 		seq_printf(m, ":count=%ld\n", *count);
7615 	else
7616 		seq_puts(m, ":unlimited\n");
7617 
7618 	return 0;
7619 }
7620 
7621 static int
7622 ftrace_snapshot_init(struct ftrace_probe_ops *ops, struct trace_array *tr,
7623 		     unsigned long ip, void *init_data, void **data)
7624 {
7625 	struct ftrace_func_mapper *mapper = *data;
7626 
7627 	if (!mapper) {
7628 		mapper = allocate_ftrace_func_mapper();
7629 		if (!mapper)
7630 			return -ENOMEM;
7631 		*data = mapper;
7632 	}
7633 
7634 	return ftrace_func_mapper_add_ip(mapper, ip, init_data);
7635 }
7636 
7637 static void
7638 ftrace_snapshot_free(struct ftrace_probe_ops *ops, struct trace_array *tr,
7639 		     unsigned long ip, void *data)
7640 {
7641 	struct ftrace_func_mapper *mapper = data;
7642 
7643 	if (!ip) {
7644 		if (!mapper)
7645 			return;
7646 		free_ftrace_func_mapper(mapper, NULL);
7647 		return;
7648 	}
7649 
7650 	ftrace_func_mapper_remove_ip(mapper, ip);
7651 }
7652 
7653 static struct ftrace_probe_ops snapshot_probe_ops = {
7654 	.func			= ftrace_snapshot,
7655 	.print			= ftrace_snapshot_print,
7656 };
7657 
7658 static struct ftrace_probe_ops snapshot_count_probe_ops = {
7659 	.func			= ftrace_count_snapshot,
7660 	.print			= ftrace_snapshot_print,
7661 	.init			= ftrace_snapshot_init,
7662 	.free			= ftrace_snapshot_free,
7663 };
7664 
7665 static int
7666 ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash,
7667 			       char *glob, char *cmd, char *param, int enable)
7668 {
7669 	struct ftrace_probe_ops *ops;
7670 	void *count = (void *)-1;
7671 	char *number;
7672 	int ret;
7673 
7674 	if (!tr)
7675 		return -ENODEV;
7676 
7677 	/* hash funcs only work with set_ftrace_filter */
7678 	if (!enable)
7679 		return -EINVAL;
7680 
7681 	ops = param ? &snapshot_count_probe_ops :  &snapshot_probe_ops;
7682 
7683 	if (glob[0] == '!')
7684 		return unregister_ftrace_function_probe_func(glob+1, tr, ops);
7685 
7686 	if (!param)
7687 		goto out_reg;
7688 
7689 	number = strsep(&param, ":");
7690 
7691 	if (!strlen(number))
7692 		goto out_reg;
7693 
7694 	/*
7695 	 * We use the callback data field (which is a pointer)
7696 	 * as our counter.
7697 	 */
7698 	ret = kstrtoul(number, 0, (unsigned long *)&count);
7699 	if (ret)
7700 		return ret;
7701 
7702  out_reg:
7703 	ret = tracing_alloc_snapshot_instance(tr);
7704 	if (ret < 0)
7705 		goto out;
7706 
7707 	ret = register_ftrace_function_probe(glob, tr, ops, count);
7708 
7709  out:
7710 	return ret < 0 ? ret : 0;
7711 }
7712 
7713 static struct ftrace_func_command ftrace_snapshot_cmd = {
7714 	.name			= "snapshot",
7715 	.func			= ftrace_trace_snapshot_callback,
7716 };
7717 
7718 static __init int register_snapshot_cmd(void)
7719 {
7720 	return register_ftrace_command(&ftrace_snapshot_cmd);
7721 }
7722 #else
7723 static inline __init int register_snapshot_cmd(void) { return 0; }
7724 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
7725 
7726 static struct dentry *tracing_get_dentry(struct trace_array *tr)
7727 {
7728 	if (WARN_ON(!tr->dir))
7729 		return ERR_PTR(-ENODEV);
7730 
7731 	/* Top directory uses NULL as the parent */
7732 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
7733 		return NULL;
7734 
7735 	/* All sub buffers have a descriptor */
7736 	return tr->dir;
7737 }
7738 
7739 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
7740 {
7741 	struct dentry *d_tracer;
7742 
7743 	if (tr->percpu_dir)
7744 		return tr->percpu_dir;
7745 
7746 	d_tracer = tracing_get_dentry(tr);
7747 	if (IS_ERR(d_tracer))
7748 		return NULL;
7749 
7750 	tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
7751 
7752 	WARN_ONCE(!tr->percpu_dir,
7753 		  "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
7754 
7755 	return tr->percpu_dir;
7756 }
7757 
7758 static struct dentry *
7759 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
7760 		      void *data, long cpu, const struct file_operations *fops)
7761 {
7762 	struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
7763 
7764 	if (ret) /* See tracing_get_cpu() */
7765 		d_inode(ret)->i_cdev = (void *)(cpu + 1);
7766 	return ret;
7767 }
7768 
7769 static void
7770 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
7771 {
7772 	struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
7773 	struct dentry *d_cpu;
7774 	char cpu_dir[30]; /* 30 characters should be more than enough */
7775 
7776 	if (!d_percpu)
7777 		return;
7778 
7779 	snprintf(cpu_dir, 30, "cpu%ld", cpu);
7780 	d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
7781 	if (!d_cpu) {
7782 		pr_warn("Could not create tracefs '%s' entry\n", cpu_dir);
7783 		return;
7784 	}
7785 
7786 	/* per cpu trace_pipe */
7787 	trace_create_cpu_file("trace_pipe", 0444, d_cpu,
7788 				tr, cpu, &tracing_pipe_fops);
7789 
7790 	/* per cpu trace */
7791 	trace_create_cpu_file("trace", 0644, d_cpu,
7792 				tr, cpu, &tracing_fops);
7793 
7794 	trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
7795 				tr, cpu, &tracing_buffers_fops);
7796 
7797 	trace_create_cpu_file("stats", 0444, d_cpu,
7798 				tr, cpu, &tracing_stats_fops);
7799 
7800 	trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
7801 				tr, cpu, &tracing_entries_fops);
7802 
7803 #ifdef CONFIG_TRACER_SNAPSHOT
7804 	trace_create_cpu_file("snapshot", 0644, d_cpu,
7805 				tr, cpu, &snapshot_fops);
7806 
7807 	trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
7808 				tr, cpu, &snapshot_raw_fops);
7809 #endif
7810 }
7811 
7812 #ifdef CONFIG_FTRACE_SELFTEST
7813 /* Let selftest have access to static functions in this file */
7814 #include "trace_selftest.c"
7815 #endif
7816 
7817 static ssize_t
7818 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
7819 			loff_t *ppos)
7820 {
7821 	struct trace_option_dentry *topt = filp->private_data;
7822 	char *buf;
7823 
7824 	if (topt->flags->val & topt->opt->bit)
7825 		buf = "1\n";
7826 	else
7827 		buf = "0\n";
7828 
7829 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
7830 }
7831 
7832 static ssize_t
7833 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
7834 			 loff_t *ppos)
7835 {
7836 	struct trace_option_dentry *topt = filp->private_data;
7837 	unsigned long val;
7838 	int ret;
7839 
7840 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7841 	if (ret)
7842 		return ret;
7843 
7844 	if (val != 0 && val != 1)
7845 		return -EINVAL;
7846 
7847 	if (!!(topt->flags->val & topt->opt->bit) != val) {
7848 		mutex_lock(&trace_types_lock);
7849 		ret = __set_tracer_option(topt->tr, topt->flags,
7850 					  topt->opt, !val);
7851 		mutex_unlock(&trace_types_lock);
7852 		if (ret)
7853 			return ret;
7854 	}
7855 
7856 	*ppos += cnt;
7857 
7858 	return cnt;
7859 }
7860 
7861 
7862 static const struct file_operations trace_options_fops = {
7863 	.open = tracing_open_generic,
7864 	.read = trace_options_read,
7865 	.write = trace_options_write,
7866 	.llseek	= generic_file_llseek,
7867 };
7868 
7869 /*
7870  * In order to pass in both the trace_array descriptor as well as the index
7871  * to the flag that the trace option file represents, the trace_array
7872  * has a character array of trace_flags_index[], which holds the index
7873  * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
7874  * The address of this character array is passed to the flag option file
7875  * read/write callbacks.
7876  *
7877  * In order to extract both the index and the trace_array descriptor,
7878  * get_tr_index() uses the following algorithm.
7879  *
7880  *   idx = *ptr;
7881  *
7882  * As the pointer itself contains the address of the index (remember
7883  * index[1] == 1).
7884  *
7885  * Then to get the trace_array descriptor, by subtracting that index
7886  * from the ptr, we get to the start of the index itself.
7887  *
7888  *   ptr - idx == &index[0]
7889  *
7890  * Then a simple container_of() from that pointer gets us to the
7891  * trace_array descriptor.
7892  */
7893 static void get_tr_index(void *data, struct trace_array **ptr,
7894 			 unsigned int *pindex)
7895 {
7896 	*pindex = *(unsigned char *)data;
7897 
7898 	*ptr = container_of(data - *pindex, struct trace_array,
7899 			    trace_flags_index);
7900 }
7901 
7902 static ssize_t
7903 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
7904 			loff_t *ppos)
7905 {
7906 	void *tr_index = filp->private_data;
7907 	struct trace_array *tr;
7908 	unsigned int index;
7909 	char *buf;
7910 
7911 	get_tr_index(tr_index, &tr, &index);
7912 
7913 	if (tr->trace_flags & (1 << index))
7914 		buf = "1\n";
7915 	else
7916 		buf = "0\n";
7917 
7918 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
7919 }
7920 
7921 static ssize_t
7922 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
7923 			 loff_t *ppos)
7924 {
7925 	void *tr_index = filp->private_data;
7926 	struct trace_array *tr;
7927 	unsigned int index;
7928 	unsigned long val;
7929 	int ret;
7930 
7931 	get_tr_index(tr_index, &tr, &index);
7932 
7933 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7934 	if (ret)
7935 		return ret;
7936 
7937 	if (val != 0 && val != 1)
7938 		return -EINVAL;
7939 
7940 	mutex_lock(&trace_types_lock);
7941 	ret = set_tracer_flag(tr, 1 << index, val);
7942 	mutex_unlock(&trace_types_lock);
7943 
7944 	if (ret < 0)
7945 		return ret;
7946 
7947 	*ppos += cnt;
7948 
7949 	return cnt;
7950 }
7951 
7952 static const struct file_operations trace_options_core_fops = {
7953 	.open = tracing_open_generic,
7954 	.read = trace_options_core_read,
7955 	.write = trace_options_core_write,
7956 	.llseek = generic_file_llseek,
7957 };
7958 
7959 struct dentry *trace_create_file(const char *name,
7960 				 umode_t mode,
7961 				 struct dentry *parent,
7962 				 void *data,
7963 				 const struct file_operations *fops)
7964 {
7965 	struct dentry *ret;
7966 
7967 	ret = tracefs_create_file(name, mode, parent, data, fops);
7968 	if (!ret)
7969 		pr_warn("Could not create tracefs '%s' entry\n", name);
7970 
7971 	return ret;
7972 }
7973 
7974 
7975 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
7976 {
7977 	struct dentry *d_tracer;
7978 
7979 	if (tr->options)
7980 		return tr->options;
7981 
7982 	d_tracer = tracing_get_dentry(tr);
7983 	if (IS_ERR(d_tracer))
7984 		return NULL;
7985 
7986 	tr->options = tracefs_create_dir("options", d_tracer);
7987 	if (!tr->options) {
7988 		pr_warn("Could not create tracefs directory 'options'\n");
7989 		return NULL;
7990 	}
7991 
7992 	return tr->options;
7993 }
7994 
7995 static void
7996 create_trace_option_file(struct trace_array *tr,
7997 			 struct trace_option_dentry *topt,
7998 			 struct tracer_flags *flags,
7999 			 struct tracer_opt *opt)
8000 {
8001 	struct dentry *t_options;
8002 
8003 	t_options = trace_options_init_dentry(tr);
8004 	if (!t_options)
8005 		return;
8006 
8007 	topt->flags = flags;
8008 	topt->opt = opt;
8009 	topt->tr = tr;
8010 
8011 	topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
8012 				    &trace_options_fops);
8013 
8014 }
8015 
8016 static void
8017 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
8018 {
8019 	struct trace_option_dentry *topts;
8020 	struct trace_options *tr_topts;
8021 	struct tracer_flags *flags;
8022 	struct tracer_opt *opts;
8023 	int cnt;
8024 	int i;
8025 
8026 	if (!tracer)
8027 		return;
8028 
8029 	flags = tracer->flags;
8030 
8031 	if (!flags || !flags->opts)
8032 		return;
8033 
8034 	/*
8035 	 * If this is an instance, only create flags for tracers
8036 	 * the instance may have.
8037 	 */
8038 	if (!trace_ok_for_array(tracer, tr))
8039 		return;
8040 
8041 	for (i = 0; i < tr->nr_topts; i++) {
8042 		/* Make sure there's no duplicate flags. */
8043 		if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags))
8044 			return;
8045 	}
8046 
8047 	opts = flags->opts;
8048 
8049 	for (cnt = 0; opts[cnt].name; cnt++)
8050 		;
8051 
8052 	topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
8053 	if (!topts)
8054 		return;
8055 
8056 	tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
8057 			    GFP_KERNEL);
8058 	if (!tr_topts) {
8059 		kfree(topts);
8060 		return;
8061 	}
8062 
8063 	tr->topts = tr_topts;
8064 	tr->topts[tr->nr_topts].tracer = tracer;
8065 	tr->topts[tr->nr_topts].topts = topts;
8066 	tr->nr_topts++;
8067 
8068 	for (cnt = 0; opts[cnt].name; cnt++) {
8069 		create_trace_option_file(tr, &topts[cnt], flags,
8070 					 &opts[cnt]);
8071 		WARN_ONCE(topts[cnt].entry == NULL,
8072 			  "Failed to create trace option: %s",
8073 			  opts[cnt].name);
8074 	}
8075 }
8076 
8077 static struct dentry *
8078 create_trace_option_core_file(struct trace_array *tr,
8079 			      const char *option, long index)
8080 {
8081 	struct dentry *t_options;
8082 
8083 	t_options = trace_options_init_dentry(tr);
8084 	if (!t_options)
8085 		return NULL;
8086 
8087 	return trace_create_file(option, 0644, t_options,
8088 				 (void *)&tr->trace_flags_index[index],
8089 				 &trace_options_core_fops);
8090 }
8091 
8092 static void create_trace_options_dir(struct trace_array *tr)
8093 {
8094 	struct dentry *t_options;
8095 	bool top_level = tr == &global_trace;
8096 	int i;
8097 
8098 	t_options = trace_options_init_dentry(tr);
8099 	if (!t_options)
8100 		return;
8101 
8102 	for (i = 0; trace_options[i]; i++) {
8103 		if (top_level ||
8104 		    !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
8105 			create_trace_option_core_file(tr, trace_options[i], i);
8106 	}
8107 }
8108 
8109 static ssize_t
8110 rb_simple_read(struct file *filp, char __user *ubuf,
8111 	       size_t cnt, loff_t *ppos)
8112 {
8113 	struct trace_array *tr = filp->private_data;
8114 	char buf[64];
8115 	int r;
8116 
8117 	r = tracer_tracing_is_on(tr);
8118 	r = sprintf(buf, "%d\n", r);
8119 
8120 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
8121 }
8122 
8123 static ssize_t
8124 rb_simple_write(struct file *filp, const char __user *ubuf,
8125 		size_t cnt, loff_t *ppos)
8126 {
8127 	struct trace_array *tr = filp->private_data;
8128 	struct ring_buffer *buffer = tr->trace_buffer.buffer;
8129 	unsigned long val;
8130 	int ret;
8131 
8132 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8133 	if (ret)
8134 		return ret;
8135 
8136 	if (buffer) {
8137 		mutex_lock(&trace_types_lock);
8138 		if (!!val == tracer_tracing_is_on(tr)) {
8139 			val = 0; /* do nothing */
8140 		} else if (val) {
8141 			tracer_tracing_on(tr);
8142 			if (tr->current_trace->start)
8143 				tr->current_trace->start(tr);
8144 		} else {
8145 			tracer_tracing_off(tr);
8146 			if (tr->current_trace->stop)
8147 				tr->current_trace->stop(tr);
8148 		}
8149 		mutex_unlock(&trace_types_lock);
8150 	}
8151 
8152 	(*ppos)++;
8153 
8154 	return cnt;
8155 }
8156 
8157 static const struct file_operations rb_simple_fops = {
8158 	.open		= tracing_open_generic_tr,
8159 	.read		= rb_simple_read,
8160 	.write		= rb_simple_write,
8161 	.release	= tracing_release_generic_tr,
8162 	.llseek		= default_llseek,
8163 };
8164 
8165 static ssize_t
8166 buffer_percent_read(struct file *filp, char __user *ubuf,
8167 		    size_t cnt, loff_t *ppos)
8168 {
8169 	struct trace_array *tr = filp->private_data;
8170 	char buf[64];
8171 	int r;
8172 
8173 	r = tr->buffer_percent;
8174 	r = sprintf(buf, "%d\n", r);
8175 
8176 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
8177 }
8178 
8179 static ssize_t
8180 buffer_percent_write(struct file *filp, const char __user *ubuf,
8181 		     size_t cnt, loff_t *ppos)
8182 {
8183 	struct trace_array *tr = filp->private_data;
8184 	unsigned long val;
8185 	int ret;
8186 
8187 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8188 	if (ret)
8189 		return ret;
8190 
8191 	if (val > 100)
8192 		return -EINVAL;
8193 
8194 	if (!val)
8195 		val = 1;
8196 
8197 	tr->buffer_percent = val;
8198 
8199 	(*ppos)++;
8200 
8201 	return cnt;
8202 }
8203 
8204 static const struct file_operations buffer_percent_fops = {
8205 	.open		= tracing_open_generic_tr,
8206 	.read		= buffer_percent_read,
8207 	.write		= buffer_percent_write,
8208 	.release	= tracing_release_generic_tr,
8209 	.llseek		= default_llseek,
8210 };
8211 
8212 static struct dentry *trace_instance_dir;
8213 
8214 static void
8215 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
8216 
8217 static int
8218 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
8219 {
8220 	enum ring_buffer_flags rb_flags;
8221 
8222 	rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
8223 
8224 	buf->tr = tr;
8225 
8226 	buf->buffer = ring_buffer_alloc(size, rb_flags);
8227 	if (!buf->buffer)
8228 		return -ENOMEM;
8229 
8230 	buf->data = alloc_percpu(struct trace_array_cpu);
8231 	if (!buf->data) {
8232 		ring_buffer_free(buf->buffer);
8233 		buf->buffer = NULL;
8234 		return -ENOMEM;
8235 	}
8236 
8237 	/* Allocate the first page for all buffers */
8238 	set_buffer_entries(&tr->trace_buffer,
8239 			   ring_buffer_size(tr->trace_buffer.buffer, 0));
8240 
8241 	return 0;
8242 }
8243 
8244 static int allocate_trace_buffers(struct trace_array *tr, int size)
8245 {
8246 	int ret;
8247 
8248 	ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
8249 	if (ret)
8250 		return ret;
8251 
8252 #ifdef CONFIG_TRACER_MAX_TRACE
8253 	ret = allocate_trace_buffer(tr, &tr->max_buffer,
8254 				    allocate_snapshot ? size : 1);
8255 	if (WARN_ON(ret)) {
8256 		ring_buffer_free(tr->trace_buffer.buffer);
8257 		tr->trace_buffer.buffer = NULL;
8258 		free_percpu(tr->trace_buffer.data);
8259 		tr->trace_buffer.data = NULL;
8260 		return -ENOMEM;
8261 	}
8262 	tr->allocated_snapshot = allocate_snapshot;
8263 
8264 	/*
8265 	 * Only the top level trace array gets its snapshot allocated
8266 	 * from the kernel command line.
8267 	 */
8268 	allocate_snapshot = false;
8269 #endif
8270 	return 0;
8271 }
8272 
8273 static void free_trace_buffer(struct trace_buffer *buf)
8274 {
8275 	if (buf->buffer) {
8276 		ring_buffer_free(buf->buffer);
8277 		buf->buffer = NULL;
8278 		free_percpu(buf->data);
8279 		buf->data = NULL;
8280 	}
8281 }
8282 
8283 static void free_trace_buffers(struct trace_array *tr)
8284 {
8285 	if (!tr)
8286 		return;
8287 
8288 	free_trace_buffer(&tr->trace_buffer);
8289 
8290 #ifdef CONFIG_TRACER_MAX_TRACE
8291 	free_trace_buffer(&tr->max_buffer);
8292 #endif
8293 }
8294 
8295 static void init_trace_flags_index(struct trace_array *tr)
8296 {
8297 	int i;
8298 
8299 	/* Used by the trace options files */
8300 	for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
8301 		tr->trace_flags_index[i] = i;
8302 }
8303 
8304 static void __update_tracer_options(struct trace_array *tr)
8305 {
8306 	struct tracer *t;
8307 
8308 	for (t = trace_types; t; t = t->next)
8309 		add_tracer_options(tr, t);
8310 }
8311 
8312 static void update_tracer_options(struct trace_array *tr)
8313 {
8314 	mutex_lock(&trace_types_lock);
8315 	__update_tracer_options(tr);
8316 	mutex_unlock(&trace_types_lock);
8317 }
8318 
8319 struct trace_array *trace_array_create(const char *name)
8320 {
8321 	struct trace_array *tr;
8322 	int ret;
8323 
8324 	mutex_lock(&event_mutex);
8325 	mutex_lock(&trace_types_lock);
8326 
8327 	ret = -EEXIST;
8328 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
8329 		if (tr->name && strcmp(tr->name, name) == 0)
8330 			goto out_unlock;
8331 	}
8332 
8333 	ret = -ENOMEM;
8334 	tr = kzalloc(sizeof(*tr), GFP_KERNEL);
8335 	if (!tr)
8336 		goto out_unlock;
8337 
8338 	tr->name = kstrdup(name, GFP_KERNEL);
8339 	if (!tr->name)
8340 		goto out_free_tr;
8341 
8342 	if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
8343 		goto out_free_tr;
8344 
8345 	tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS;
8346 
8347 	cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
8348 
8349 	raw_spin_lock_init(&tr->start_lock);
8350 
8351 	tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
8352 
8353 	tr->current_trace = &nop_trace;
8354 
8355 	INIT_LIST_HEAD(&tr->systems);
8356 	INIT_LIST_HEAD(&tr->events);
8357 	INIT_LIST_HEAD(&tr->hist_vars);
8358 	INIT_LIST_HEAD(&tr->err_log);
8359 
8360 	if (allocate_trace_buffers(tr, trace_buf_size) < 0)
8361 		goto out_free_tr;
8362 
8363 	tr->dir = tracefs_create_dir(name, trace_instance_dir);
8364 	if (!tr->dir)
8365 		goto out_free_tr;
8366 
8367 	ret = event_trace_add_tracer(tr->dir, tr);
8368 	if (ret) {
8369 		tracefs_remove_recursive(tr->dir);
8370 		goto out_free_tr;
8371 	}
8372 
8373 	ftrace_init_trace_array(tr);
8374 
8375 	init_tracer_tracefs(tr, tr->dir);
8376 	init_trace_flags_index(tr);
8377 	__update_tracer_options(tr);
8378 
8379 	list_add(&tr->list, &ftrace_trace_arrays);
8380 
8381 	mutex_unlock(&trace_types_lock);
8382 	mutex_unlock(&event_mutex);
8383 
8384 	return tr;
8385 
8386  out_free_tr:
8387 	free_trace_buffers(tr);
8388 	free_cpumask_var(tr->tracing_cpumask);
8389 	kfree(tr->name);
8390 	kfree(tr);
8391 
8392  out_unlock:
8393 	mutex_unlock(&trace_types_lock);
8394 	mutex_unlock(&event_mutex);
8395 
8396 	return ERR_PTR(ret);
8397 }
8398 EXPORT_SYMBOL_GPL(trace_array_create);
8399 
8400 static int instance_mkdir(const char *name)
8401 {
8402 	return PTR_ERR_OR_ZERO(trace_array_create(name));
8403 }
8404 
8405 static int __remove_instance(struct trace_array *tr)
8406 {
8407 	int i;
8408 
8409 	if (tr->ref || (tr->current_trace && tr->current_trace->ref))
8410 		return -EBUSY;
8411 
8412 	list_del(&tr->list);
8413 
8414 	/* Disable all the flags that were enabled coming in */
8415 	for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) {
8416 		if ((1 << i) & ZEROED_TRACE_FLAGS)
8417 			set_tracer_flag(tr, 1 << i, 0);
8418 	}
8419 
8420 	tracing_set_nop(tr);
8421 	clear_ftrace_function_probes(tr);
8422 	event_trace_del_tracer(tr);
8423 	ftrace_clear_pids(tr);
8424 	ftrace_destroy_function_files(tr);
8425 	tracefs_remove_recursive(tr->dir);
8426 	free_trace_buffers(tr);
8427 
8428 	for (i = 0; i < tr->nr_topts; i++) {
8429 		kfree(tr->topts[i].topts);
8430 	}
8431 	kfree(tr->topts);
8432 
8433 	free_cpumask_var(tr->tracing_cpumask);
8434 	kfree(tr->name);
8435 	kfree(tr);
8436 	tr = NULL;
8437 
8438 	return 0;
8439 }
8440 
8441 int trace_array_destroy(struct trace_array *tr)
8442 {
8443 	int ret;
8444 
8445 	if (!tr)
8446 		return -EINVAL;
8447 
8448 	mutex_lock(&event_mutex);
8449 	mutex_lock(&trace_types_lock);
8450 
8451 	ret = __remove_instance(tr);
8452 
8453 	mutex_unlock(&trace_types_lock);
8454 	mutex_unlock(&event_mutex);
8455 
8456 	return ret;
8457 }
8458 EXPORT_SYMBOL_GPL(trace_array_destroy);
8459 
8460 static int instance_rmdir(const char *name)
8461 {
8462 	struct trace_array *tr;
8463 	int ret;
8464 
8465 	mutex_lock(&event_mutex);
8466 	mutex_lock(&trace_types_lock);
8467 
8468 	ret = -ENODEV;
8469 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
8470 		if (tr->name && strcmp(tr->name, name) == 0) {
8471 			ret = __remove_instance(tr);
8472 			break;
8473 		}
8474 	}
8475 
8476 	mutex_unlock(&trace_types_lock);
8477 	mutex_unlock(&event_mutex);
8478 
8479 	return ret;
8480 }
8481 
8482 static __init void create_trace_instances(struct dentry *d_tracer)
8483 {
8484 	trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
8485 							 instance_mkdir,
8486 							 instance_rmdir);
8487 	if (WARN_ON(!trace_instance_dir))
8488 		return;
8489 }
8490 
8491 static void
8492 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
8493 {
8494 	struct trace_event_file *file;
8495 	int cpu;
8496 
8497 	trace_create_file("available_tracers", 0444, d_tracer,
8498 			tr, &show_traces_fops);
8499 
8500 	trace_create_file("current_tracer", 0644, d_tracer,
8501 			tr, &set_tracer_fops);
8502 
8503 	trace_create_file("tracing_cpumask", 0644, d_tracer,
8504 			  tr, &tracing_cpumask_fops);
8505 
8506 	trace_create_file("trace_options", 0644, d_tracer,
8507 			  tr, &tracing_iter_fops);
8508 
8509 	trace_create_file("trace", 0644, d_tracer,
8510 			  tr, &tracing_fops);
8511 
8512 	trace_create_file("trace_pipe", 0444, d_tracer,
8513 			  tr, &tracing_pipe_fops);
8514 
8515 	trace_create_file("buffer_size_kb", 0644, d_tracer,
8516 			  tr, &tracing_entries_fops);
8517 
8518 	trace_create_file("buffer_total_size_kb", 0444, d_tracer,
8519 			  tr, &tracing_total_entries_fops);
8520 
8521 	trace_create_file("free_buffer", 0200, d_tracer,
8522 			  tr, &tracing_free_buffer_fops);
8523 
8524 	trace_create_file("trace_marker", 0220, d_tracer,
8525 			  tr, &tracing_mark_fops);
8526 
8527 	file = __find_event_file(tr, "ftrace", "print");
8528 	if (file && file->dir)
8529 		trace_create_file("trigger", 0644, file->dir, file,
8530 				  &event_trigger_fops);
8531 	tr->trace_marker_file = file;
8532 
8533 	trace_create_file("trace_marker_raw", 0220, d_tracer,
8534 			  tr, &tracing_mark_raw_fops);
8535 
8536 	trace_create_file("trace_clock", 0644, d_tracer, tr,
8537 			  &trace_clock_fops);
8538 
8539 	trace_create_file("tracing_on", 0644, d_tracer,
8540 			  tr, &rb_simple_fops);
8541 
8542 	trace_create_file("timestamp_mode", 0444, d_tracer, tr,
8543 			  &trace_time_stamp_mode_fops);
8544 
8545 	tr->buffer_percent = 50;
8546 
8547 	trace_create_file("buffer_percent", 0444, d_tracer,
8548 			tr, &buffer_percent_fops);
8549 
8550 	create_trace_options_dir(tr);
8551 
8552 #if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
8553 	trace_create_file("tracing_max_latency", 0644, d_tracer,
8554 			&tr->max_latency, &tracing_max_lat_fops);
8555 #endif
8556 
8557 	if (ftrace_create_function_files(tr, d_tracer))
8558 		WARN(1, "Could not allocate function filter files");
8559 
8560 #ifdef CONFIG_TRACER_SNAPSHOT
8561 	trace_create_file("snapshot", 0644, d_tracer,
8562 			  tr, &snapshot_fops);
8563 #endif
8564 
8565 	trace_create_file("error_log", 0644, d_tracer,
8566 			  tr, &tracing_err_log_fops);
8567 
8568 	for_each_tracing_cpu(cpu)
8569 		tracing_init_tracefs_percpu(tr, cpu);
8570 
8571 	ftrace_init_tracefs(tr, d_tracer);
8572 }
8573 
8574 static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore)
8575 {
8576 	struct vfsmount *mnt;
8577 	struct file_system_type *type;
8578 
8579 	/*
8580 	 * To maintain backward compatibility for tools that mount
8581 	 * debugfs to get to the tracing facility, tracefs is automatically
8582 	 * mounted to the debugfs/tracing directory.
8583 	 */
8584 	type = get_fs_type("tracefs");
8585 	if (!type)
8586 		return NULL;
8587 	mnt = vfs_submount(mntpt, type, "tracefs", NULL);
8588 	put_filesystem(type);
8589 	if (IS_ERR(mnt))
8590 		return NULL;
8591 	mntget(mnt);
8592 
8593 	return mnt;
8594 }
8595 
8596 /**
8597  * tracing_init_dentry - initialize top level trace array
8598  *
8599  * This is called when creating files or directories in the tracing
8600  * directory. It is called via fs_initcall() by any of the boot up code
8601  * and expects to return the dentry of the top level tracing directory.
8602  */
8603 struct dentry *tracing_init_dentry(void)
8604 {
8605 	struct trace_array *tr = &global_trace;
8606 
8607 	/* The top level trace array uses  NULL as parent */
8608 	if (tr->dir)
8609 		return NULL;
8610 
8611 	if (WARN_ON(!tracefs_initialized()) ||
8612 		(IS_ENABLED(CONFIG_DEBUG_FS) &&
8613 		 WARN_ON(!debugfs_initialized())))
8614 		return ERR_PTR(-ENODEV);
8615 
8616 	/*
8617 	 * As there may still be users that expect the tracing
8618 	 * files to exist in debugfs/tracing, we must automount
8619 	 * the tracefs file system there, so older tools still
8620 	 * work with the newer kerenl.
8621 	 */
8622 	tr->dir = debugfs_create_automount("tracing", NULL,
8623 					   trace_automount, NULL);
8624 
8625 	return NULL;
8626 }
8627 
8628 extern struct trace_eval_map *__start_ftrace_eval_maps[];
8629 extern struct trace_eval_map *__stop_ftrace_eval_maps[];
8630 
8631 static void __init trace_eval_init(void)
8632 {
8633 	int len;
8634 
8635 	len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps;
8636 	trace_insert_eval_map(NULL, __start_ftrace_eval_maps, len);
8637 }
8638 
8639 #ifdef CONFIG_MODULES
8640 static void trace_module_add_evals(struct module *mod)
8641 {
8642 	if (!mod->num_trace_evals)
8643 		return;
8644 
8645 	/*
8646 	 * Modules with bad taint do not have events created, do
8647 	 * not bother with enums either.
8648 	 */
8649 	if (trace_module_has_bad_taint(mod))
8650 		return;
8651 
8652 	trace_insert_eval_map(mod, mod->trace_evals, mod->num_trace_evals);
8653 }
8654 
8655 #ifdef CONFIG_TRACE_EVAL_MAP_FILE
8656 static void trace_module_remove_evals(struct module *mod)
8657 {
8658 	union trace_eval_map_item *map;
8659 	union trace_eval_map_item **last = &trace_eval_maps;
8660 
8661 	if (!mod->num_trace_evals)
8662 		return;
8663 
8664 	mutex_lock(&trace_eval_mutex);
8665 
8666 	map = trace_eval_maps;
8667 
8668 	while (map) {
8669 		if (map->head.mod == mod)
8670 			break;
8671 		map = trace_eval_jmp_to_tail(map);
8672 		last = &map->tail.next;
8673 		map = map->tail.next;
8674 	}
8675 	if (!map)
8676 		goto out;
8677 
8678 	*last = trace_eval_jmp_to_tail(map)->tail.next;
8679 	kfree(map);
8680  out:
8681 	mutex_unlock(&trace_eval_mutex);
8682 }
8683 #else
8684 static inline void trace_module_remove_evals(struct module *mod) { }
8685 #endif /* CONFIG_TRACE_EVAL_MAP_FILE */
8686 
8687 static int trace_module_notify(struct notifier_block *self,
8688 			       unsigned long val, void *data)
8689 {
8690 	struct module *mod = data;
8691 
8692 	switch (val) {
8693 	case MODULE_STATE_COMING:
8694 		trace_module_add_evals(mod);
8695 		break;
8696 	case MODULE_STATE_GOING:
8697 		trace_module_remove_evals(mod);
8698 		break;
8699 	}
8700 
8701 	return 0;
8702 }
8703 
8704 static struct notifier_block trace_module_nb = {
8705 	.notifier_call = trace_module_notify,
8706 	.priority = 0,
8707 };
8708 #endif /* CONFIG_MODULES */
8709 
8710 static __init int tracer_init_tracefs(void)
8711 {
8712 	struct dentry *d_tracer;
8713 
8714 	trace_access_lock_init();
8715 
8716 	d_tracer = tracing_init_dentry();
8717 	if (IS_ERR(d_tracer))
8718 		return 0;
8719 
8720 	event_trace_init();
8721 
8722 	init_tracer_tracefs(&global_trace, d_tracer);
8723 	ftrace_init_tracefs_toplevel(&global_trace, d_tracer);
8724 
8725 	trace_create_file("tracing_thresh", 0644, d_tracer,
8726 			&global_trace, &tracing_thresh_fops);
8727 
8728 	trace_create_file("README", 0444, d_tracer,
8729 			NULL, &tracing_readme_fops);
8730 
8731 	trace_create_file("saved_cmdlines", 0444, d_tracer,
8732 			NULL, &tracing_saved_cmdlines_fops);
8733 
8734 	trace_create_file("saved_cmdlines_size", 0644, d_tracer,
8735 			  NULL, &tracing_saved_cmdlines_size_fops);
8736 
8737 	trace_create_file("saved_tgids", 0444, d_tracer,
8738 			NULL, &tracing_saved_tgids_fops);
8739 
8740 	trace_eval_init();
8741 
8742 	trace_create_eval_file(d_tracer);
8743 
8744 #ifdef CONFIG_MODULES
8745 	register_module_notifier(&trace_module_nb);
8746 #endif
8747 
8748 #ifdef CONFIG_DYNAMIC_FTRACE
8749 	trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
8750 			&ftrace_update_tot_cnt, &tracing_dyn_info_fops);
8751 #endif
8752 
8753 	create_trace_instances(d_tracer);
8754 
8755 	update_tracer_options(&global_trace);
8756 
8757 	return 0;
8758 }
8759 
8760 static int trace_panic_handler(struct notifier_block *this,
8761 			       unsigned long event, void *unused)
8762 {
8763 	if (ftrace_dump_on_oops)
8764 		ftrace_dump(ftrace_dump_on_oops);
8765 	return NOTIFY_OK;
8766 }
8767 
8768 static struct notifier_block trace_panic_notifier = {
8769 	.notifier_call  = trace_panic_handler,
8770 	.next           = NULL,
8771 	.priority       = 150   /* priority: INT_MAX >= x >= 0 */
8772 };
8773 
8774 static int trace_die_handler(struct notifier_block *self,
8775 			     unsigned long val,
8776 			     void *data)
8777 {
8778 	switch (val) {
8779 	case DIE_OOPS:
8780 		if (ftrace_dump_on_oops)
8781 			ftrace_dump(ftrace_dump_on_oops);
8782 		break;
8783 	default:
8784 		break;
8785 	}
8786 	return NOTIFY_OK;
8787 }
8788 
8789 static struct notifier_block trace_die_notifier = {
8790 	.notifier_call = trace_die_handler,
8791 	.priority = 200
8792 };
8793 
8794 /*
8795  * printk is set to max of 1024, we really don't need it that big.
8796  * Nothing should be printing 1000 characters anyway.
8797  */
8798 #define TRACE_MAX_PRINT		1000
8799 
8800 /*
8801  * Define here KERN_TRACE so that we have one place to modify
8802  * it if we decide to change what log level the ftrace dump
8803  * should be at.
8804  */
8805 #define KERN_TRACE		KERN_EMERG
8806 
8807 void
8808 trace_printk_seq(struct trace_seq *s)
8809 {
8810 	/* Probably should print a warning here. */
8811 	if (s->seq.len >= TRACE_MAX_PRINT)
8812 		s->seq.len = TRACE_MAX_PRINT;
8813 
8814 	/*
8815 	 * More paranoid code. Although the buffer size is set to
8816 	 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
8817 	 * an extra layer of protection.
8818 	 */
8819 	if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
8820 		s->seq.len = s->seq.size - 1;
8821 
8822 	/* should be zero ended, but we are paranoid. */
8823 	s->buffer[s->seq.len] = 0;
8824 
8825 	printk(KERN_TRACE "%s", s->buffer);
8826 
8827 	trace_seq_init(s);
8828 }
8829 
8830 void trace_init_global_iter(struct trace_iterator *iter)
8831 {
8832 	iter->tr = &global_trace;
8833 	iter->trace = iter->tr->current_trace;
8834 	iter->cpu_file = RING_BUFFER_ALL_CPUS;
8835 	iter->trace_buffer = &global_trace.trace_buffer;
8836 
8837 	if (iter->trace && iter->trace->open)
8838 		iter->trace->open(iter);
8839 
8840 	/* Annotate start of buffers if we had overruns */
8841 	if (ring_buffer_overruns(iter->trace_buffer->buffer))
8842 		iter->iter_flags |= TRACE_FILE_ANNOTATE;
8843 
8844 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
8845 	if (trace_clocks[iter->tr->clock_id].in_ns)
8846 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
8847 }
8848 
8849 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
8850 {
8851 	/* use static because iter can be a bit big for the stack */
8852 	static struct trace_iterator iter;
8853 	static atomic_t dump_running;
8854 	struct trace_array *tr = &global_trace;
8855 	unsigned int old_userobj;
8856 	unsigned long flags;
8857 	int cnt = 0, cpu;
8858 
8859 	/* Only allow one dump user at a time. */
8860 	if (atomic_inc_return(&dump_running) != 1) {
8861 		atomic_dec(&dump_running);
8862 		return;
8863 	}
8864 
8865 	/*
8866 	 * Always turn off tracing when we dump.
8867 	 * We don't need to show trace output of what happens
8868 	 * between multiple crashes.
8869 	 *
8870 	 * If the user does a sysrq-z, then they can re-enable
8871 	 * tracing with echo 1 > tracing_on.
8872 	 */
8873 	tracing_off();
8874 
8875 	local_irq_save(flags);
8876 	printk_nmi_direct_enter();
8877 
8878 	/* Simulate the iterator */
8879 	trace_init_global_iter(&iter);
8880 
8881 	for_each_tracing_cpu(cpu) {
8882 		atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
8883 	}
8884 
8885 	old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
8886 
8887 	/* don't look at user memory in panic mode */
8888 	tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
8889 
8890 	switch (oops_dump_mode) {
8891 	case DUMP_ALL:
8892 		iter.cpu_file = RING_BUFFER_ALL_CPUS;
8893 		break;
8894 	case DUMP_ORIG:
8895 		iter.cpu_file = raw_smp_processor_id();
8896 		break;
8897 	case DUMP_NONE:
8898 		goto out_enable;
8899 	default:
8900 		printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
8901 		iter.cpu_file = RING_BUFFER_ALL_CPUS;
8902 	}
8903 
8904 	printk(KERN_TRACE "Dumping ftrace buffer:\n");
8905 
8906 	/* Did function tracer already get disabled? */
8907 	if (ftrace_is_dead()) {
8908 		printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
8909 		printk("#          MAY BE MISSING FUNCTION EVENTS\n");
8910 	}
8911 
8912 	/*
8913 	 * We need to stop all tracing on all CPUS to read the
8914 	 * the next buffer. This is a bit expensive, but is
8915 	 * not done often. We fill all what we can read,
8916 	 * and then release the locks again.
8917 	 */
8918 
8919 	while (!trace_empty(&iter)) {
8920 
8921 		if (!cnt)
8922 			printk(KERN_TRACE "---------------------------------\n");
8923 
8924 		cnt++;
8925 
8926 		trace_iterator_reset(&iter);
8927 		iter.iter_flags |= TRACE_FILE_LAT_FMT;
8928 
8929 		if (trace_find_next_entry_inc(&iter) != NULL) {
8930 			int ret;
8931 
8932 			ret = print_trace_line(&iter);
8933 			if (ret != TRACE_TYPE_NO_CONSUME)
8934 				trace_consume(&iter);
8935 		}
8936 		touch_nmi_watchdog();
8937 
8938 		trace_printk_seq(&iter.seq);
8939 	}
8940 
8941 	if (!cnt)
8942 		printk(KERN_TRACE "   (ftrace buffer empty)\n");
8943 	else
8944 		printk(KERN_TRACE "---------------------------------\n");
8945 
8946  out_enable:
8947 	tr->trace_flags |= old_userobj;
8948 
8949 	for_each_tracing_cpu(cpu) {
8950 		atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
8951 	}
8952 	atomic_dec(&dump_running);
8953 	printk_nmi_direct_exit();
8954 	local_irq_restore(flags);
8955 }
8956 EXPORT_SYMBOL_GPL(ftrace_dump);
8957 
8958 int trace_run_command(const char *buf, int (*createfn)(int, char **))
8959 {
8960 	char **argv;
8961 	int argc, ret;
8962 
8963 	argc = 0;
8964 	ret = 0;
8965 	argv = argv_split(GFP_KERNEL, buf, &argc);
8966 	if (!argv)
8967 		return -ENOMEM;
8968 
8969 	if (argc)
8970 		ret = createfn(argc, argv);
8971 
8972 	argv_free(argv);
8973 
8974 	return ret;
8975 }
8976 
8977 #define WRITE_BUFSIZE  4096
8978 
8979 ssize_t trace_parse_run_command(struct file *file, const char __user *buffer,
8980 				size_t count, loff_t *ppos,
8981 				int (*createfn)(int, char **))
8982 {
8983 	char *kbuf, *buf, *tmp;
8984 	int ret = 0;
8985 	size_t done = 0;
8986 	size_t size;
8987 
8988 	kbuf = kmalloc(WRITE_BUFSIZE, GFP_KERNEL);
8989 	if (!kbuf)
8990 		return -ENOMEM;
8991 
8992 	while (done < count) {
8993 		size = count - done;
8994 
8995 		if (size >= WRITE_BUFSIZE)
8996 			size = WRITE_BUFSIZE - 1;
8997 
8998 		if (copy_from_user(kbuf, buffer + done, size)) {
8999 			ret = -EFAULT;
9000 			goto out;
9001 		}
9002 		kbuf[size] = '\0';
9003 		buf = kbuf;
9004 		do {
9005 			tmp = strchr(buf, '\n');
9006 			if (tmp) {
9007 				*tmp = '\0';
9008 				size = tmp - buf + 1;
9009 			} else {
9010 				size = strlen(buf);
9011 				if (done + size < count) {
9012 					if (buf != kbuf)
9013 						break;
9014 					/* This can accept WRITE_BUFSIZE - 2 ('\n' + '\0') */
9015 					pr_warn("Line length is too long: Should be less than %d\n",
9016 						WRITE_BUFSIZE - 2);
9017 					ret = -EINVAL;
9018 					goto out;
9019 				}
9020 			}
9021 			done += size;
9022 
9023 			/* Remove comments */
9024 			tmp = strchr(buf, '#');
9025 
9026 			if (tmp)
9027 				*tmp = '\0';
9028 
9029 			ret = trace_run_command(buf, createfn);
9030 			if (ret)
9031 				goto out;
9032 			buf += size;
9033 
9034 		} while (done < count);
9035 	}
9036 	ret = done;
9037 
9038 out:
9039 	kfree(kbuf);
9040 
9041 	return ret;
9042 }
9043 
9044 __init static int tracer_alloc_buffers(void)
9045 {
9046 	int ring_buf_size;
9047 	int ret = -ENOMEM;
9048 
9049 	/*
9050 	 * Make sure we don't accidently add more trace options
9051 	 * than we have bits for.
9052 	 */
9053 	BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
9054 
9055 	if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
9056 		goto out;
9057 
9058 	if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
9059 		goto out_free_buffer_mask;
9060 
9061 	/* Only allocate trace_printk buffers if a trace_printk exists */
9062 	if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
9063 		/* Must be called before global_trace.buffer is allocated */
9064 		trace_printk_init_buffers();
9065 
9066 	/* To save memory, keep the ring buffer size to its minimum */
9067 	if (ring_buffer_expanded)
9068 		ring_buf_size = trace_buf_size;
9069 	else
9070 		ring_buf_size = 1;
9071 
9072 	cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
9073 	cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
9074 
9075 	raw_spin_lock_init(&global_trace.start_lock);
9076 
9077 	/*
9078 	 * The prepare callbacks allocates some memory for the ring buffer. We
9079 	 * don't free the buffer if the if the CPU goes down. If we were to free
9080 	 * the buffer, then the user would lose any trace that was in the
9081 	 * buffer. The memory will be removed once the "instance" is removed.
9082 	 */
9083 	ret = cpuhp_setup_state_multi(CPUHP_TRACE_RB_PREPARE,
9084 				      "trace/RB:preapre", trace_rb_cpu_prepare,
9085 				      NULL);
9086 	if (ret < 0)
9087 		goto out_free_cpumask;
9088 	/* Used for event triggers */
9089 	ret = -ENOMEM;
9090 	temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
9091 	if (!temp_buffer)
9092 		goto out_rm_hp_state;
9093 
9094 	if (trace_create_savedcmd() < 0)
9095 		goto out_free_temp_buffer;
9096 
9097 	/* TODO: make the number of buffers hot pluggable with CPUS */
9098 	if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
9099 		printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
9100 		WARN_ON(1);
9101 		goto out_free_savedcmd;
9102 	}
9103 
9104 	if (global_trace.buffer_disabled)
9105 		tracing_off();
9106 
9107 	if (trace_boot_clock) {
9108 		ret = tracing_set_clock(&global_trace, trace_boot_clock);
9109 		if (ret < 0)
9110 			pr_warn("Trace clock %s not defined, going back to default\n",
9111 				trace_boot_clock);
9112 	}
9113 
9114 	/*
9115 	 * register_tracer() might reference current_trace, so it
9116 	 * needs to be set before we register anything. This is
9117 	 * just a bootstrap of current_trace anyway.
9118 	 */
9119 	global_trace.current_trace = &nop_trace;
9120 
9121 	global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
9122 
9123 	ftrace_init_global_array_ops(&global_trace);
9124 
9125 	init_trace_flags_index(&global_trace);
9126 
9127 	register_tracer(&nop_trace);
9128 
9129 	/* Function tracing may start here (via kernel command line) */
9130 	init_function_trace();
9131 
9132 	/* All seems OK, enable tracing */
9133 	tracing_disabled = 0;
9134 
9135 	atomic_notifier_chain_register(&panic_notifier_list,
9136 				       &trace_panic_notifier);
9137 
9138 	register_die_notifier(&trace_die_notifier);
9139 
9140 	global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
9141 
9142 	INIT_LIST_HEAD(&global_trace.systems);
9143 	INIT_LIST_HEAD(&global_trace.events);
9144 	INIT_LIST_HEAD(&global_trace.hist_vars);
9145 	INIT_LIST_HEAD(&global_trace.err_log);
9146 	list_add(&global_trace.list, &ftrace_trace_arrays);
9147 
9148 	apply_trace_boot_options();
9149 
9150 	register_snapshot_cmd();
9151 
9152 	return 0;
9153 
9154 out_free_savedcmd:
9155 	free_saved_cmdlines_buffer(savedcmd);
9156 out_free_temp_buffer:
9157 	ring_buffer_free(temp_buffer);
9158 out_rm_hp_state:
9159 	cpuhp_remove_multi_state(CPUHP_TRACE_RB_PREPARE);
9160 out_free_cpumask:
9161 	free_cpumask_var(global_trace.tracing_cpumask);
9162 out_free_buffer_mask:
9163 	free_cpumask_var(tracing_buffer_mask);
9164 out:
9165 	return ret;
9166 }
9167 
9168 void __init early_trace_init(void)
9169 {
9170 	if (tracepoint_printk) {
9171 		tracepoint_print_iter =
9172 			kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
9173 		if (WARN_ON(!tracepoint_print_iter))
9174 			tracepoint_printk = 0;
9175 		else
9176 			static_key_enable(&tracepoint_printk_key.key);
9177 	}
9178 	tracer_alloc_buffers();
9179 }
9180 
9181 void __init trace_init(void)
9182 {
9183 	trace_event_init();
9184 }
9185 
9186 __init static int clear_boot_tracer(void)
9187 {
9188 	/*
9189 	 * The default tracer at boot buffer is an init section.
9190 	 * This function is called in lateinit. If we did not
9191 	 * find the boot tracer, then clear it out, to prevent
9192 	 * later registration from accessing the buffer that is
9193 	 * about to be freed.
9194 	 */
9195 	if (!default_bootup_tracer)
9196 		return 0;
9197 
9198 	printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
9199 	       default_bootup_tracer);
9200 	default_bootup_tracer = NULL;
9201 
9202 	return 0;
9203 }
9204 
9205 fs_initcall(tracer_init_tracefs);
9206 late_initcall_sync(clear_boot_tracer);
9207 
9208 #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
9209 __init static int tracing_set_default_clock(void)
9210 {
9211 	/* sched_clock_stable() is determined in late_initcall */
9212 	if (!trace_boot_clock && !sched_clock_stable()) {
9213 		printk(KERN_WARNING
9214 		       "Unstable clock detected, switching default tracing clock to \"global\"\n"
9215 		       "If you want to keep using the local clock, then add:\n"
9216 		       "  \"trace_clock=local\"\n"
9217 		       "on the kernel command line\n");
9218 		tracing_set_clock(&global_trace, "global");
9219 	}
9220 
9221 	return 0;
9222 }
9223 late_initcall_sync(tracing_set_default_clock);
9224 #endif
9225