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