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