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