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