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