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