xref: /openbmc/linux/kernel/trace/trace.c (revision 8571e645)
1 /*
2  * ring buffer based function tracer
3  *
4  * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com>
5  * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
6  *
7  * Originally taken from the RT patch by:
8  *    Arnaldo Carvalho de Melo <acme@redhat.com>
9  *
10  * Based on code from the latency_tracer, that is:
11  *  Copyright (C) 2004-2006 Ingo Molnar
12  *  Copyright (C) 2004 Nadia Yvette Chambers
13  */
14 #include <linux/ring_buffer.h>
15 #include <generated/utsrelease.h>
16 #include <linux/stacktrace.h>
17 #include <linux/writeback.h>
18 #include <linux/kallsyms.h>
19 #include <linux/seq_file.h>
20 #include <linux/notifier.h>
21 #include <linux/irqflags.h>
22 #include <linux/debugfs.h>
23 #include <linux/tracefs.h>
24 #include <linux/pagemap.h>
25 #include <linux/hardirq.h>
26 #include <linux/linkage.h>
27 #include <linux/uaccess.h>
28 #include <linux/kprobes.h>
29 #include <linux/ftrace.h>
30 #include <linux/module.h>
31 #include <linux/percpu.h>
32 #include <linux/splice.h>
33 #include <linux/kdebug.h>
34 #include <linux/string.h>
35 #include <linux/mount.h>
36 #include <linux/rwsem.h>
37 #include <linux/slab.h>
38 #include <linux/ctype.h>
39 #include <linux/init.h>
40 #include <linux/poll.h>
41 #include <linux/nmi.h>
42 #include <linux/fs.h>
43 #include <linux/sched/rt.h>
44 
45 #include "trace.h"
46 #include "trace_output.h"
47 
48 /*
49  * On boot up, the ring buffer is set to the minimum size, so that
50  * we do not waste memory on systems that are not using tracing.
51  */
52 bool ring_buffer_expanded;
53 
54 /*
55  * We need to change this state when a selftest is running.
56  * A selftest will lurk into the ring-buffer to count the
57  * entries inserted during the selftest although some concurrent
58  * insertions into the ring-buffer such as trace_printk could occurred
59  * at the same time, giving false positive or negative results.
60  */
61 static bool __read_mostly tracing_selftest_running;
62 
63 /*
64  * If a tracer is running, we do not want to run SELFTEST.
65  */
66 bool __read_mostly tracing_selftest_disabled;
67 
68 /* Pipe tracepoints to printk */
69 struct trace_iterator *tracepoint_print_iter;
70 int tracepoint_printk;
71 
72 /* For tracers that don't implement custom flags */
73 static struct tracer_opt dummy_tracer_opt[] = {
74 	{ }
75 };
76 
77 static int
78 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
79 {
80 	return 0;
81 }
82 
83 /*
84  * To prevent the comm cache from being overwritten when no
85  * tracing is active, only save the comm when a trace event
86  * occurred.
87  */
88 static DEFINE_PER_CPU(bool, trace_cmdline_save);
89 
90 /*
91  * Kill all tracing for good (never come back).
92  * It is initialized to 1 but will turn to zero if the initialization
93  * of the tracer is successful. But that is the only place that sets
94  * this back to zero.
95  */
96 static int tracing_disabled = 1;
97 
98 cpumask_var_t __read_mostly	tracing_buffer_mask;
99 
100 /*
101  * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
102  *
103  * If there is an oops (or kernel panic) and the ftrace_dump_on_oops
104  * is set, then ftrace_dump is called. This will output the contents
105  * of the ftrace buffers to the console.  This is very useful for
106  * capturing traces that lead to crashes and outputing it to a
107  * serial console.
108  *
109  * It is default off, but you can enable it with either specifying
110  * "ftrace_dump_on_oops" in the kernel command line, or setting
111  * /proc/sys/kernel/ftrace_dump_on_oops
112  * Set 1 if you want to dump buffers of all CPUs
113  * Set 2 if you want to dump the buffer of the CPU that triggered oops
114  */
115 
116 enum ftrace_dump_mode ftrace_dump_on_oops;
117 
118 /* When set, tracing will stop when a WARN*() is hit */
119 int __disable_trace_on_warning;
120 
121 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
122 /* Map of enums to their values, for "enum_map" file */
123 struct trace_enum_map_head {
124 	struct module			*mod;
125 	unsigned long			length;
126 };
127 
128 union trace_enum_map_item;
129 
130 struct trace_enum_map_tail {
131 	/*
132 	 * "end" is first and points to NULL as it must be different
133 	 * than "mod" or "enum_string"
134 	 */
135 	union trace_enum_map_item	*next;
136 	const char			*end;	/* points to NULL */
137 };
138 
139 static DEFINE_MUTEX(trace_enum_mutex);
140 
141 /*
142  * The trace_enum_maps are saved in an array with two extra elements,
143  * one at the beginning, and one at the end. The beginning item contains
144  * the count of the saved maps (head.length), and the module they
145  * belong to if not built in (head.mod). The ending item contains a
146  * pointer to the next array of saved enum_map items.
147  */
148 union trace_enum_map_item {
149 	struct trace_enum_map		map;
150 	struct trace_enum_map_head	head;
151 	struct trace_enum_map_tail	tail;
152 };
153 
154 static union trace_enum_map_item *trace_enum_maps;
155 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
156 
157 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
158 
159 #define MAX_TRACER_SIZE		100
160 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
161 static char *default_bootup_tracer;
162 
163 static bool allocate_snapshot;
164 
165 static int __init set_cmdline_ftrace(char *str)
166 {
167 	strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
168 	default_bootup_tracer = bootup_tracer_buf;
169 	/* We are using ftrace early, expand it */
170 	ring_buffer_expanded = true;
171 	return 1;
172 }
173 __setup("ftrace=", set_cmdline_ftrace);
174 
175 static int __init set_ftrace_dump_on_oops(char *str)
176 {
177 	if (*str++ != '=' || !*str) {
178 		ftrace_dump_on_oops = DUMP_ALL;
179 		return 1;
180 	}
181 
182 	if (!strcmp("orig_cpu", str)) {
183 		ftrace_dump_on_oops = DUMP_ORIG;
184                 return 1;
185         }
186 
187         return 0;
188 }
189 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);
190 
191 static int __init stop_trace_on_warning(char *str)
192 {
193 	if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
194 		__disable_trace_on_warning = 1;
195 	return 1;
196 }
197 __setup("traceoff_on_warning", stop_trace_on_warning);
198 
199 static int __init boot_alloc_snapshot(char *str)
200 {
201 	allocate_snapshot = true;
202 	/* We also need the main ring buffer expanded */
203 	ring_buffer_expanded = true;
204 	return 1;
205 }
206 __setup("alloc_snapshot", boot_alloc_snapshot);
207 
208 
209 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
210 
211 static int __init set_trace_boot_options(char *str)
212 {
213 	strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
214 	return 0;
215 }
216 __setup("trace_options=", set_trace_boot_options);
217 
218 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
219 static char *trace_boot_clock __initdata;
220 
221 static int __init set_trace_boot_clock(char *str)
222 {
223 	strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
224 	trace_boot_clock = trace_boot_clock_buf;
225 	return 0;
226 }
227 __setup("trace_clock=", set_trace_boot_clock);
228 
229 static int __init set_tracepoint_printk(char *str)
230 {
231 	if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
232 		tracepoint_printk = 1;
233 	return 1;
234 }
235 __setup("tp_printk", set_tracepoint_printk);
236 
237 unsigned long long ns2usecs(cycle_t nsec)
238 {
239 	nsec += 500;
240 	do_div(nsec, 1000);
241 	return nsec;
242 }
243 
244 /* trace_flags holds trace_options default values */
245 #define TRACE_DEFAULT_FLAGS						\
246 	(FUNCTION_DEFAULT_FLAGS |					\
247 	 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |			\
248 	 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO |		\
249 	 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |			\
250 	 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS)
251 
252 /* trace_options that are only supported by global_trace */
253 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK |			\
254 	       TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD)
255 
256 
257 /*
258  * The global_trace is the descriptor that holds the tracing
259  * buffers for the live tracing. For each CPU, it contains
260  * a link list of pages that will store trace entries. The
261  * page descriptor of the pages in the memory is used to hold
262  * the link list by linking the lru item in the page descriptor
263  * to each of the pages in the buffer per CPU.
264  *
265  * For each active CPU there is a data field that holds the
266  * pages for the buffer for that CPU. Each CPU has the same number
267  * of pages allocated for its buffer.
268  */
269 static struct trace_array global_trace = {
270 	.trace_flags = TRACE_DEFAULT_FLAGS,
271 };
272 
273 LIST_HEAD(ftrace_trace_arrays);
274 
275 int trace_array_get(struct trace_array *this_tr)
276 {
277 	struct trace_array *tr;
278 	int ret = -ENODEV;
279 
280 	mutex_lock(&trace_types_lock);
281 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
282 		if (tr == this_tr) {
283 			tr->ref++;
284 			ret = 0;
285 			break;
286 		}
287 	}
288 	mutex_unlock(&trace_types_lock);
289 
290 	return ret;
291 }
292 
293 static void __trace_array_put(struct trace_array *this_tr)
294 {
295 	WARN_ON(!this_tr->ref);
296 	this_tr->ref--;
297 }
298 
299 void trace_array_put(struct trace_array *this_tr)
300 {
301 	mutex_lock(&trace_types_lock);
302 	__trace_array_put(this_tr);
303 	mutex_unlock(&trace_types_lock);
304 }
305 
306 int filter_check_discard(struct trace_event_file *file, void *rec,
307 			 struct ring_buffer *buffer,
308 			 struct ring_buffer_event *event)
309 {
310 	if (unlikely(file->flags & EVENT_FILE_FL_FILTERED) &&
311 	    !filter_match_preds(file->filter, rec)) {
312 		ring_buffer_discard_commit(buffer, event);
313 		return 1;
314 	}
315 
316 	return 0;
317 }
318 EXPORT_SYMBOL_GPL(filter_check_discard);
319 
320 int call_filter_check_discard(struct trace_event_call *call, void *rec,
321 			      struct ring_buffer *buffer,
322 			      struct ring_buffer_event *event)
323 {
324 	if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
325 	    !filter_match_preds(call->filter, rec)) {
326 		ring_buffer_discard_commit(buffer, event);
327 		return 1;
328 	}
329 
330 	return 0;
331 }
332 EXPORT_SYMBOL_GPL(call_filter_check_discard);
333 
334 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
335 {
336 	u64 ts;
337 
338 	/* Early boot up does not have a buffer yet */
339 	if (!buf->buffer)
340 		return trace_clock_local();
341 
342 	ts = ring_buffer_time_stamp(buf->buffer, cpu);
343 	ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
344 
345 	return ts;
346 }
347 
348 cycle_t ftrace_now(int cpu)
349 {
350 	return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
351 }
352 
353 /**
354  * tracing_is_enabled - Show if global_trace has been disabled
355  *
356  * Shows if the global trace has been enabled or not. It uses the
357  * mirror flag "buffer_disabled" to be used in fast paths such as for
358  * the irqsoff tracer. But it may be inaccurate due to races. If you
359  * need to know the accurate state, use tracing_is_on() which is a little
360  * slower, but accurate.
361  */
362 int tracing_is_enabled(void)
363 {
364 	/*
365 	 * For quick access (irqsoff uses this in fast path), just
366 	 * return the mirror variable of the state of the ring buffer.
367 	 * It's a little racy, but we don't really care.
368 	 */
369 	smp_rmb();
370 	return !global_trace.buffer_disabled;
371 }
372 
373 /*
374  * trace_buf_size is the size in bytes that is allocated
375  * for a buffer. Note, the number of bytes is always rounded
376  * to page size.
377  *
378  * This number is purposely set to a low number of 16384.
379  * If the dump on oops happens, it will be much appreciated
380  * to not have to wait for all that output. Anyway this can be
381  * boot time and run time configurable.
382  */
383 #define TRACE_BUF_SIZE_DEFAULT	1441792UL /* 16384 * 88 (sizeof(entry)) */
384 
385 static unsigned long		trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
386 
387 /* trace_types holds a link list of available tracers. */
388 static struct tracer		*trace_types __read_mostly;
389 
390 /*
391  * trace_types_lock is used to protect the trace_types list.
392  */
393 DEFINE_MUTEX(trace_types_lock);
394 
395 /*
396  * serialize the access of the ring buffer
397  *
398  * ring buffer serializes readers, but it is low level protection.
399  * The validity of the events (which returns by ring_buffer_peek() ..etc)
400  * are not protected by ring buffer.
401  *
402  * The content of events may become garbage if we allow other process consumes
403  * these events concurrently:
404  *   A) the page of the consumed events may become a normal page
405  *      (not reader page) in ring buffer, and this page will be rewrited
406  *      by events producer.
407  *   B) The page of the consumed events may become a page for splice_read,
408  *      and this page will be returned to system.
409  *
410  * These primitives allow multi process access to different cpu ring buffer
411  * concurrently.
412  *
413  * These primitives don't distinguish read-only and read-consume access.
414  * Multi read-only access are also serialized.
415  */
416 
417 #ifdef CONFIG_SMP
418 static DECLARE_RWSEM(all_cpu_access_lock);
419 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
420 
421 static inline void trace_access_lock(int cpu)
422 {
423 	if (cpu == RING_BUFFER_ALL_CPUS) {
424 		/* gain it for accessing the whole ring buffer. */
425 		down_write(&all_cpu_access_lock);
426 	} else {
427 		/* gain it for accessing a cpu ring buffer. */
428 
429 		/* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
430 		down_read(&all_cpu_access_lock);
431 
432 		/* Secondly block other access to this @cpu ring buffer. */
433 		mutex_lock(&per_cpu(cpu_access_lock, cpu));
434 	}
435 }
436 
437 static inline void trace_access_unlock(int cpu)
438 {
439 	if (cpu == RING_BUFFER_ALL_CPUS) {
440 		up_write(&all_cpu_access_lock);
441 	} else {
442 		mutex_unlock(&per_cpu(cpu_access_lock, cpu));
443 		up_read(&all_cpu_access_lock);
444 	}
445 }
446 
447 static inline void trace_access_lock_init(void)
448 {
449 	int cpu;
450 
451 	for_each_possible_cpu(cpu)
452 		mutex_init(&per_cpu(cpu_access_lock, cpu));
453 }
454 
455 #else
456 
457 static DEFINE_MUTEX(access_lock);
458 
459 static inline void trace_access_lock(int cpu)
460 {
461 	(void)cpu;
462 	mutex_lock(&access_lock);
463 }
464 
465 static inline void trace_access_unlock(int cpu)
466 {
467 	(void)cpu;
468 	mutex_unlock(&access_lock);
469 }
470 
471 static inline void trace_access_lock_init(void)
472 {
473 }
474 
475 #endif
476 
477 #ifdef CONFIG_STACKTRACE
478 static void __ftrace_trace_stack(struct ring_buffer *buffer,
479 				 unsigned long flags,
480 				 int skip, int pc, struct pt_regs *regs);
481 static inline void ftrace_trace_stack(struct trace_array *tr,
482 				      struct ring_buffer *buffer,
483 				      unsigned long flags,
484 				      int skip, int pc, struct pt_regs *regs);
485 
486 #else
487 static inline void __ftrace_trace_stack(struct ring_buffer *buffer,
488 					unsigned long flags,
489 					int skip, int pc, struct pt_regs *regs)
490 {
491 }
492 static inline void ftrace_trace_stack(struct trace_array *tr,
493 				      struct ring_buffer *buffer,
494 				      unsigned long flags,
495 				      int skip, int pc, struct pt_regs *regs)
496 {
497 }
498 
499 #endif
500 
501 static void tracer_tracing_on(struct trace_array *tr)
502 {
503 	if (tr->trace_buffer.buffer)
504 		ring_buffer_record_on(tr->trace_buffer.buffer);
505 	/*
506 	 * This flag is looked at when buffers haven't been allocated
507 	 * yet, or by some tracers (like irqsoff), that just want to
508 	 * know if the ring buffer has been disabled, but it can handle
509 	 * races of where it gets disabled but we still do a record.
510 	 * As the check is in the fast path of the tracers, it is more
511 	 * important to be fast than accurate.
512 	 */
513 	tr->buffer_disabled = 0;
514 	/* Make the flag seen by readers */
515 	smp_wmb();
516 }
517 
518 /**
519  * tracing_on - enable tracing buffers
520  *
521  * This function enables tracing buffers that may have been
522  * disabled with tracing_off.
523  */
524 void tracing_on(void)
525 {
526 	tracer_tracing_on(&global_trace);
527 }
528 EXPORT_SYMBOL_GPL(tracing_on);
529 
530 /**
531  * __trace_puts - write a constant string into the trace buffer.
532  * @ip:	   The address of the caller
533  * @str:   The constant string to write
534  * @size:  The size of the string.
535  */
536 int __trace_puts(unsigned long ip, const char *str, int size)
537 {
538 	struct ring_buffer_event *event;
539 	struct ring_buffer *buffer;
540 	struct print_entry *entry;
541 	unsigned long irq_flags;
542 	int alloc;
543 	int pc;
544 
545 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
546 		return 0;
547 
548 	pc = preempt_count();
549 
550 	if (unlikely(tracing_selftest_running || tracing_disabled))
551 		return 0;
552 
553 	alloc = sizeof(*entry) + size + 2; /* possible \n added */
554 
555 	local_save_flags(irq_flags);
556 	buffer = global_trace.trace_buffer.buffer;
557 	event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
558 					  irq_flags, pc);
559 	if (!event)
560 		return 0;
561 
562 	entry = ring_buffer_event_data(event);
563 	entry->ip = ip;
564 
565 	memcpy(&entry->buf, str, size);
566 
567 	/* Add a newline if necessary */
568 	if (entry->buf[size - 1] != '\n') {
569 		entry->buf[size] = '\n';
570 		entry->buf[size + 1] = '\0';
571 	} else
572 		entry->buf[size] = '\0';
573 
574 	__buffer_unlock_commit(buffer, event);
575 	ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
576 
577 	return size;
578 }
579 EXPORT_SYMBOL_GPL(__trace_puts);
580 
581 /**
582  * __trace_bputs - write the pointer to a constant string into trace buffer
583  * @ip:	   The address of the caller
584  * @str:   The constant string to write to the buffer to
585  */
586 int __trace_bputs(unsigned long ip, const char *str)
587 {
588 	struct ring_buffer_event *event;
589 	struct ring_buffer *buffer;
590 	struct bputs_entry *entry;
591 	unsigned long irq_flags;
592 	int size = sizeof(struct bputs_entry);
593 	int pc;
594 
595 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
596 		return 0;
597 
598 	pc = preempt_count();
599 
600 	if (unlikely(tracing_selftest_running || tracing_disabled))
601 		return 0;
602 
603 	local_save_flags(irq_flags);
604 	buffer = global_trace.trace_buffer.buffer;
605 	event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
606 					  irq_flags, pc);
607 	if (!event)
608 		return 0;
609 
610 	entry = ring_buffer_event_data(event);
611 	entry->ip			= ip;
612 	entry->str			= str;
613 
614 	__buffer_unlock_commit(buffer, event);
615 	ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
616 
617 	return 1;
618 }
619 EXPORT_SYMBOL_GPL(__trace_bputs);
620 
621 #ifdef CONFIG_TRACER_SNAPSHOT
622 /**
623  * trace_snapshot - take a snapshot of the current buffer.
624  *
625  * This causes a swap between the snapshot buffer and the current live
626  * tracing buffer. You can use this to take snapshots of the live
627  * trace when some condition is triggered, but continue to trace.
628  *
629  * Note, make sure to allocate the snapshot with either
630  * a tracing_snapshot_alloc(), or by doing it manually
631  * with: echo 1 > /sys/kernel/debug/tracing/snapshot
632  *
633  * If the snapshot buffer is not allocated, it will stop tracing.
634  * Basically making a permanent snapshot.
635  */
636 void tracing_snapshot(void)
637 {
638 	struct trace_array *tr = &global_trace;
639 	struct tracer *tracer = tr->current_trace;
640 	unsigned long flags;
641 
642 	if (in_nmi()) {
643 		internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
644 		internal_trace_puts("*** snapshot is being ignored        ***\n");
645 		return;
646 	}
647 
648 	if (!tr->allocated_snapshot) {
649 		internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
650 		internal_trace_puts("*** stopping trace here!   ***\n");
651 		tracing_off();
652 		return;
653 	}
654 
655 	/* Note, snapshot can not be used when the tracer uses it */
656 	if (tracer->use_max_tr) {
657 		internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
658 		internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
659 		return;
660 	}
661 
662 	local_irq_save(flags);
663 	update_max_tr(tr, current, smp_processor_id());
664 	local_irq_restore(flags);
665 }
666 EXPORT_SYMBOL_GPL(tracing_snapshot);
667 
668 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
669 					struct trace_buffer *size_buf, int cpu_id);
670 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
671 
672 static int alloc_snapshot(struct trace_array *tr)
673 {
674 	int ret;
675 
676 	if (!tr->allocated_snapshot) {
677 
678 		/* allocate spare buffer */
679 		ret = resize_buffer_duplicate_size(&tr->max_buffer,
680 				   &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
681 		if (ret < 0)
682 			return ret;
683 
684 		tr->allocated_snapshot = true;
685 	}
686 
687 	return 0;
688 }
689 
690 static void free_snapshot(struct trace_array *tr)
691 {
692 	/*
693 	 * We don't free the ring buffer. instead, resize it because
694 	 * The max_tr ring buffer has some state (e.g. ring->clock) and
695 	 * we want preserve it.
696 	 */
697 	ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
698 	set_buffer_entries(&tr->max_buffer, 1);
699 	tracing_reset_online_cpus(&tr->max_buffer);
700 	tr->allocated_snapshot = false;
701 }
702 
703 /**
704  * tracing_alloc_snapshot - allocate snapshot buffer.
705  *
706  * This only allocates the snapshot buffer if it isn't already
707  * allocated - it doesn't also take a snapshot.
708  *
709  * This is meant to be used in cases where the snapshot buffer needs
710  * to be set up for events that can't sleep but need to be able to
711  * trigger a snapshot.
712  */
713 int tracing_alloc_snapshot(void)
714 {
715 	struct trace_array *tr = &global_trace;
716 	int ret;
717 
718 	ret = alloc_snapshot(tr);
719 	WARN_ON(ret < 0);
720 
721 	return ret;
722 }
723 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
724 
725 /**
726  * trace_snapshot_alloc - allocate and take a snapshot of the current buffer.
727  *
728  * This is similar to trace_snapshot(), but it will allocate the
729  * snapshot buffer if it isn't already allocated. Use this only
730  * where it is safe to sleep, as the allocation may sleep.
731  *
732  * This causes a swap between the snapshot buffer and the current live
733  * tracing buffer. You can use this to take snapshots of the live
734  * trace when some condition is triggered, but continue to trace.
735  */
736 void tracing_snapshot_alloc(void)
737 {
738 	int ret;
739 
740 	ret = tracing_alloc_snapshot();
741 	if (ret < 0)
742 		return;
743 
744 	tracing_snapshot();
745 }
746 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
747 #else
748 void tracing_snapshot(void)
749 {
750 	WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
751 }
752 EXPORT_SYMBOL_GPL(tracing_snapshot);
753 int tracing_alloc_snapshot(void)
754 {
755 	WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
756 	return -ENODEV;
757 }
758 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
759 void tracing_snapshot_alloc(void)
760 {
761 	/* Give warning */
762 	tracing_snapshot();
763 }
764 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
765 #endif /* CONFIG_TRACER_SNAPSHOT */
766 
767 static void tracer_tracing_off(struct trace_array *tr)
768 {
769 	if (tr->trace_buffer.buffer)
770 		ring_buffer_record_off(tr->trace_buffer.buffer);
771 	/*
772 	 * This flag is looked at when buffers haven't been allocated
773 	 * yet, or by some tracers (like irqsoff), that just want to
774 	 * know if the ring buffer has been disabled, but it can handle
775 	 * races of where it gets disabled but we still do a record.
776 	 * As the check is in the fast path of the tracers, it is more
777 	 * important to be fast than accurate.
778 	 */
779 	tr->buffer_disabled = 1;
780 	/* Make the flag seen by readers */
781 	smp_wmb();
782 }
783 
784 /**
785  * tracing_off - turn off tracing buffers
786  *
787  * This function stops the tracing buffers from recording data.
788  * It does not disable any overhead the tracers themselves may
789  * be causing. This function simply causes all recording to
790  * the ring buffers to fail.
791  */
792 void tracing_off(void)
793 {
794 	tracer_tracing_off(&global_trace);
795 }
796 EXPORT_SYMBOL_GPL(tracing_off);
797 
798 void disable_trace_on_warning(void)
799 {
800 	if (__disable_trace_on_warning)
801 		tracing_off();
802 }
803 
804 /**
805  * tracer_tracing_is_on - show real state of ring buffer enabled
806  * @tr : the trace array to know if ring buffer is enabled
807  *
808  * Shows real state of the ring buffer if it is enabled or not.
809  */
810 static int tracer_tracing_is_on(struct trace_array *tr)
811 {
812 	if (tr->trace_buffer.buffer)
813 		return ring_buffer_record_is_on(tr->trace_buffer.buffer);
814 	return !tr->buffer_disabled;
815 }
816 
817 /**
818  * tracing_is_on - show state of ring buffers enabled
819  */
820 int tracing_is_on(void)
821 {
822 	return tracer_tracing_is_on(&global_trace);
823 }
824 EXPORT_SYMBOL_GPL(tracing_is_on);
825 
826 static int __init set_buf_size(char *str)
827 {
828 	unsigned long buf_size;
829 
830 	if (!str)
831 		return 0;
832 	buf_size = memparse(str, &str);
833 	/* nr_entries can not be zero */
834 	if (buf_size == 0)
835 		return 0;
836 	trace_buf_size = buf_size;
837 	return 1;
838 }
839 __setup("trace_buf_size=", set_buf_size);
840 
841 static int __init set_tracing_thresh(char *str)
842 {
843 	unsigned long threshold;
844 	int ret;
845 
846 	if (!str)
847 		return 0;
848 	ret = kstrtoul(str, 0, &threshold);
849 	if (ret < 0)
850 		return 0;
851 	tracing_thresh = threshold * 1000;
852 	return 1;
853 }
854 __setup("tracing_thresh=", set_tracing_thresh);
855 
856 unsigned long nsecs_to_usecs(unsigned long nsecs)
857 {
858 	return nsecs / 1000;
859 }
860 
861 /*
862  * TRACE_FLAGS is defined as a tuple matching bit masks with strings.
863  * It uses C(a, b) where 'a' is the enum name and 'b' is the string that
864  * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list
865  * of strings in the order that the enums were defined.
866  */
867 #undef C
868 #define C(a, b) b
869 
870 /* These must match the bit postions in trace_iterator_flags */
871 static const char *trace_options[] = {
872 	TRACE_FLAGS
873 	NULL
874 };
875 
876 static struct {
877 	u64 (*func)(void);
878 	const char *name;
879 	int in_ns;		/* is this clock in nanoseconds? */
880 } trace_clocks[] = {
881 	{ trace_clock_local,		"local",	1 },
882 	{ trace_clock_global,		"global",	1 },
883 	{ trace_clock_counter,		"counter",	0 },
884 	{ trace_clock_jiffies,		"uptime",	0 },
885 	{ trace_clock,			"perf",		1 },
886 	{ ktime_get_mono_fast_ns,	"mono",		1 },
887 	{ ktime_get_raw_fast_ns,	"mono_raw",	1 },
888 	ARCH_TRACE_CLOCKS
889 };
890 
891 /*
892  * trace_parser_get_init - gets the buffer for trace parser
893  */
894 int trace_parser_get_init(struct trace_parser *parser, int size)
895 {
896 	memset(parser, 0, sizeof(*parser));
897 
898 	parser->buffer = kmalloc(size, GFP_KERNEL);
899 	if (!parser->buffer)
900 		return 1;
901 
902 	parser->size = size;
903 	return 0;
904 }
905 
906 /*
907  * trace_parser_put - frees the buffer for trace parser
908  */
909 void trace_parser_put(struct trace_parser *parser)
910 {
911 	kfree(parser->buffer);
912 }
913 
914 /*
915  * trace_get_user - reads the user input string separated by  space
916  * (matched by isspace(ch))
917  *
918  * For each string found the 'struct trace_parser' is updated,
919  * and the function returns.
920  *
921  * Returns number of bytes read.
922  *
923  * See kernel/trace/trace.h for 'struct trace_parser' details.
924  */
925 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
926 	size_t cnt, loff_t *ppos)
927 {
928 	char ch;
929 	size_t read = 0;
930 	ssize_t ret;
931 
932 	if (!*ppos)
933 		trace_parser_clear(parser);
934 
935 	ret = get_user(ch, ubuf++);
936 	if (ret)
937 		goto out;
938 
939 	read++;
940 	cnt--;
941 
942 	/*
943 	 * The parser is not finished with the last write,
944 	 * continue reading the user input without skipping spaces.
945 	 */
946 	if (!parser->cont) {
947 		/* skip white space */
948 		while (cnt && isspace(ch)) {
949 			ret = get_user(ch, ubuf++);
950 			if (ret)
951 				goto out;
952 			read++;
953 			cnt--;
954 		}
955 
956 		/* only spaces were written */
957 		if (isspace(ch)) {
958 			*ppos += read;
959 			ret = read;
960 			goto out;
961 		}
962 
963 		parser->idx = 0;
964 	}
965 
966 	/* read the non-space input */
967 	while (cnt && !isspace(ch)) {
968 		if (parser->idx < parser->size - 1)
969 			parser->buffer[parser->idx++] = ch;
970 		else {
971 			ret = -EINVAL;
972 			goto out;
973 		}
974 		ret = get_user(ch, ubuf++);
975 		if (ret)
976 			goto out;
977 		read++;
978 		cnt--;
979 	}
980 
981 	/* We either got finished input or we have to wait for another call. */
982 	if (isspace(ch)) {
983 		parser->buffer[parser->idx] = 0;
984 		parser->cont = false;
985 	} else if (parser->idx < parser->size - 1) {
986 		parser->cont = true;
987 		parser->buffer[parser->idx++] = ch;
988 	} else {
989 		ret = -EINVAL;
990 		goto out;
991 	}
992 
993 	*ppos += read;
994 	ret = read;
995 
996 out:
997 	return ret;
998 }
999 
1000 /* TODO add a seq_buf_to_buffer() */
1001 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
1002 {
1003 	int len;
1004 
1005 	if (trace_seq_used(s) <= s->seq.readpos)
1006 		return -EBUSY;
1007 
1008 	len = trace_seq_used(s) - s->seq.readpos;
1009 	if (cnt > len)
1010 		cnt = len;
1011 	memcpy(buf, s->buffer + s->seq.readpos, cnt);
1012 
1013 	s->seq.readpos += cnt;
1014 	return cnt;
1015 }
1016 
1017 unsigned long __read_mostly	tracing_thresh;
1018 
1019 #ifdef CONFIG_TRACER_MAX_TRACE
1020 /*
1021  * Copy the new maximum trace into the separate maximum-trace
1022  * structure. (this way the maximum trace is permanently saved,
1023  * for later retrieval via /sys/kernel/debug/tracing/latency_trace)
1024  */
1025 static void
1026 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1027 {
1028 	struct trace_buffer *trace_buf = &tr->trace_buffer;
1029 	struct trace_buffer *max_buf = &tr->max_buffer;
1030 	struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
1031 	struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
1032 
1033 	max_buf->cpu = cpu;
1034 	max_buf->time_start = data->preempt_timestamp;
1035 
1036 	max_data->saved_latency = tr->max_latency;
1037 	max_data->critical_start = data->critical_start;
1038 	max_data->critical_end = data->critical_end;
1039 
1040 	memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
1041 	max_data->pid = tsk->pid;
1042 	/*
1043 	 * If tsk == current, then use current_uid(), as that does not use
1044 	 * RCU. The irq tracer can be called out of RCU scope.
1045 	 */
1046 	if (tsk == current)
1047 		max_data->uid = current_uid();
1048 	else
1049 		max_data->uid = task_uid(tsk);
1050 
1051 	max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1052 	max_data->policy = tsk->policy;
1053 	max_data->rt_priority = tsk->rt_priority;
1054 
1055 	/* record this tasks comm */
1056 	tracing_record_cmdline(tsk);
1057 }
1058 
1059 /**
1060  * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1061  * @tr: tracer
1062  * @tsk: the task with the latency
1063  * @cpu: The cpu that initiated the trace.
1064  *
1065  * Flip the buffers between the @tr and the max_tr and record information
1066  * about which task was the cause of this latency.
1067  */
1068 void
1069 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1070 {
1071 	struct ring_buffer *buf;
1072 
1073 	if (tr->stop_count)
1074 		return;
1075 
1076 	WARN_ON_ONCE(!irqs_disabled());
1077 
1078 	if (!tr->allocated_snapshot) {
1079 		/* Only the nop tracer should hit this when disabling */
1080 		WARN_ON_ONCE(tr->current_trace != &nop_trace);
1081 		return;
1082 	}
1083 
1084 	arch_spin_lock(&tr->max_lock);
1085 
1086 	buf = tr->trace_buffer.buffer;
1087 	tr->trace_buffer.buffer = tr->max_buffer.buffer;
1088 	tr->max_buffer.buffer = buf;
1089 
1090 	__update_max_tr(tr, tsk, cpu);
1091 	arch_spin_unlock(&tr->max_lock);
1092 }
1093 
1094 /**
1095  * update_max_tr_single - only copy one trace over, and reset the rest
1096  * @tr - tracer
1097  * @tsk - task with the latency
1098  * @cpu - the cpu of the buffer to copy.
1099  *
1100  * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1101  */
1102 void
1103 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1104 {
1105 	int ret;
1106 
1107 	if (tr->stop_count)
1108 		return;
1109 
1110 	WARN_ON_ONCE(!irqs_disabled());
1111 	if (!tr->allocated_snapshot) {
1112 		/* Only the nop tracer should hit this when disabling */
1113 		WARN_ON_ONCE(tr->current_trace != &nop_trace);
1114 		return;
1115 	}
1116 
1117 	arch_spin_lock(&tr->max_lock);
1118 
1119 	ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1120 
1121 	if (ret == -EBUSY) {
1122 		/*
1123 		 * We failed to swap the buffer due to a commit taking
1124 		 * place on this CPU. We fail to record, but we reset
1125 		 * the max trace buffer (no one writes directly to it)
1126 		 * and flag that it failed.
1127 		 */
1128 		trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1129 			"Failed to swap buffers due to commit in progress\n");
1130 	}
1131 
1132 	WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1133 
1134 	__update_max_tr(tr, tsk, cpu);
1135 	arch_spin_unlock(&tr->max_lock);
1136 }
1137 #endif /* CONFIG_TRACER_MAX_TRACE */
1138 
1139 static int wait_on_pipe(struct trace_iterator *iter, bool full)
1140 {
1141 	/* Iterators are static, they should be filled or empty */
1142 	if (trace_buffer_iter(iter, iter->cpu_file))
1143 		return 0;
1144 
1145 	return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
1146 				full);
1147 }
1148 
1149 #ifdef CONFIG_FTRACE_STARTUP_TEST
1150 static int run_tracer_selftest(struct tracer *type)
1151 {
1152 	struct trace_array *tr = &global_trace;
1153 	struct tracer *saved_tracer = tr->current_trace;
1154 	int ret;
1155 
1156 	if (!type->selftest || tracing_selftest_disabled)
1157 		return 0;
1158 
1159 	/*
1160 	 * Run a selftest on this tracer.
1161 	 * Here we reset the trace buffer, and set the current
1162 	 * tracer to be this tracer. The tracer can then run some
1163 	 * internal tracing to verify that everything is in order.
1164 	 * If we fail, we do not register this tracer.
1165 	 */
1166 	tracing_reset_online_cpus(&tr->trace_buffer);
1167 
1168 	tr->current_trace = type;
1169 
1170 #ifdef CONFIG_TRACER_MAX_TRACE
1171 	if (type->use_max_tr) {
1172 		/* If we expanded the buffers, make sure the max is expanded too */
1173 		if (ring_buffer_expanded)
1174 			ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1175 					   RING_BUFFER_ALL_CPUS);
1176 		tr->allocated_snapshot = true;
1177 	}
1178 #endif
1179 
1180 	/* the test is responsible for initializing and enabling */
1181 	pr_info("Testing tracer %s: ", type->name);
1182 	ret = type->selftest(type, tr);
1183 	/* the test is responsible for resetting too */
1184 	tr->current_trace = saved_tracer;
1185 	if (ret) {
1186 		printk(KERN_CONT "FAILED!\n");
1187 		/* Add the warning after printing 'FAILED' */
1188 		WARN_ON(1);
1189 		return -1;
1190 	}
1191 	/* Only reset on passing, to avoid touching corrupted buffers */
1192 	tracing_reset_online_cpus(&tr->trace_buffer);
1193 
1194 #ifdef CONFIG_TRACER_MAX_TRACE
1195 	if (type->use_max_tr) {
1196 		tr->allocated_snapshot = false;
1197 
1198 		/* Shrink the max buffer again */
1199 		if (ring_buffer_expanded)
1200 			ring_buffer_resize(tr->max_buffer.buffer, 1,
1201 					   RING_BUFFER_ALL_CPUS);
1202 	}
1203 #endif
1204 
1205 	printk(KERN_CONT "PASSED\n");
1206 	return 0;
1207 }
1208 #else
1209 static inline int run_tracer_selftest(struct tracer *type)
1210 {
1211 	return 0;
1212 }
1213 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1214 
1215 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
1216 
1217 static void __init apply_trace_boot_options(void);
1218 
1219 /**
1220  * register_tracer - register a tracer with the ftrace system.
1221  * @type - the plugin for the tracer
1222  *
1223  * Register a new plugin tracer.
1224  */
1225 int __init register_tracer(struct tracer *type)
1226 {
1227 	struct tracer *t;
1228 	int ret = 0;
1229 
1230 	if (!type->name) {
1231 		pr_info("Tracer must have a name\n");
1232 		return -1;
1233 	}
1234 
1235 	if (strlen(type->name) >= MAX_TRACER_SIZE) {
1236 		pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1237 		return -1;
1238 	}
1239 
1240 	mutex_lock(&trace_types_lock);
1241 
1242 	tracing_selftest_running = true;
1243 
1244 	for (t = trace_types; t; t = t->next) {
1245 		if (strcmp(type->name, t->name) == 0) {
1246 			/* already found */
1247 			pr_info("Tracer %s already registered\n",
1248 				type->name);
1249 			ret = -1;
1250 			goto out;
1251 		}
1252 	}
1253 
1254 	if (!type->set_flag)
1255 		type->set_flag = &dummy_set_flag;
1256 	if (!type->flags) {
1257 		/*allocate a dummy tracer_flags*/
1258 		type->flags = kmalloc(sizeof(*type->flags), GFP_KERNEL);
1259 		if (!type->flags) {
1260 			ret = -ENOMEM;
1261 			goto out;
1262 		}
1263 		type->flags->val = 0;
1264 		type->flags->opts = dummy_tracer_opt;
1265 	} else
1266 		if (!type->flags->opts)
1267 			type->flags->opts = dummy_tracer_opt;
1268 
1269 	/* store the tracer for __set_tracer_option */
1270 	type->flags->trace = type;
1271 
1272 	ret = run_tracer_selftest(type);
1273 	if (ret < 0)
1274 		goto out;
1275 
1276 	type->next = trace_types;
1277 	trace_types = type;
1278 	add_tracer_options(&global_trace, type);
1279 
1280  out:
1281 	tracing_selftest_running = false;
1282 	mutex_unlock(&trace_types_lock);
1283 
1284 	if (ret || !default_bootup_tracer)
1285 		goto out_unlock;
1286 
1287 	if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1288 		goto out_unlock;
1289 
1290 	printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1291 	/* Do we want this tracer to start on bootup? */
1292 	tracing_set_tracer(&global_trace, type->name);
1293 	default_bootup_tracer = NULL;
1294 
1295 	apply_trace_boot_options();
1296 
1297 	/* disable other selftests, since this will break it. */
1298 	tracing_selftest_disabled = true;
1299 #ifdef CONFIG_FTRACE_STARTUP_TEST
1300 	printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1301 	       type->name);
1302 #endif
1303 
1304  out_unlock:
1305 	return ret;
1306 }
1307 
1308 void tracing_reset(struct trace_buffer *buf, int cpu)
1309 {
1310 	struct ring_buffer *buffer = buf->buffer;
1311 
1312 	if (!buffer)
1313 		return;
1314 
1315 	ring_buffer_record_disable(buffer);
1316 
1317 	/* Make sure all commits have finished */
1318 	synchronize_sched();
1319 	ring_buffer_reset_cpu(buffer, cpu);
1320 
1321 	ring_buffer_record_enable(buffer);
1322 }
1323 
1324 void tracing_reset_online_cpus(struct trace_buffer *buf)
1325 {
1326 	struct ring_buffer *buffer = buf->buffer;
1327 	int cpu;
1328 
1329 	if (!buffer)
1330 		return;
1331 
1332 	ring_buffer_record_disable(buffer);
1333 
1334 	/* Make sure all commits have finished */
1335 	synchronize_sched();
1336 
1337 	buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1338 
1339 	for_each_online_cpu(cpu)
1340 		ring_buffer_reset_cpu(buffer, cpu);
1341 
1342 	ring_buffer_record_enable(buffer);
1343 }
1344 
1345 /* Must have trace_types_lock held */
1346 void tracing_reset_all_online_cpus(void)
1347 {
1348 	struct trace_array *tr;
1349 
1350 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1351 		tracing_reset_online_cpus(&tr->trace_buffer);
1352 #ifdef CONFIG_TRACER_MAX_TRACE
1353 		tracing_reset_online_cpus(&tr->max_buffer);
1354 #endif
1355 	}
1356 }
1357 
1358 #define SAVED_CMDLINES_DEFAULT 128
1359 #define NO_CMDLINE_MAP UINT_MAX
1360 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1361 struct saved_cmdlines_buffer {
1362 	unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1363 	unsigned *map_cmdline_to_pid;
1364 	unsigned cmdline_num;
1365 	int cmdline_idx;
1366 	char *saved_cmdlines;
1367 };
1368 static struct saved_cmdlines_buffer *savedcmd;
1369 
1370 /* temporary disable recording */
1371 static atomic_t trace_record_cmdline_disabled __read_mostly;
1372 
1373 static inline char *get_saved_cmdlines(int idx)
1374 {
1375 	return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1376 }
1377 
1378 static inline void set_cmdline(int idx, const char *cmdline)
1379 {
1380 	memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1381 }
1382 
1383 static int allocate_cmdlines_buffer(unsigned int val,
1384 				    struct saved_cmdlines_buffer *s)
1385 {
1386 	s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid),
1387 					GFP_KERNEL);
1388 	if (!s->map_cmdline_to_pid)
1389 		return -ENOMEM;
1390 
1391 	s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL);
1392 	if (!s->saved_cmdlines) {
1393 		kfree(s->map_cmdline_to_pid);
1394 		return -ENOMEM;
1395 	}
1396 
1397 	s->cmdline_idx = 0;
1398 	s->cmdline_num = val;
1399 	memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1400 	       sizeof(s->map_pid_to_cmdline));
1401 	memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1402 	       val * sizeof(*s->map_cmdline_to_pid));
1403 
1404 	return 0;
1405 }
1406 
1407 static int trace_create_savedcmd(void)
1408 {
1409 	int ret;
1410 
1411 	savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1412 	if (!savedcmd)
1413 		return -ENOMEM;
1414 
1415 	ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1416 	if (ret < 0) {
1417 		kfree(savedcmd);
1418 		savedcmd = NULL;
1419 		return -ENOMEM;
1420 	}
1421 
1422 	return 0;
1423 }
1424 
1425 int is_tracing_stopped(void)
1426 {
1427 	return global_trace.stop_count;
1428 }
1429 
1430 /**
1431  * tracing_start - quick start of the tracer
1432  *
1433  * If tracing is enabled but was stopped by tracing_stop,
1434  * this will start the tracer back up.
1435  */
1436 void tracing_start(void)
1437 {
1438 	struct ring_buffer *buffer;
1439 	unsigned long flags;
1440 
1441 	if (tracing_disabled)
1442 		return;
1443 
1444 	raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1445 	if (--global_trace.stop_count) {
1446 		if (global_trace.stop_count < 0) {
1447 			/* Someone screwed up their debugging */
1448 			WARN_ON_ONCE(1);
1449 			global_trace.stop_count = 0;
1450 		}
1451 		goto out;
1452 	}
1453 
1454 	/* Prevent the buffers from switching */
1455 	arch_spin_lock(&global_trace.max_lock);
1456 
1457 	buffer = global_trace.trace_buffer.buffer;
1458 	if (buffer)
1459 		ring_buffer_record_enable(buffer);
1460 
1461 #ifdef CONFIG_TRACER_MAX_TRACE
1462 	buffer = global_trace.max_buffer.buffer;
1463 	if (buffer)
1464 		ring_buffer_record_enable(buffer);
1465 #endif
1466 
1467 	arch_spin_unlock(&global_trace.max_lock);
1468 
1469  out:
1470 	raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1471 }
1472 
1473 static void tracing_start_tr(struct trace_array *tr)
1474 {
1475 	struct ring_buffer *buffer;
1476 	unsigned long flags;
1477 
1478 	if (tracing_disabled)
1479 		return;
1480 
1481 	/* If global, we need to also start the max tracer */
1482 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1483 		return tracing_start();
1484 
1485 	raw_spin_lock_irqsave(&tr->start_lock, flags);
1486 
1487 	if (--tr->stop_count) {
1488 		if (tr->stop_count < 0) {
1489 			/* Someone screwed up their debugging */
1490 			WARN_ON_ONCE(1);
1491 			tr->stop_count = 0;
1492 		}
1493 		goto out;
1494 	}
1495 
1496 	buffer = tr->trace_buffer.buffer;
1497 	if (buffer)
1498 		ring_buffer_record_enable(buffer);
1499 
1500  out:
1501 	raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1502 }
1503 
1504 /**
1505  * tracing_stop - quick stop of the tracer
1506  *
1507  * Light weight way to stop tracing. Use in conjunction with
1508  * tracing_start.
1509  */
1510 void tracing_stop(void)
1511 {
1512 	struct ring_buffer *buffer;
1513 	unsigned long flags;
1514 
1515 	raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1516 	if (global_trace.stop_count++)
1517 		goto out;
1518 
1519 	/* Prevent the buffers from switching */
1520 	arch_spin_lock(&global_trace.max_lock);
1521 
1522 	buffer = global_trace.trace_buffer.buffer;
1523 	if (buffer)
1524 		ring_buffer_record_disable(buffer);
1525 
1526 #ifdef CONFIG_TRACER_MAX_TRACE
1527 	buffer = global_trace.max_buffer.buffer;
1528 	if (buffer)
1529 		ring_buffer_record_disable(buffer);
1530 #endif
1531 
1532 	arch_spin_unlock(&global_trace.max_lock);
1533 
1534  out:
1535 	raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1536 }
1537 
1538 static void tracing_stop_tr(struct trace_array *tr)
1539 {
1540 	struct ring_buffer *buffer;
1541 	unsigned long flags;
1542 
1543 	/* If global, we need to also stop the max tracer */
1544 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1545 		return tracing_stop();
1546 
1547 	raw_spin_lock_irqsave(&tr->start_lock, flags);
1548 	if (tr->stop_count++)
1549 		goto out;
1550 
1551 	buffer = tr->trace_buffer.buffer;
1552 	if (buffer)
1553 		ring_buffer_record_disable(buffer);
1554 
1555  out:
1556 	raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1557 }
1558 
1559 void trace_stop_cmdline_recording(void);
1560 
1561 static int trace_save_cmdline(struct task_struct *tsk)
1562 {
1563 	unsigned pid, idx;
1564 
1565 	if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT))
1566 		return 0;
1567 
1568 	/*
1569 	 * It's not the end of the world if we don't get
1570 	 * the lock, but we also don't want to spin
1571 	 * nor do we want to disable interrupts,
1572 	 * so if we miss here, then better luck next time.
1573 	 */
1574 	if (!arch_spin_trylock(&trace_cmdline_lock))
1575 		return 0;
1576 
1577 	idx = savedcmd->map_pid_to_cmdline[tsk->pid];
1578 	if (idx == NO_CMDLINE_MAP) {
1579 		idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
1580 
1581 		/*
1582 		 * Check whether the cmdline buffer at idx has a pid
1583 		 * mapped. We are going to overwrite that entry so we
1584 		 * need to clear the map_pid_to_cmdline. Otherwise we
1585 		 * would read the new comm for the old pid.
1586 		 */
1587 		pid = savedcmd->map_cmdline_to_pid[idx];
1588 		if (pid != NO_CMDLINE_MAP)
1589 			savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
1590 
1591 		savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
1592 		savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
1593 
1594 		savedcmd->cmdline_idx = idx;
1595 	}
1596 
1597 	set_cmdline(idx, tsk->comm);
1598 
1599 	arch_spin_unlock(&trace_cmdline_lock);
1600 
1601 	return 1;
1602 }
1603 
1604 static void __trace_find_cmdline(int pid, char comm[])
1605 {
1606 	unsigned map;
1607 
1608 	if (!pid) {
1609 		strcpy(comm, "<idle>");
1610 		return;
1611 	}
1612 
1613 	if (WARN_ON_ONCE(pid < 0)) {
1614 		strcpy(comm, "<XXX>");
1615 		return;
1616 	}
1617 
1618 	if (pid > PID_MAX_DEFAULT) {
1619 		strcpy(comm, "<...>");
1620 		return;
1621 	}
1622 
1623 	map = savedcmd->map_pid_to_cmdline[pid];
1624 	if (map != NO_CMDLINE_MAP)
1625 		strcpy(comm, get_saved_cmdlines(map));
1626 	else
1627 		strcpy(comm, "<...>");
1628 }
1629 
1630 void trace_find_cmdline(int pid, char comm[])
1631 {
1632 	preempt_disable();
1633 	arch_spin_lock(&trace_cmdline_lock);
1634 
1635 	__trace_find_cmdline(pid, comm);
1636 
1637 	arch_spin_unlock(&trace_cmdline_lock);
1638 	preempt_enable();
1639 }
1640 
1641 void tracing_record_cmdline(struct task_struct *tsk)
1642 {
1643 	if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
1644 		return;
1645 
1646 	if (!__this_cpu_read(trace_cmdline_save))
1647 		return;
1648 
1649 	if (trace_save_cmdline(tsk))
1650 		__this_cpu_write(trace_cmdline_save, false);
1651 }
1652 
1653 void
1654 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
1655 			     int pc)
1656 {
1657 	struct task_struct *tsk = current;
1658 
1659 	entry->preempt_count		= pc & 0xff;
1660 	entry->pid			= (tsk) ? tsk->pid : 0;
1661 	entry->flags =
1662 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
1663 		(irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
1664 #else
1665 		TRACE_FLAG_IRQS_NOSUPPORT |
1666 #endif
1667 		((pc & NMI_MASK    ) ? TRACE_FLAG_NMI     : 0) |
1668 		((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
1669 		((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
1670 		(tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
1671 		(test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
1672 }
1673 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
1674 
1675 struct ring_buffer_event *
1676 trace_buffer_lock_reserve(struct ring_buffer *buffer,
1677 			  int type,
1678 			  unsigned long len,
1679 			  unsigned long flags, int pc)
1680 {
1681 	struct ring_buffer_event *event;
1682 
1683 	event = ring_buffer_lock_reserve(buffer, len);
1684 	if (event != NULL) {
1685 		struct trace_entry *ent = ring_buffer_event_data(event);
1686 
1687 		tracing_generic_entry_update(ent, flags, pc);
1688 		ent->type = type;
1689 	}
1690 
1691 	return event;
1692 }
1693 
1694 void
1695 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
1696 {
1697 	__this_cpu_write(trace_cmdline_save, true);
1698 	ring_buffer_unlock_commit(buffer, event);
1699 }
1700 
1701 void trace_buffer_unlock_commit(struct trace_array *tr,
1702 				struct ring_buffer *buffer,
1703 				struct ring_buffer_event *event,
1704 				unsigned long flags, int pc)
1705 {
1706 	__buffer_unlock_commit(buffer, event);
1707 
1708 	ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
1709 	ftrace_trace_userstack(buffer, flags, pc);
1710 }
1711 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit);
1712 
1713 static struct ring_buffer *temp_buffer;
1714 
1715 struct ring_buffer_event *
1716 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1717 			  struct trace_event_file *trace_file,
1718 			  int type, unsigned long len,
1719 			  unsigned long flags, int pc)
1720 {
1721 	struct ring_buffer_event *entry;
1722 
1723 	*current_rb = trace_file->tr->trace_buffer.buffer;
1724 	entry = trace_buffer_lock_reserve(*current_rb,
1725 					 type, len, flags, pc);
1726 	/*
1727 	 * If tracing is off, but we have triggers enabled
1728 	 * we still need to look at the event data. Use the temp_buffer
1729 	 * to store the trace event for the tigger to use. It's recusive
1730 	 * safe and will not be recorded anywhere.
1731 	 */
1732 	if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) {
1733 		*current_rb = temp_buffer;
1734 		entry = trace_buffer_lock_reserve(*current_rb,
1735 						  type, len, flags, pc);
1736 	}
1737 	return entry;
1738 }
1739 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
1740 
1741 struct ring_buffer_event *
1742 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb,
1743 				  int type, unsigned long len,
1744 				  unsigned long flags, int pc)
1745 {
1746 	*current_rb = global_trace.trace_buffer.buffer;
1747 	return trace_buffer_lock_reserve(*current_rb,
1748 					 type, len, flags, pc);
1749 }
1750 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
1751 
1752 void trace_buffer_unlock_commit_regs(struct trace_array *tr,
1753 				     struct ring_buffer *buffer,
1754 				     struct ring_buffer_event *event,
1755 				     unsigned long flags, int pc,
1756 				     struct pt_regs *regs)
1757 {
1758 	__buffer_unlock_commit(buffer, event);
1759 
1760 	ftrace_trace_stack(tr, buffer, flags, 0, pc, regs);
1761 	ftrace_trace_userstack(buffer, flags, pc);
1762 }
1763 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs);
1764 
1765 void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
1766 					 struct ring_buffer_event *event)
1767 {
1768 	ring_buffer_discard_commit(buffer, event);
1769 }
1770 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
1771 
1772 void
1773 trace_function(struct trace_array *tr,
1774 	       unsigned long ip, unsigned long parent_ip, unsigned long flags,
1775 	       int pc)
1776 {
1777 	struct trace_event_call *call = &event_function;
1778 	struct ring_buffer *buffer = tr->trace_buffer.buffer;
1779 	struct ring_buffer_event *event;
1780 	struct ftrace_entry *entry;
1781 
1782 	event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
1783 					  flags, pc);
1784 	if (!event)
1785 		return;
1786 	entry	= ring_buffer_event_data(event);
1787 	entry->ip			= ip;
1788 	entry->parent_ip		= parent_ip;
1789 
1790 	if (!call_filter_check_discard(call, entry, buffer, event))
1791 		__buffer_unlock_commit(buffer, event);
1792 }
1793 
1794 #ifdef CONFIG_STACKTRACE
1795 
1796 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
1797 struct ftrace_stack {
1798 	unsigned long		calls[FTRACE_STACK_MAX_ENTRIES];
1799 };
1800 
1801 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
1802 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
1803 
1804 static void __ftrace_trace_stack(struct ring_buffer *buffer,
1805 				 unsigned long flags,
1806 				 int skip, int pc, struct pt_regs *regs)
1807 {
1808 	struct trace_event_call *call = &event_kernel_stack;
1809 	struct ring_buffer_event *event;
1810 	struct stack_entry *entry;
1811 	struct stack_trace trace;
1812 	int use_stack;
1813 	int size = FTRACE_STACK_ENTRIES;
1814 
1815 	trace.nr_entries	= 0;
1816 	trace.skip		= skip;
1817 
1818 	/*
1819 	 * Since events can happen in NMIs there's no safe way to
1820 	 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
1821 	 * or NMI comes in, it will just have to use the default
1822 	 * FTRACE_STACK_SIZE.
1823 	 */
1824 	preempt_disable_notrace();
1825 
1826 	use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
1827 	/*
1828 	 * We don't need any atomic variables, just a barrier.
1829 	 * If an interrupt comes in, we don't care, because it would
1830 	 * have exited and put the counter back to what we want.
1831 	 * We just need a barrier to keep gcc from moving things
1832 	 * around.
1833 	 */
1834 	barrier();
1835 	if (use_stack == 1) {
1836 		trace.entries		= this_cpu_ptr(ftrace_stack.calls);
1837 		trace.max_entries	= FTRACE_STACK_MAX_ENTRIES;
1838 
1839 		if (regs)
1840 			save_stack_trace_regs(regs, &trace);
1841 		else
1842 			save_stack_trace(&trace);
1843 
1844 		if (trace.nr_entries > size)
1845 			size = trace.nr_entries;
1846 	} else
1847 		/* From now on, use_stack is a boolean */
1848 		use_stack = 0;
1849 
1850 	size *= sizeof(unsigned long);
1851 
1852 	event = trace_buffer_lock_reserve(buffer, TRACE_STACK,
1853 					  sizeof(*entry) + size, flags, pc);
1854 	if (!event)
1855 		goto out;
1856 	entry = ring_buffer_event_data(event);
1857 
1858 	memset(&entry->caller, 0, size);
1859 
1860 	if (use_stack)
1861 		memcpy(&entry->caller, trace.entries,
1862 		       trace.nr_entries * sizeof(unsigned long));
1863 	else {
1864 		trace.max_entries	= FTRACE_STACK_ENTRIES;
1865 		trace.entries		= entry->caller;
1866 		if (regs)
1867 			save_stack_trace_regs(regs, &trace);
1868 		else
1869 			save_stack_trace(&trace);
1870 	}
1871 
1872 	entry->size = trace.nr_entries;
1873 
1874 	if (!call_filter_check_discard(call, entry, buffer, event))
1875 		__buffer_unlock_commit(buffer, event);
1876 
1877  out:
1878 	/* Again, don't let gcc optimize things here */
1879 	barrier();
1880 	__this_cpu_dec(ftrace_stack_reserve);
1881 	preempt_enable_notrace();
1882 
1883 }
1884 
1885 static inline void ftrace_trace_stack(struct trace_array *tr,
1886 				      struct ring_buffer *buffer,
1887 				      unsigned long flags,
1888 				      int skip, int pc, struct pt_regs *regs)
1889 {
1890 	if (!(tr->trace_flags & TRACE_ITER_STACKTRACE))
1891 		return;
1892 
1893 	__ftrace_trace_stack(buffer, flags, skip, pc, regs);
1894 }
1895 
1896 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1897 		   int pc)
1898 {
1899 	__ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL);
1900 }
1901 
1902 /**
1903  * trace_dump_stack - record a stack back trace in the trace buffer
1904  * @skip: Number of functions to skip (helper handlers)
1905  */
1906 void trace_dump_stack(int skip)
1907 {
1908 	unsigned long flags;
1909 
1910 	if (tracing_disabled || tracing_selftest_running)
1911 		return;
1912 
1913 	local_save_flags(flags);
1914 
1915 	/*
1916 	 * Skip 3 more, seems to get us at the caller of
1917 	 * this function.
1918 	 */
1919 	skip += 3;
1920 	__ftrace_trace_stack(global_trace.trace_buffer.buffer,
1921 			     flags, skip, preempt_count(), NULL);
1922 }
1923 
1924 static DEFINE_PER_CPU(int, user_stack_count);
1925 
1926 void
1927 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
1928 {
1929 	struct trace_event_call *call = &event_user_stack;
1930 	struct ring_buffer_event *event;
1931 	struct userstack_entry *entry;
1932 	struct stack_trace trace;
1933 
1934 	if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE))
1935 		return;
1936 
1937 	/*
1938 	 * NMIs can not handle page faults, even with fix ups.
1939 	 * The save user stack can (and often does) fault.
1940 	 */
1941 	if (unlikely(in_nmi()))
1942 		return;
1943 
1944 	/*
1945 	 * prevent recursion, since the user stack tracing may
1946 	 * trigger other kernel events.
1947 	 */
1948 	preempt_disable();
1949 	if (__this_cpu_read(user_stack_count))
1950 		goto out;
1951 
1952 	__this_cpu_inc(user_stack_count);
1953 
1954 	event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
1955 					  sizeof(*entry), flags, pc);
1956 	if (!event)
1957 		goto out_drop_count;
1958 	entry	= ring_buffer_event_data(event);
1959 
1960 	entry->tgid		= current->tgid;
1961 	memset(&entry->caller, 0, sizeof(entry->caller));
1962 
1963 	trace.nr_entries	= 0;
1964 	trace.max_entries	= FTRACE_STACK_ENTRIES;
1965 	trace.skip		= 0;
1966 	trace.entries		= entry->caller;
1967 
1968 	save_stack_trace_user(&trace);
1969 	if (!call_filter_check_discard(call, entry, buffer, event))
1970 		__buffer_unlock_commit(buffer, event);
1971 
1972  out_drop_count:
1973 	__this_cpu_dec(user_stack_count);
1974  out:
1975 	preempt_enable();
1976 }
1977 
1978 #ifdef UNUSED
1979 static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1980 {
1981 	ftrace_trace_userstack(tr, flags, preempt_count());
1982 }
1983 #endif /* UNUSED */
1984 
1985 #endif /* CONFIG_STACKTRACE */
1986 
1987 /* created for use with alloc_percpu */
1988 struct trace_buffer_struct {
1989 	char buffer[TRACE_BUF_SIZE];
1990 };
1991 
1992 static struct trace_buffer_struct *trace_percpu_buffer;
1993 static struct trace_buffer_struct *trace_percpu_sirq_buffer;
1994 static struct trace_buffer_struct *trace_percpu_irq_buffer;
1995 static struct trace_buffer_struct *trace_percpu_nmi_buffer;
1996 
1997 /*
1998  * The buffer used is dependent on the context. There is a per cpu
1999  * buffer for normal context, softirq contex, hard irq context and
2000  * for NMI context. Thise allows for lockless recording.
2001  *
2002  * Note, if the buffers failed to be allocated, then this returns NULL
2003  */
2004 static char *get_trace_buf(void)
2005 {
2006 	struct trace_buffer_struct *percpu_buffer;
2007 
2008 	/*
2009 	 * If we have allocated per cpu buffers, then we do not
2010 	 * need to do any locking.
2011 	 */
2012 	if (in_nmi())
2013 		percpu_buffer = trace_percpu_nmi_buffer;
2014 	else if (in_irq())
2015 		percpu_buffer = trace_percpu_irq_buffer;
2016 	else if (in_softirq())
2017 		percpu_buffer = trace_percpu_sirq_buffer;
2018 	else
2019 		percpu_buffer = trace_percpu_buffer;
2020 
2021 	if (!percpu_buffer)
2022 		return NULL;
2023 
2024 	return this_cpu_ptr(&percpu_buffer->buffer[0]);
2025 }
2026 
2027 static int alloc_percpu_trace_buffer(void)
2028 {
2029 	struct trace_buffer_struct *buffers;
2030 	struct trace_buffer_struct *sirq_buffers;
2031 	struct trace_buffer_struct *irq_buffers;
2032 	struct trace_buffer_struct *nmi_buffers;
2033 
2034 	buffers = alloc_percpu(struct trace_buffer_struct);
2035 	if (!buffers)
2036 		goto err_warn;
2037 
2038 	sirq_buffers = alloc_percpu(struct trace_buffer_struct);
2039 	if (!sirq_buffers)
2040 		goto err_sirq;
2041 
2042 	irq_buffers = alloc_percpu(struct trace_buffer_struct);
2043 	if (!irq_buffers)
2044 		goto err_irq;
2045 
2046 	nmi_buffers = alloc_percpu(struct trace_buffer_struct);
2047 	if (!nmi_buffers)
2048 		goto err_nmi;
2049 
2050 	trace_percpu_buffer = buffers;
2051 	trace_percpu_sirq_buffer = sirq_buffers;
2052 	trace_percpu_irq_buffer = irq_buffers;
2053 	trace_percpu_nmi_buffer = nmi_buffers;
2054 
2055 	return 0;
2056 
2057  err_nmi:
2058 	free_percpu(irq_buffers);
2059  err_irq:
2060 	free_percpu(sirq_buffers);
2061  err_sirq:
2062 	free_percpu(buffers);
2063  err_warn:
2064 	WARN(1, "Could not allocate percpu trace_printk buffer");
2065 	return -ENOMEM;
2066 }
2067 
2068 static int buffers_allocated;
2069 
2070 void trace_printk_init_buffers(void)
2071 {
2072 	if (buffers_allocated)
2073 		return;
2074 
2075 	if (alloc_percpu_trace_buffer())
2076 		return;
2077 
2078 	/* trace_printk() is for debug use only. Don't use it in production. */
2079 
2080 	pr_warn("\n");
2081 	pr_warn("**********************************************************\n");
2082 	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2083 	pr_warn("**                                                      **\n");
2084 	pr_warn("** trace_printk() being used. Allocating extra memory.  **\n");
2085 	pr_warn("**                                                      **\n");
2086 	pr_warn("** This means that this is a DEBUG kernel and it is     **\n");
2087 	pr_warn("** unsafe for production use.                           **\n");
2088 	pr_warn("**                                                      **\n");
2089 	pr_warn("** If you see this message and you are not debugging    **\n");
2090 	pr_warn("** the kernel, report this immediately to your vendor!  **\n");
2091 	pr_warn("**                                                      **\n");
2092 	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2093 	pr_warn("**********************************************************\n");
2094 
2095 	/* Expand the buffers to set size */
2096 	tracing_update_buffers();
2097 
2098 	buffers_allocated = 1;
2099 
2100 	/*
2101 	 * trace_printk_init_buffers() can be called by modules.
2102 	 * If that happens, then we need to start cmdline recording
2103 	 * directly here. If the global_trace.buffer is already
2104 	 * allocated here, then this was called by module code.
2105 	 */
2106 	if (global_trace.trace_buffer.buffer)
2107 		tracing_start_cmdline_record();
2108 }
2109 
2110 void trace_printk_start_comm(void)
2111 {
2112 	/* Start tracing comms if trace printk is set */
2113 	if (!buffers_allocated)
2114 		return;
2115 	tracing_start_cmdline_record();
2116 }
2117 
2118 static void trace_printk_start_stop_comm(int enabled)
2119 {
2120 	if (!buffers_allocated)
2121 		return;
2122 
2123 	if (enabled)
2124 		tracing_start_cmdline_record();
2125 	else
2126 		tracing_stop_cmdline_record();
2127 }
2128 
2129 /**
2130  * trace_vbprintk - write binary msg to tracing buffer
2131  *
2132  */
2133 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
2134 {
2135 	struct trace_event_call *call = &event_bprint;
2136 	struct ring_buffer_event *event;
2137 	struct ring_buffer *buffer;
2138 	struct trace_array *tr = &global_trace;
2139 	struct bprint_entry *entry;
2140 	unsigned long flags;
2141 	char *tbuffer;
2142 	int len = 0, size, pc;
2143 
2144 	if (unlikely(tracing_selftest_running || tracing_disabled))
2145 		return 0;
2146 
2147 	/* Don't pollute graph traces with trace_vprintk internals */
2148 	pause_graph_tracing();
2149 
2150 	pc = preempt_count();
2151 	preempt_disable_notrace();
2152 
2153 	tbuffer = get_trace_buf();
2154 	if (!tbuffer) {
2155 		len = 0;
2156 		goto out;
2157 	}
2158 
2159 	len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
2160 
2161 	if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2162 		goto out;
2163 
2164 	local_save_flags(flags);
2165 	size = sizeof(*entry) + sizeof(u32) * len;
2166 	buffer = tr->trace_buffer.buffer;
2167 	event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2168 					  flags, pc);
2169 	if (!event)
2170 		goto out;
2171 	entry = ring_buffer_event_data(event);
2172 	entry->ip			= ip;
2173 	entry->fmt			= fmt;
2174 
2175 	memcpy(entry->buf, tbuffer, sizeof(u32) * len);
2176 	if (!call_filter_check_discard(call, entry, buffer, event)) {
2177 		__buffer_unlock_commit(buffer, event);
2178 		ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
2179 	}
2180 
2181 out:
2182 	preempt_enable_notrace();
2183 	unpause_graph_tracing();
2184 
2185 	return len;
2186 }
2187 EXPORT_SYMBOL_GPL(trace_vbprintk);
2188 
2189 static int
2190 __trace_array_vprintk(struct ring_buffer *buffer,
2191 		      unsigned long ip, const char *fmt, va_list args)
2192 {
2193 	struct trace_event_call *call = &event_print;
2194 	struct ring_buffer_event *event;
2195 	int len = 0, size, pc;
2196 	struct print_entry *entry;
2197 	unsigned long flags;
2198 	char *tbuffer;
2199 
2200 	if (tracing_disabled || tracing_selftest_running)
2201 		return 0;
2202 
2203 	/* Don't pollute graph traces with trace_vprintk internals */
2204 	pause_graph_tracing();
2205 
2206 	pc = preempt_count();
2207 	preempt_disable_notrace();
2208 
2209 
2210 	tbuffer = get_trace_buf();
2211 	if (!tbuffer) {
2212 		len = 0;
2213 		goto out;
2214 	}
2215 
2216 	len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
2217 
2218 	local_save_flags(flags);
2219 	size = sizeof(*entry) + len + 1;
2220 	event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2221 					  flags, pc);
2222 	if (!event)
2223 		goto out;
2224 	entry = ring_buffer_event_data(event);
2225 	entry->ip = ip;
2226 
2227 	memcpy(&entry->buf, tbuffer, len + 1);
2228 	if (!call_filter_check_discard(call, entry, buffer, event)) {
2229 		__buffer_unlock_commit(buffer, event);
2230 		ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL);
2231 	}
2232  out:
2233 	preempt_enable_notrace();
2234 	unpause_graph_tracing();
2235 
2236 	return len;
2237 }
2238 
2239 int trace_array_vprintk(struct trace_array *tr,
2240 			unsigned long ip, const char *fmt, va_list args)
2241 {
2242 	return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
2243 }
2244 
2245 int trace_array_printk(struct trace_array *tr,
2246 		       unsigned long ip, const char *fmt, ...)
2247 {
2248 	int ret;
2249 	va_list ap;
2250 
2251 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2252 		return 0;
2253 
2254 	va_start(ap, fmt);
2255 	ret = trace_array_vprintk(tr, ip, fmt, ap);
2256 	va_end(ap);
2257 	return ret;
2258 }
2259 
2260 int trace_array_printk_buf(struct ring_buffer *buffer,
2261 			   unsigned long ip, const char *fmt, ...)
2262 {
2263 	int ret;
2264 	va_list ap;
2265 
2266 	if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2267 		return 0;
2268 
2269 	va_start(ap, fmt);
2270 	ret = __trace_array_vprintk(buffer, ip, fmt, ap);
2271 	va_end(ap);
2272 	return ret;
2273 }
2274 
2275 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
2276 {
2277 	return trace_array_vprintk(&global_trace, ip, fmt, args);
2278 }
2279 EXPORT_SYMBOL_GPL(trace_vprintk);
2280 
2281 static void trace_iterator_increment(struct trace_iterator *iter)
2282 {
2283 	struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
2284 
2285 	iter->idx++;
2286 	if (buf_iter)
2287 		ring_buffer_read(buf_iter, NULL);
2288 }
2289 
2290 static struct trace_entry *
2291 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
2292 		unsigned long *lost_events)
2293 {
2294 	struct ring_buffer_event *event;
2295 	struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
2296 
2297 	if (buf_iter)
2298 		event = ring_buffer_iter_peek(buf_iter, ts);
2299 	else
2300 		event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
2301 					 lost_events);
2302 
2303 	if (event) {
2304 		iter->ent_size = ring_buffer_event_length(event);
2305 		return ring_buffer_event_data(event);
2306 	}
2307 	iter->ent_size = 0;
2308 	return NULL;
2309 }
2310 
2311 static struct trace_entry *
2312 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
2313 		  unsigned long *missing_events, u64 *ent_ts)
2314 {
2315 	struct ring_buffer *buffer = iter->trace_buffer->buffer;
2316 	struct trace_entry *ent, *next = NULL;
2317 	unsigned long lost_events = 0, next_lost = 0;
2318 	int cpu_file = iter->cpu_file;
2319 	u64 next_ts = 0, ts;
2320 	int next_cpu = -1;
2321 	int next_size = 0;
2322 	int cpu;
2323 
2324 	/*
2325 	 * If we are in a per_cpu trace file, don't bother by iterating over
2326 	 * all cpu and peek directly.
2327 	 */
2328 	if (cpu_file > RING_BUFFER_ALL_CPUS) {
2329 		if (ring_buffer_empty_cpu(buffer, cpu_file))
2330 			return NULL;
2331 		ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
2332 		if (ent_cpu)
2333 			*ent_cpu = cpu_file;
2334 
2335 		return ent;
2336 	}
2337 
2338 	for_each_tracing_cpu(cpu) {
2339 
2340 		if (ring_buffer_empty_cpu(buffer, cpu))
2341 			continue;
2342 
2343 		ent = peek_next_entry(iter, cpu, &ts, &lost_events);
2344 
2345 		/*
2346 		 * Pick the entry with the smallest timestamp:
2347 		 */
2348 		if (ent && (!next || ts < next_ts)) {
2349 			next = ent;
2350 			next_cpu = cpu;
2351 			next_ts = ts;
2352 			next_lost = lost_events;
2353 			next_size = iter->ent_size;
2354 		}
2355 	}
2356 
2357 	iter->ent_size = next_size;
2358 
2359 	if (ent_cpu)
2360 		*ent_cpu = next_cpu;
2361 
2362 	if (ent_ts)
2363 		*ent_ts = next_ts;
2364 
2365 	if (missing_events)
2366 		*missing_events = next_lost;
2367 
2368 	return next;
2369 }
2370 
2371 /* Find the next real entry, without updating the iterator itself */
2372 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
2373 					  int *ent_cpu, u64 *ent_ts)
2374 {
2375 	return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
2376 }
2377 
2378 /* Find the next real entry, and increment the iterator to the next entry */
2379 void *trace_find_next_entry_inc(struct trace_iterator *iter)
2380 {
2381 	iter->ent = __find_next_entry(iter, &iter->cpu,
2382 				      &iter->lost_events, &iter->ts);
2383 
2384 	if (iter->ent)
2385 		trace_iterator_increment(iter);
2386 
2387 	return iter->ent ? iter : NULL;
2388 }
2389 
2390 static void trace_consume(struct trace_iterator *iter)
2391 {
2392 	ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
2393 			    &iter->lost_events);
2394 }
2395 
2396 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
2397 {
2398 	struct trace_iterator *iter = m->private;
2399 	int i = (int)*pos;
2400 	void *ent;
2401 
2402 	WARN_ON_ONCE(iter->leftover);
2403 
2404 	(*pos)++;
2405 
2406 	/* can't go backwards */
2407 	if (iter->idx > i)
2408 		return NULL;
2409 
2410 	if (iter->idx < 0)
2411 		ent = trace_find_next_entry_inc(iter);
2412 	else
2413 		ent = iter;
2414 
2415 	while (ent && iter->idx < i)
2416 		ent = trace_find_next_entry_inc(iter);
2417 
2418 	iter->pos = *pos;
2419 
2420 	return ent;
2421 }
2422 
2423 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2424 {
2425 	struct ring_buffer_event *event;
2426 	struct ring_buffer_iter *buf_iter;
2427 	unsigned long entries = 0;
2428 	u64 ts;
2429 
2430 	per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2431 
2432 	buf_iter = trace_buffer_iter(iter, cpu);
2433 	if (!buf_iter)
2434 		return;
2435 
2436 	ring_buffer_iter_reset(buf_iter);
2437 
2438 	/*
2439 	 * We could have the case with the max latency tracers
2440 	 * that a reset never took place on a cpu. This is evident
2441 	 * by the timestamp being before the start of the buffer.
2442 	 */
2443 	while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
2444 		if (ts >= iter->trace_buffer->time_start)
2445 			break;
2446 		entries++;
2447 		ring_buffer_read(buf_iter, NULL);
2448 	}
2449 
2450 	per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2451 }
2452 
2453 /*
2454  * The current tracer is copied to avoid a global locking
2455  * all around.
2456  */
2457 static void *s_start(struct seq_file *m, loff_t *pos)
2458 {
2459 	struct trace_iterator *iter = m->private;
2460 	struct trace_array *tr = iter->tr;
2461 	int cpu_file = iter->cpu_file;
2462 	void *p = NULL;
2463 	loff_t l = 0;
2464 	int cpu;
2465 
2466 	/*
2467 	 * copy the tracer to avoid using a global lock all around.
2468 	 * iter->trace is a copy of current_trace, the pointer to the
2469 	 * name may be used instead of a strcmp(), as iter->trace->name
2470 	 * will point to the same string as current_trace->name.
2471 	 */
2472 	mutex_lock(&trace_types_lock);
2473 	if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
2474 		*iter->trace = *tr->current_trace;
2475 	mutex_unlock(&trace_types_lock);
2476 
2477 #ifdef CONFIG_TRACER_MAX_TRACE
2478 	if (iter->snapshot && iter->trace->use_max_tr)
2479 		return ERR_PTR(-EBUSY);
2480 #endif
2481 
2482 	if (!iter->snapshot)
2483 		atomic_inc(&trace_record_cmdline_disabled);
2484 
2485 	if (*pos != iter->pos) {
2486 		iter->ent = NULL;
2487 		iter->cpu = 0;
2488 		iter->idx = -1;
2489 
2490 		if (cpu_file == RING_BUFFER_ALL_CPUS) {
2491 			for_each_tracing_cpu(cpu)
2492 				tracing_iter_reset(iter, cpu);
2493 		} else
2494 			tracing_iter_reset(iter, cpu_file);
2495 
2496 		iter->leftover = 0;
2497 		for (p = iter; p && l < *pos; p = s_next(m, p, &l))
2498 			;
2499 
2500 	} else {
2501 		/*
2502 		 * If we overflowed the seq_file before, then we want
2503 		 * to just reuse the trace_seq buffer again.
2504 		 */
2505 		if (iter->leftover)
2506 			p = iter;
2507 		else {
2508 			l = *pos - 1;
2509 			p = s_next(m, p, &l);
2510 		}
2511 	}
2512 
2513 	trace_event_read_lock();
2514 	trace_access_lock(cpu_file);
2515 	return p;
2516 }
2517 
2518 static void s_stop(struct seq_file *m, void *p)
2519 {
2520 	struct trace_iterator *iter = m->private;
2521 
2522 #ifdef CONFIG_TRACER_MAX_TRACE
2523 	if (iter->snapshot && iter->trace->use_max_tr)
2524 		return;
2525 #endif
2526 
2527 	if (!iter->snapshot)
2528 		atomic_dec(&trace_record_cmdline_disabled);
2529 
2530 	trace_access_unlock(iter->cpu_file);
2531 	trace_event_read_unlock();
2532 }
2533 
2534 static void
2535 get_total_entries(struct trace_buffer *buf,
2536 		  unsigned long *total, unsigned long *entries)
2537 {
2538 	unsigned long count;
2539 	int cpu;
2540 
2541 	*total = 0;
2542 	*entries = 0;
2543 
2544 	for_each_tracing_cpu(cpu) {
2545 		count = ring_buffer_entries_cpu(buf->buffer, cpu);
2546 		/*
2547 		 * If this buffer has skipped entries, then we hold all
2548 		 * entries for the trace and we need to ignore the
2549 		 * ones before the time stamp.
2550 		 */
2551 		if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
2552 			count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
2553 			/* total is the same as the entries */
2554 			*total += count;
2555 		} else
2556 			*total += count +
2557 				ring_buffer_overrun_cpu(buf->buffer, cpu);
2558 		*entries += count;
2559 	}
2560 }
2561 
2562 static void print_lat_help_header(struct seq_file *m)
2563 {
2564 	seq_puts(m, "#                  _------=> CPU#            \n"
2565 		    "#                 / _-----=> irqs-off        \n"
2566 		    "#                | / _----=> need-resched    \n"
2567 		    "#                || / _---=> hardirq/softirq \n"
2568 		    "#                ||| / _--=> preempt-depth   \n"
2569 		    "#                |||| /     delay            \n"
2570 		    "#  cmd     pid   ||||| time  |   caller      \n"
2571 		    "#     \\   /      |||||  \\    |   /         \n");
2572 }
2573 
2574 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
2575 {
2576 	unsigned long total;
2577 	unsigned long entries;
2578 
2579 	get_total_entries(buf, &total, &entries);
2580 	seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu   #P:%d\n",
2581 		   entries, total, num_online_cpus());
2582 	seq_puts(m, "#\n");
2583 }
2584 
2585 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
2586 {
2587 	print_event_info(buf, m);
2588 	seq_puts(m, "#           TASK-PID   CPU#      TIMESTAMP  FUNCTION\n"
2589 		    "#              | |       |          |         |\n");
2590 }
2591 
2592 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
2593 {
2594 	print_event_info(buf, m);
2595 	seq_puts(m, "#                              _-----=> irqs-off\n"
2596 		    "#                             / _----=> need-resched\n"
2597 		    "#                            | / _---=> hardirq/softirq\n"
2598 		    "#                            || / _--=> preempt-depth\n"
2599 		    "#                            ||| /     delay\n"
2600 		    "#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION\n"
2601 		    "#              | |       |   ||||       |         |\n");
2602 }
2603 
2604 void
2605 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
2606 {
2607 	unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
2608 	struct trace_buffer *buf = iter->trace_buffer;
2609 	struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2610 	struct tracer *type = iter->trace;
2611 	unsigned long entries;
2612 	unsigned long total;
2613 	const char *name = "preemption";
2614 
2615 	name = type->name;
2616 
2617 	get_total_entries(buf, &total, &entries);
2618 
2619 	seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
2620 		   name, UTS_RELEASE);
2621 	seq_puts(m, "# -----------------------------------"
2622 		 "---------------------------------\n");
2623 	seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
2624 		   " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
2625 		   nsecs_to_usecs(data->saved_latency),
2626 		   entries,
2627 		   total,
2628 		   buf->cpu,
2629 #if defined(CONFIG_PREEMPT_NONE)
2630 		   "server",
2631 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
2632 		   "desktop",
2633 #elif defined(CONFIG_PREEMPT)
2634 		   "preempt",
2635 #else
2636 		   "unknown",
2637 #endif
2638 		   /* These are reserved for later use */
2639 		   0, 0, 0, 0);
2640 #ifdef CONFIG_SMP
2641 	seq_printf(m, " #P:%d)\n", num_online_cpus());
2642 #else
2643 	seq_puts(m, ")\n");
2644 #endif
2645 	seq_puts(m, "#    -----------------\n");
2646 	seq_printf(m, "#    | task: %.16s-%d "
2647 		   "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
2648 		   data->comm, data->pid,
2649 		   from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
2650 		   data->policy, data->rt_priority);
2651 	seq_puts(m, "#    -----------------\n");
2652 
2653 	if (data->critical_start) {
2654 		seq_puts(m, "#  => started at: ");
2655 		seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
2656 		trace_print_seq(m, &iter->seq);
2657 		seq_puts(m, "\n#  => ended at:   ");
2658 		seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
2659 		trace_print_seq(m, &iter->seq);
2660 		seq_puts(m, "\n#\n");
2661 	}
2662 
2663 	seq_puts(m, "#\n");
2664 }
2665 
2666 static void test_cpu_buff_start(struct trace_iterator *iter)
2667 {
2668 	struct trace_seq *s = &iter->seq;
2669 	struct trace_array *tr = iter->tr;
2670 
2671 	if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
2672 		return;
2673 
2674 	if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
2675 		return;
2676 
2677 	if (iter->started && cpumask_test_cpu(iter->cpu, iter->started))
2678 		return;
2679 
2680 	if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2681 		return;
2682 
2683 	if (iter->started)
2684 		cpumask_set_cpu(iter->cpu, iter->started);
2685 
2686 	/* Don't print started cpu buffer for the first entry of the trace */
2687 	if (iter->idx > 1)
2688 		trace_seq_printf(s, "##### CPU %u buffer started ####\n",
2689 				iter->cpu);
2690 }
2691 
2692 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
2693 {
2694 	struct trace_array *tr = iter->tr;
2695 	struct trace_seq *s = &iter->seq;
2696 	unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
2697 	struct trace_entry *entry;
2698 	struct trace_event *event;
2699 
2700 	entry = iter->ent;
2701 
2702 	test_cpu_buff_start(iter);
2703 
2704 	event = ftrace_find_event(entry->type);
2705 
2706 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2707 		if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2708 			trace_print_lat_context(iter);
2709 		else
2710 			trace_print_context(iter);
2711 	}
2712 
2713 	if (trace_seq_has_overflowed(s))
2714 		return TRACE_TYPE_PARTIAL_LINE;
2715 
2716 	if (event)
2717 		return event->funcs->trace(iter, sym_flags, event);
2718 
2719 	trace_seq_printf(s, "Unknown type %d\n", entry->type);
2720 
2721 	return trace_handle_return(s);
2722 }
2723 
2724 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
2725 {
2726 	struct trace_array *tr = iter->tr;
2727 	struct trace_seq *s = &iter->seq;
2728 	struct trace_entry *entry;
2729 	struct trace_event *event;
2730 
2731 	entry = iter->ent;
2732 
2733 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
2734 		trace_seq_printf(s, "%d %d %llu ",
2735 				 entry->pid, iter->cpu, iter->ts);
2736 
2737 	if (trace_seq_has_overflowed(s))
2738 		return TRACE_TYPE_PARTIAL_LINE;
2739 
2740 	event = ftrace_find_event(entry->type);
2741 	if (event)
2742 		return event->funcs->raw(iter, 0, event);
2743 
2744 	trace_seq_printf(s, "%d ?\n", entry->type);
2745 
2746 	return trace_handle_return(s);
2747 }
2748 
2749 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
2750 {
2751 	struct trace_array *tr = iter->tr;
2752 	struct trace_seq *s = &iter->seq;
2753 	unsigned char newline = '\n';
2754 	struct trace_entry *entry;
2755 	struct trace_event *event;
2756 
2757 	entry = iter->ent;
2758 
2759 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2760 		SEQ_PUT_HEX_FIELD(s, entry->pid);
2761 		SEQ_PUT_HEX_FIELD(s, iter->cpu);
2762 		SEQ_PUT_HEX_FIELD(s, iter->ts);
2763 		if (trace_seq_has_overflowed(s))
2764 			return TRACE_TYPE_PARTIAL_LINE;
2765 	}
2766 
2767 	event = ftrace_find_event(entry->type);
2768 	if (event) {
2769 		enum print_line_t ret = event->funcs->hex(iter, 0, event);
2770 		if (ret != TRACE_TYPE_HANDLED)
2771 			return ret;
2772 	}
2773 
2774 	SEQ_PUT_FIELD(s, newline);
2775 
2776 	return trace_handle_return(s);
2777 }
2778 
2779 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
2780 {
2781 	struct trace_array *tr = iter->tr;
2782 	struct trace_seq *s = &iter->seq;
2783 	struct trace_entry *entry;
2784 	struct trace_event *event;
2785 
2786 	entry = iter->ent;
2787 
2788 	if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2789 		SEQ_PUT_FIELD(s, entry->pid);
2790 		SEQ_PUT_FIELD(s, iter->cpu);
2791 		SEQ_PUT_FIELD(s, iter->ts);
2792 		if (trace_seq_has_overflowed(s))
2793 			return TRACE_TYPE_PARTIAL_LINE;
2794 	}
2795 
2796 	event = ftrace_find_event(entry->type);
2797 	return event ? event->funcs->binary(iter, 0, event) :
2798 		TRACE_TYPE_HANDLED;
2799 }
2800 
2801 int trace_empty(struct trace_iterator *iter)
2802 {
2803 	struct ring_buffer_iter *buf_iter;
2804 	int cpu;
2805 
2806 	/* If we are looking at one CPU buffer, only check that one */
2807 	if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
2808 		cpu = iter->cpu_file;
2809 		buf_iter = trace_buffer_iter(iter, cpu);
2810 		if (buf_iter) {
2811 			if (!ring_buffer_iter_empty(buf_iter))
2812 				return 0;
2813 		} else {
2814 			if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2815 				return 0;
2816 		}
2817 		return 1;
2818 	}
2819 
2820 	for_each_tracing_cpu(cpu) {
2821 		buf_iter = trace_buffer_iter(iter, cpu);
2822 		if (buf_iter) {
2823 			if (!ring_buffer_iter_empty(buf_iter))
2824 				return 0;
2825 		} else {
2826 			if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2827 				return 0;
2828 		}
2829 	}
2830 
2831 	return 1;
2832 }
2833 
2834 /*  Called with trace_event_read_lock() held. */
2835 enum print_line_t print_trace_line(struct trace_iterator *iter)
2836 {
2837 	struct trace_array *tr = iter->tr;
2838 	unsigned long trace_flags = tr->trace_flags;
2839 	enum print_line_t ret;
2840 
2841 	if (iter->lost_events) {
2842 		trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
2843 				 iter->cpu, iter->lost_events);
2844 		if (trace_seq_has_overflowed(&iter->seq))
2845 			return TRACE_TYPE_PARTIAL_LINE;
2846 	}
2847 
2848 	if (iter->trace && iter->trace->print_line) {
2849 		ret = iter->trace->print_line(iter);
2850 		if (ret != TRACE_TYPE_UNHANDLED)
2851 			return ret;
2852 	}
2853 
2854 	if (iter->ent->type == TRACE_BPUTS &&
2855 			trace_flags & TRACE_ITER_PRINTK &&
2856 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2857 		return trace_print_bputs_msg_only(iter);
2858 
2859 	if (iter->ent->type == TRACE_BPRINT &&
2860 			trace_flags & TRACE_ITER_PRINTK &&
2861 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2862 		return trace_print_bprintk_msg_only(iter);
2863 
2864 	if (iter->ent->type == TRACE_PRINT &&
2865 			trace_flags & TRACE_ITER_PRINTK &&
2866 			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2867 		return trace_print_printk_msg_only(iter);
2868 
2869 	if (trace_flags & TRACE_ITER_BIN)
2870 		return print_bin_fmt(iter);
2871 
2872 	if (trace_flags & TRACE_ITER_HEX)
2873 		return print_hex_fmt(iter);
2874 
2875 	if (trace_flags & TRACE_ITER_RAW)
2876 		return print_raw_fmt(iter);
2877 
2878 	return print_trace_fmt(iter);
2879 }
2880 
2881 void trace_latency_header(struct seq_file *m)
2882 {
2883 	struct trace_iterator *iter = m->private;
2884 	struct trace_array *tr = iter->tr;
2885 
2886 	/* print nothing if the buffers are empty */
2887 	if (trace_empty(iter))
2888 		return;
2889 
2890 	if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2891 		print_trace_header(m, iter);
2892 
2893 	if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
2894 		print_lat_help_header(m);
2895 }
2896 
2897 void trace_default_header(struct seq_file *m)
2898 {
2899 	struct trace_iterator *iter = m->private;
2900 	struct trace_array *tr = iter->tr;
2901 	unsigned long trace_flags = tr->trace_flags;
2902 
2903 	if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
2904 		return;
2905 
2906 	if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2907 		/* print nothing if the buffers are empty */
2908 		if (trace_empty(iter))
2909 			return;
2910 		print_trace_header(m, iter);
2911 		if (!(trace_flags & TRACE_ITER_VERBOSE))
2912 			print_lat_help_header(m);
2913 	} else {
2914 		if (!(trace_flags & TRACE_ITER_VERBOSE)) {
2915 			if (trace_flags & TRACE_ITER_IRQ_INFO)
2916 				print_func_help_header_irq(iter->trace_buffer, m);
2917 			else
2918 				print_func_help_header(iter->trace_buffer, m);
2919 		}
2920 	}
2921 }
2922 
2923 static void test_ftrace_alive(struct seq_file *m)
2924 {
2925 	if (!ftrace_is_dead())
2926 		return;
2927 	seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
2928 		    "#          MAY BE MISSING FUNCTION EVENTS\n");
2929 }
2930 
2931 #ifdef CONFIG_TRACER_MAX_TRACE
2932 static void show_snapshot_main_help(struct seq_file *m)
2933 {
2934 	seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
2935 		    "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2936 		    "#                      Takes a snapshot of the main buffer.\n"
2937 		    "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
2938 		    "#                      (Doesn't have to be '2' works with any number that\n"
2939 		    "#                       is not a '0' or '1')\n");
2940 }
2941 
2942 static void show_snapshot_percpu_help(struct seq_file *m)
2943 {
2944 	seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
2945 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2946 	seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2947 		    "#                      Takes a snapshot of the main buffer for this cpu.\n");
2948 #else
2949 	seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
2950 		    "#                     Must use main snapshot file to allocate.\n");
2951 #endif
2952 	seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
2953 		    "#                      (Doesn't have to be '2' works with any number that\n"
2954 		    "#                       is not a '0' or '1')\n");
2955 }
2956 
2957 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2958 {
2959 	if (iter->tr->allocated_snapshot)
2960 		seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
2961 	else
2962 		seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
2963 
2964 	seq_puts(m, "# Snapshot commands:\n");
2965 	if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
2966 		show_snapshot_main_help(m);
2967 	else
2968 		show_snapshot_percpu_help(m);
2969 }
2970 #else
2971 /* Should never be called */
2972 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
2973 #endif
2974 
2975 static int s_show(struct seq_file *m, void *v)
2976 {
2977 	struct trace_iterator *iter = v;
2978 	int ret;
2979 
2980 	if (iter->ent == NULL) {
2981 		if (iter->tr) {
2982 			seq_printf(m, "# tracer: %s\n", iter->trace->name);
2983 			seq_puts(m, "#\n");
2984 			test_ftrace_alive(m);
2985 		}
2986 		if (iter->snapshot && trace_empty(iter))
2987 			print_snapshot_help(m, iter);
2988 		else if (iter->trace && iter->trace->print_header)
2989 			iter->trace->print_header(m);
2990 		else
2991 			trace_default_header(m);
2992 
2993 	} else if (iter->leftover) {
2994 		/*
2995 		 * If we filled the seq_file buffer earlier, we
2996 		 * want to just show it now.
2997 		 */
2998 		ret = trace_print_seq(m, &iter->seq);
2999 
3000 		/* ret should this time be zero, but you never know */
3001 		iter->leftover = ret;
3002 
3003 	} else {
3004 		print_trace_line(iter);
3005 		ret = trace_print_seq(m, &iter->seq);
3006 		/*
3007 		 * If we overflow the seq_file buffer, then it will
3008 		 * ask us for this data again at start up.
3009 		 * Use that instead.
3010 		 *  ret is 0 if seq_file write succeeded.
3011 		 *        -1 otherwise.
3012 		 */
3013 		iter->leftover = ret;
3014 	}
3015 
3016 	return 0;
3017 }
3018 
3019 /*
3020  * Should be used after trace_array_get(), trace_types_lock
3021  * ensures that i_cdev was already initialized.
3022  */
3023 static inline int tracing_get_cpu(struct inode *inode)
3024 {
3025 	if (inode->i_cdev) /* See trace_create_cpu_file() */
3026 		return (long)inode->i_cdev - 1;
3027 	return RING_BUFFER_ALL_CPUS;
3028 }
3029 
3030 static const struct seq_operations tracer_seq_ops = {
3031 	.start		= s_start,
3032 	.next		= s_next,
3033 	.stop		= s_stop,
3034 	.show		= s_show,
3035 };
3036 
3037 static struct trace_iterator *
3038 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
3039 {
3040 	struct trace_array *tr = inode->i_private;
3041 	struct trace_iterator *iter;
3042 	int cpu;
3043 
3044 	if (tracing_disabled)
3045 		return ERR_PTR(-ENODEV);
3046 
3047 	iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
3048 	if (!iter)
3049 		return ERR_PTR(-ENOMEM);
3050 
3051 	iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
3052 				    GFP_KERNEL);
3053 	if (!iter->buffer_iter)
3054 		goto release;
3055 
3056 	/*
3057 	 * We make a copy of the current tracer to avoid concurrent
3058 	 * changes on it while we are reading.
3059 	 */
3060 	mutex_lock(&trace_types_lock);
3061 	iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
3062 	if (!iter->trace)
3063 		goto fail;
3064 
3065 	*iter->trace = *tr->current_trace;
3066 
3067 	if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
3068 		goto fail;
3069 
3070 	iter->tr = tr;
3071 
3072 #ifdef CONFIG_TRACER_MAX_TRACE
3073 	/* Currently only the top directory has a snapshot */
3074 	if (tr->current_trace->print_max || snapshot)
3075 		iter->trace_buffer = &tr->max_buffer;
3076 	else
3077 #endif
3078 		iter->trace_buffer = &tr->trace_buffer;
3079 	iter->snapshot = snapshot;
3080 	iter->pos = -1;
3081 	iter->cpu_file = tracing_get_cpu(inode);
3082 	mutex_init(&iter->mutex);
3083 
3084 	/* Notify the tracer early; before we stop tracing. */
3085 	if (iter->trace && iter->trace->open)
3086 		iter->trace->open(iter);
3087 
3088 	/* Annotate start of buffers if we had overruns */
3089 	if (ring_buffer_overruns(iter->trace_buffer->buffer))
3090 		iter->iter_flags |= TRACE_FILE_ANNOTATE;
3091 
3092 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
3093 	if (trace_clocks[tr->clock_id].in_ns)
3094 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3095 
3096 	/* stop the trace while dumping if we are not opening "snapshot" */
3097 	if (!iter->snapshot)
3098 		tracing_stop_tr(tr);
3099 
3100 	if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
3101 		for_each_tracing_cpu(cpu) {
3102 			iter->buffer_iter[cpu] =
3103 				ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3104 		}
3105 		ring_buffer_read_prepare_sync();
3106 		for_each_tracing_cpu(cpu) {
3107 			ring_buffer_read_start(iter->buffer_iter[cpu]);
3108 			tracing_iter_reset(iter, cpu);
3109 		}
3110 	} else {
3111 		cpu = iter->cpu_file;
3112 		iter->buffer_iter[cpu] =
3113 			ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3114 		ring_buffer_read_prepare_sync();
3115 		ring_buffer_read_start(iter->buffer_iter[cpu]);
3116 		tracing_iter_reset(iter, cpu);
3117 	}
3118 
3119 	mutex_unlock(&trace_types_lock);
3120 
3121 	return iter;
3122 
3123  fail:
3124 	mutex_unlock(&trace_types_lock);
3125 	kfree(iter->trace);
3126 	kfree(iter->buffer_iter);
3127 release:
3128 	seq_release_private(inode, file);
3129 	return ERR_PTR(-ENOMEM);
3130 }
3131 
3132 int tracing_open_generic(struct inode *inode, struct file *filp)
3133 {
3134 	if (tracing_disabled)
3135 		return -ENODEV;
3136 
3137 	filp->private_data = inode->i_private;
3138 	return 0;
3139 }
3140 
3141 bool tracing_is_disabled(void)
3142 {
3143 	return (tracing_disabled) ? true: false;
3144 }
3145 
3146 /*
3147  * Open and update trace_array ref count.
3148  * Must have the current trace_array passed to it.
3149  */
3150 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
3151 {
3152 	struct trace_array *tr = inode->i_private;
3153 
3154 	if (tracing_disabled)
3155 		return -ENODEV;
3156 
3157 	if (trace_array_get(tr) < 0)
3158 		return -ENODEV;
3159 
3160 	filp->private_data = inode->i_private;
3161 
3162 	return 0;
3163 }
3164 
3165 static int tracing_release(struct inode *inode, struct file *file)
3166 {
3167 	struct trace_array *tr = inode->i_private;
3168 	struct seq_file *m = file->private_data;
3169 	struct trace_iterator *iter;
3170 	int cpu;
3171 
3172 	if (!(file->f_mode & FMODE_READ)) {
3173 		trace_array_put(tr);
3174 		return 0;
3175 	}
3176 
3177 	/* Writes do not use seq_file */
3178 	iter = m->private;
3179 	mutex_lock(&trace_types_lock);
3180 
3181 	for_each_tracing_cpu(cpu) {
3182 		if (iter->buffer_iter[cpu])
3183 			ring_buffer_read_finish(iter->buffer_iter[cpu]);
3184 	}
3185 
3186 	if (iter->trace && iter->trace->close)
3187 		iter->trace->close(iter);
3188 
3189 	if (!iter->snapshot)
3190 		/* reenable tracing if it was previously enabled */
3191 		tracing_start_tr(tr);
3192 
3193 	__trace_array_put(tr);
3194 
3195 	mutex_unlock(&trace_types_lock);
3196 
3197 	mutex_destroy(&iter->mutex);
3198 	free_cpumask_var(iter->started);
3199 	kfree(iter->trace);
3200 	kfree(iter->buffer_iter);
3201 	seq_release_private(inode, file);
3202 
3203 	return 0;
3204 }
3205 
3206 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3207 {
3208 	struct trace_array *tr = inode->i_private;
3209 
3210 	trace_array_put(tr);
3211 	return 0;
3212 }
3213 
3214 static int tracing_single_release_tr(struct inode *inode, struct file *file)
3215 {
3216 	struct trace_array *tr = inode->i_private;
3217 
3218 	trace_array_put(tr);
3219 
3220 	return single_release(inode, file);
3221 }
3222 
3223 static int tracing_open(struct inode *inode, struct file *file)
3224 {
3225 	struct trace_array *tr = inode->i_private;
3226 	struct trace_iterator *iter;
3227 	int ret = 0;
3228 
3229 	if (trace_array_get(tr) < 0)
3230 		return -ENODEV;
3231 
3232 	/* If this file was open for write, then erase contents */
3233 	if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
3234 		int cpu = tracing_get_cpu(inode);
3235 
3236 		if (cpu == RING_BUFFER_ALL_CPUS)
3237 			tracing_reset_online_cpus(&tr->trace_buffer);
3238 		else
3239 			tracing_reset(&tr->trace_buffer, cpu);
3240 	}
3241 
3242 	if (file->f_mode & FMODE_READ) {
3243 		iter = __tracing_open(inode, file, false);
3244 		if (IS_ERR(iter))
3245 			ret = PTR_ERR(iter);
3246 		else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
3247 			iter->iter_flags |= TRACE_FILE_LAT_FMT;
3248 	}
3249 
3250 	if (ret < 0)
3251 		trace_array_put(tr);
3252 
3253 	return ret;
3254 }
3255 
3256 /*
3257  * Some tracers are not suitable for instance buffers.
3258  * A tracer is always available for the global array (toplevel)
3259  * or if it explicitly states that it is.
3260  */
3261 static bool
3262 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
3263 {
3264 	return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
3265 }
3266 
3267 /* Find the next tracer that this trace array may use */
3268 static struct tracer *
3269 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
3270 {
3271 	while (t && !trace_ok_for_array(t, tr))
3272 		t = t->next;
3273 
3274 	return t;
3275 }
3276 
3277 static void *
3278 t_next(struct seq_file *m, void *v, loff_t *pos)
3279 {
3280 	struct trace_array *tr = m->private;
3281 	struct tracer *t = v;
3282 
3283 	(*pos)++;
3284 
3285 	if (t)
3286 		t = get_tracer_for_array(tr, t->next);
3287 
3288 	return t;
3289 }
3290 
3291 static void *t_start(struct seq_file *m, loff_t *pos)
3292 {
3293 	struct trace_array *tr = m->private;
3294 	struct tracer *t;
3295 	loff_t l = 0;
3296 
3297 	mutex_lock(&trace_types_lock);
3298 
3299 	t = get_tracer_for_array(tr, trace_types);
3300 	for (; t && l < *pos; t = t_next(m, t, &l))
3301 			;
3302 
3303 	return t;
3304 }
3305 
3306 static void t_stop(struct seq_file *m, void *p)
3307 {
3308 	mutex_unlock(&trace_types_lock);
3309 }
3310 
3311 static int t_show(struct seq_file *m, void *v)
3312 {
3313 	struct tracer *t = v;
3314 
3315 	if (!t)
3316 		return 0;
3317 
3318 	seq_puts(m, t->name);
3319 	if (t->next)
3320 		seq_putc(m, ' ');
3321 	else
3322 		seq_putc(m, '\n');
3323 
3324 	return 0;
3325 }
3326 
3327 static const struct seq_operations show_traces_seq_ops = {
3328 	.start		= t_start,
3329 	.next		= t_next,
3330 	.stop		= t_stop,
3331 	.show		= t_show,
3332 };
3333 
3334 static int show_traces_open(struct inode *inode, struct file *file)
3335 {
3336 	struct trace_array *tr = inode->i_private;
3337 	struct seq_file *m;
3338 	int ret;
3339 
3340 	if (tracing_disabled)
3341 		return -ENODEV;
3342 
3343 	ret = seq_open(file, &show_traces_seq_ops);
3344 	if (ret)
3345 		return ret;
3346 
3347 	m = file->private_data;
3348 	m->private = tr;
3349 
3350 	return 0;
3351 }
3352 
3353 static ssize_t
3354 tracing_write_stub(struct file *filp, const char __user *ubuf,
3355 		   size_t count, loff_t *ppos)
3356 {
3357 	return count;
3358 }
3359 
3360 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
3361 {
3362 	int ret;
3363 
3364 	if (file->f_mode & FMODE_READ)
3365 		ret = seq_lseek(file, offset, whence);
3366 	else
3367 		file->f_pos = ret = 0;
3368 
3369 	return ret;
3370 }
3371 
3372 static const struct file_operations tracing_fops = {
3373 	.open		= tracing_open,
3374 	.read		= seq_read,
3375 	.write		= tracing_write_stub,
3376 	.llseek		= tracing_lseek,
3377 	.release	= tracing_release,
3378 };
3379 
3380 static const struct file_operations show_traces_fops = {
3381 	.open		= show_traces_open,
3382 	.read		= seq_read,
3383 	.release	= seq_release,
3384 	.llseek		= seq_lseek,
3385 };
3386 
3387 /*
3388  * The tracer itself will not take this lock, but still we want
3389  * to provide a consistent cpumask to user-space:
3390  */
3391 static DEFINE_MUTEX(tracing_cpumask_update_lock);
3392 
3393 /*
3394  * Temporary storage for the character representation of the
3395  * CPU bitmask (and one more byte for the newline):
3396  */
3397 static char mask_str[NR_CPUS + 1];
3398 
3399 static ssize_t
3400 tracing_cpumask_read(struct file *filp, char __user *ubuf,
3401 		     size_t count, loff_t *ppos)
3402 {
3403 	struct trace_array *tr = file_inode(filp)->i_private;
3404 	int len;
3405 
3406 	mutex_lock(&tracing_cpumask_update_lock);
3407 
3408 	len = snprintf(mask_str, count, "%*pb\n",
3409 		       cpumask_pr_args(tr->tracing_cpumask));
3410 	if (len >= count) {
3411 		count = -EINVAL;
3412 		goto out_err;
3413 	}
3414 	count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
3415 
3416 out_err:
3417 	mutex_unlock(&tracing_cpumask_update_lock);
3418 
3419 	return count;
3420 }
3421 
3422 static ssize_t
3423 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
3424 		      size_t count, loff_t *ppos)
3425 {
3426 	struct trace_array *tr = file_inode(filp)->i_private;
3427 	cpumask_var_t tracing_cpumask_new;
3428 	int err, cpu;
3429 
3430 	if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
3431 		return -ENOMEM;
3432 
3433 	err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
3434 	if (err)
3435 		goto err_unlock;
3436 
3437 	mutex_lock(&tracing_cpumask_update_lock);
3438 
3439 	local_irq_disable();
3440 	arch_spin_lock(&tr->max_lock);
3441 	for_each_tracing_cpu(cpu) {
3442 		/*
3443 		 * Increase/decrease the disabled counter if we are
3444 		 * about to flip a bit in the cpumask:
3445 		 */
3446 		if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3447 				!cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3448 			atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3449 			ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
3450 		}
3451 		if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3452 				cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3453 			atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3454 			ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
3455 		}
3456 	}
3457 	arch_spin_unlock(&tr->max_lock);
3458 	local_irq_enable();
3459 
3460 	cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
3461 
3462 	mutex_unlock(&tracing_cpumask_update_lock);
3463 	free_cpumask_var(tracing_cpumask_new);
3464 
3465 	return count;
3466 
3467 err_unlock:
3468 	free_cpumask_var(tracing_cpumask_new);
3469 
3470 	return err;
3471 }
3472 
3473 static const struct file_operations tracing_cpumask_fops = {
3474 	.open		= tracing_open_generic_tr,
3475 	.read		= tracing_cpumask_read,
3476 	.write		= tracing_cpumask_write,
3477 	.release	= tracing_release_generic_tr,
3478 	.llseek		= generic_file_llseek,
3479 };
3480 
3481 static int tracing_trace_options_show(struct seq_file *m, void *v)
3482 {
3483 	struct tracer_opt *trace_opts;
3484 	struct trace_array *tr = m->private;
3485 	u32 tracer_flags;
3486 	int i;
3487 
3488 	mutex_lock(&trace_types_lock);
3489 	tracer_flags = tr->current_trace->flags->val;
3490 	trace_opts = tr->current_trace->flags->opts;
3491 
3492 	for (i = 0; trace_options[i]; i++) {
3493 		if (tr->trace_flags & (1 << i))
3494 			seq_printf(m, "%s\n", trace_options[i]);
3495 		else
3496 			seq_printf(m, "no%s\n", trace_options[i]);
3497 	}
3498 
3499 	for (i = 0; trace_opts[i].name; i++) {
3500 		if (tracer_flags & trace_opts[i].bit)
3501 			seq_printf(m, "%s\n", trace_opts[i].name);
3502 		else
3503 			seq_printf(m, "no%s\n", trace_opts[i].name);
3504 	}
3505 	mutex_unlock(&trace_types_lock);
3506 
3507 	return 0;
3508 }
3509 
3510 static int __set_tracer_option(struct trace_array *tr,
3511 			       struct tracer_flags *tracer_flags,
3512 			       struct tracer_opt *opts, int neg)
3513 {
3514 	struct tracer *trace = tracer_flags->trace;
3515 	int ret;
3516 
3517 	ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
3518 	if (ret)
3519 		return ret;
3520 
3521 	if (neg)
3522 		tracer_flags->val &= ~opts->bit;
3523 	else
3524 		tracer_flags->val |= opts->bit;
3525 	return 0;
3526 }
3527 
3528 /* Try to assign a tracer specific option */
3529 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
3530 {
3531 	struct tracer *trace = tr->current_trace;
3532 	struct tracer_flags *tracer_flags = trace->flags;
3533 	struct tracer_opt *opts = NULL;
3534 	int i;
3535 
3536 	for (i = 0; tracer_flags->opts[i].name; i++) {
3537 		opts = &tracer_flags->opts[i];
3538 
3539 		if (strcmp(cmp, opts->name) == 0)
3540 			return __set_tracer_option(tr, trace->flags, opts, neg);
3541 	}
3542 
3543 	return -EINVAL;
3544 }
3545 
3546 /* Some tracers require overwrite to stay enabled */
3547 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
3548 {
3549 	if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
3550 		return -1;
3551 
3552 	return 0;
3553 }
3554 
3555 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
3556 {
3557 	/* do nothing if flag is already set */
3558 	if (!!(tr->trace_flags & mask) == !!enabled)
3559 		return 0;
3560 
3561 	/* Give the tracer a chance to approve the change */
3562 	if (tr->current_trace->flag_changed)
3563 		if (tr->current_trace->flag_changed(tr, mask, !!enabled))
3564 			return -EINVAL;
3565 
3566 	if (enabled)
3567 		tr->trace_flags |= mask;
3568 	else
3569 		tr->trace_flags &= ~mask;
3570 
3571 	if (mask == TRACE_ITER_RECORD_CMD)
3572 		trace_event_enable_cmd_record(enabled);
3573 
3574 	if (mask == TRACE_ITER_OVERWRITE) {
3575 		ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
3576 #ifdef CONFIG_TRACER_MAX_TRACE
3577 		ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
3578 #endif
3579 	}
3580 
3581 	if (mask == TRACE_ITER_PRINTK) {
3582 		trace_printk_start_stop_comm(enabled);
3583 		trace_printk_control(enabled);
3584 	}
3585 
3586 	return 0;
3587 }
3588 
3589 static int trace_set_options(struct trace_array *tr, char *option)
3590 {
3591 	char *cmp;
3592 	int neg = 0;
3593 	int ret = -ENODEV;
3594 	int i;
3595 	size_t orig_len = strlen(option);
3596 
3597 	cmp = strstrip(option);
3598 
3599 	if (strncmp(cmp, "no", 2) == 0) {
3600 		neg = 1;
3601 		cmp += 2;
3602 	}
3603 
3604 	mutex_lock(&trace_types_lock);
3605 
3606 	for (i = 0; trace_options[i]; i++) {
3607 		if (strcmp(cmp, trace_options[i]) == 0) {
3608 			ret = set_tracer_flag(tr, 1 << i, !neg);
3609 			break;
3610 		}
3611 	}
3612 
3613 	/* If no option could be set, test the specific tracer options */
3614 	if (!trace_options[i])
3615 		ret = set_tracer_option(tr, cmp, neg);
3616 
3617 	mutex_unlock(&trace_types_lock);
3618 
3619 	/*
3620 	 * If the first trailing whitespace is replaced with '\0' by strstrip,
3621 	 * turn it back into a space.
3622 	 */
3623 	if (orig_len > strlen(option))
3624 		option[strlen(option)] = ' ';
3625 
3626 	return ret;
3627 }
3628 
3629 static void __init apply_trace_boot_options(void)
3630 {
3631 	char *buf = trace_boot_options_buf;
3632 	char *option;
3633 
3634 	while (true) {
3635 		option = strsep(&buf, ",");
3636 
3637 		if (!option)
3638 			break;
3639 
3640 		if (*option)
3641 			trace_set_options(&global_trace, option);
3642 
3643 		/* Put back the comma to allow this to be called again */
3644 		if (buf)
3645 			*(buf - 1) = ',';
3646 	}
3647 }
3648 
3649 static ssize_t
3650 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
3651 			size_t cnt, loff_t *ppos)
3652 {
3653 	struct seq_file *m = filp->private_data;
3654 	struct trace_array *tr = m->private;
3655 	char buf[64];
3656 	int ret;
3657 
3658 	if (cnt >= sizeof(buf))
3659 		return -EINVAL;
3660 
3661 	if (copy_from_user(&buf, ubuf, cnt))
3662 		return -EFAULT;
3663 
3664 	buf[cnt] = 0;
3665 
3666 	ret = trace_set_options(tr, buf);
3667 	if (ret < 0)
3668 		return ret;
3669 
3670 	*ppos += cnt;
3671 
3672 	return cnt;
3673 }
3674 
3675 static int tracing_trace_options_open(struct inode *inode, struct file *file)
3676 {
3677 	struct trace_array *tr = inode->i_private;
3678 	int ret;
3679 
3680 	if (tracing_disabled)
3681 		return -ENODEV;
3682 
3683 	if (trace_array_get(tr) < 0)
3684 		return -ENODEV;
3685 
3686 	ret = single_open(file, tracing_trace_options_show, inode->i_private);
3687 	if (ret < 0)
3688 		trace_array_put(tr);
3689 
3690 	return ret;
3691 }
3692 
3693 static const struct file_operations tracing_iter_fops = {
3694 	.open		= tracing_trace_options_open,
3695 	.read		= seq_read,
3696 	.llseek		= seq_lseek,
3697 	.release	= tracing_single_release_tr,
3698 	.write		= tracing_trace_options_write,
3699 };
3700 
3701 static const char readme_msg[] =
3702 	"tracing mini-HOWTO:\n\n"
3703 	"# echo 0 > tracing_on : quick way to disable tracing\n"
3704 	"# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
3705 	" Important files:\n"
3706 	"  trace\t\t\t- The static contents of the buffer\n"
3707 	"\t\t\t  To clear the buffer write into this file: echo > trace\n"
3708 	"  trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
3709 	"  current_tracer\t- function and latency tracers\n"
3710 	"  available_tracers\t- list of configured tracers for current_tracer\n"
3711 	"  buffer_size_kb\t- view and modify size of per cpu buffer\n"
3712 	"  buffer_total_size_kb  - view total size of all cpu buffers\n\n"
3713 	"  trace_clock\t\t-change the clock used to order events\n"
3714 	"       local:   Per cpu clock but may not be synced across CPUs\n"
3715 	"      global:   Synced across CPUs but slows tracing down.\n"
3716 	"     counter:   Not a clock, but just an increment\n"
3717 	"      uptime:   Jiffy counter from time of boot\n"
3718 	"        perf:   Same clock that perf events use\n"
3719 #ifdef CONFIG_X86_64
3720 	"     x86-tsc:   TSC cycle counter\n"
3721 #endif
3722 	"\n  trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
3723 	"  tracing_cpumask\t- Limit which CPUs to trace\n"
3724 	"  instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
3725 	"\t\t\t  Remove sub-buffer with rmdir\n"
3726 	"  trace_options\t\t- Set format or modify how tracing happens\n"
3727 	"\t\t\t  Disable an option by adding a suffix 'no' to the\n"
3728 	"\t\t\t  option name\n"
3729 	"  saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
3730 #ifdef CONFIG_DYNAMIC_FTRACE
3731 	"\n  available_filter_functions - list of functions that can be filtered on\n"
3732 	"  set_ftrace_filter\t- echo function name in here to only trace these\n"
3733 	"\t\t\t  functions\n"
3734 	"\t     accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3735 	"\t     modules: Can select a group via module\n"
3736 	"\t      Format: :mod:<module-name>\n"
3737 	"\t     example: echo :mod:ext3 > set_ftrace_filter\n"
3738 	"\t    triggers: a command to perform when function is hit\n"
3739 	"\t      Format: <function>:<trigger>[:count]\n"
3740 	"\t     trigger: traceon, traceoff\n"
3741 	"\t\t      enable_event:<system>:<event>\n"
3742 	"\t\t      disable_event:<system>:<event>\n"
3743 #ifdef CONFIG_STACKTRACE
3744 	"\t\t      stacktrace\n"
3745 #endif
3746 #ifdef CONFIG_TRACER_SNAPSHOT
3747 	"\t\t      snapshot\n"
3748 #endif
3749 	"\t\t      dump\n"
3750 	"\t\t      cpudump\n"
3751 	"\t     example: echo do_fault:traceoff > set_ftrace_filter\n"
3752 	"\t              echo do_trap:traceoff:3 > set_ftrace_filter\n"
3753 	"\t     The first one will disable tracing every time do_fault is hit\n"
3754 	"\t     The second will disable tracing at most 3 times when do_trap is hit\n"
3755 	"\t       The first time do trap is hit and it disables tracing, the\n"
3756 	"\t       counter will decrement to 2. If tracing is already disabled,\n"
3757 	"\t       the counter will not decrement. It only decrements when the\n"
3758 	"\t       trigger did work\n"
3759 	"\t     To remove trigger without count:\n"
3760 	"\t       echo '!<function>:<trigger> > set_ftrace_filter\n"
3761 	"\t     To remove trigger with a count:\n"
3762 	"\t       echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
3763 	"  set_ftrace_notrace\t- echo function name in here to never trace.\n"
3764 	"\t    accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3765 	"\t    modules: Can select a group via module command :mod:\n"
3766 	"\t    Does not accept triggers\n"
3767 #endif /* CONFIG_DYNAMIC_FTRACE */
3768 #ifdef CONFIG_FUNCTION_TRACER
3769 	"  set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
3770 	"\t\t    (function)\n"
3771 #endif
3772 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3773 	"  set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
3774 	"  set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
3775 	"  max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
3776 #endif
3777 #ifdef CONFIG_TRACER_SNAPSHOT
3778 	"\n  snapshot\t\t- Like 'trace' but shows the content of the static\n"
3779 	"\t\t\t  snapshot buffer. Read the contents for more\n"
3780 	"\t\t\t  information\n"
3781 #endif
3782 #ifdef CONFIG_STACK_TRACER
3783 	"  stack_trace\t\t- Shows the max stack trace when active\n"
3784 	"  stack_max_size\t- Shows current max stack size that was traced\n"
3785 	"\t\t\t  Write into this file to reset the max size (trigger a\n"
3786 	"\t\t\t  new trace)\n"
3787 #ifdef CONFIG_DYNAMIC_FTRACE
3788 	"  stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
3789 	"\t\t\t  traces\n"
3790 #endif
3791 #endif /* CONFIG_STACK_TRACER */
3792 	"  events/\t\t- Directory containing all trace event subsystems:\n"
3793 	"      enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
3794 	"  events/<system>/\t- Directory containing all trace events for <system>:\n"
3795 	"      enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
3796 	"\t\t\t  events\n"
3797 	"      filter\t\t- If set, only events passing filter are traced\n"
3798 	"  events/<system>/<event>/\t- Directory containing control files for\n"
3799 	"\t\t\t  <event>:\n"
3800 	"      enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
3801 	"      filter\t\t- If set, only events passing filter are traced\n"
3802 	"      trigger\t\t- If set, a command to perform when event is hit\n"
3803 	"\t    Format: <trigger>[:count][if <filter>]\n"
3804 	"\t   trigger: traceon, traceoff\n"
3805 	"\t            enable_event:<system>:<event>\n"
3806 	"\t            disable_event:<system>:<event>\n"
3807 #ifdef CONFIG_STACKTRACE
3808 	"\t\t    stacktrace\n"
3809 #endif
3810 #ifdef CONFIG_TRACER_SNAPSHOT
3811 	"\t\t    snapshot\n"
3812 #endif
3813 	"\t   example: echo traceoff > events/block/block_unplug/trigger\n"
3814 	"\t            echo traceoff:3 > events/block/block_unplug/trigger\n"
3815 	"\t            echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
3816 	"\t                  events/block/block_unplug/trigger\n"
3817 	"\t   The first disables tracing every time block_unplug is hit.\n"
3818 	"\t   The second disables tracing the first 3 times block_unplug is hit.\n"
3819 	"\t   The third enables the kmalloc event the first 3 times block_unplug\n"
3820 	"\t     is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
3821 	"\t   Like function triggers, the counter is only decremented if it\n"
3822 	"\t    enabled or disabled tracing.\n"
3823 	"\t   To remove a trigger without a count:\n"
3824 	"\t     echo '!<trigger> > <system>/<event>/trigger\n"
3825 	"\t   To remove a trigger with a count:\n"
3826 	"\t     echo '!<trigger>:0 > <system>/<event>/trigger\n"
3827 	"\t   Filters can be ignored when removing a trigger.\n"
3828 ;
3829 
3830 static ssize_t
3831 tracing_readme_read(struct file *filp, char __user *ubuf,
3832 		       size_t cnt, loff_t *ppos)
3833 {
3834 	return simple_read_from_buffer(ubuf, cnt, ppos,
3835 					readme_msg, strlen(readme_msg));
3836 }
3837 
3838 static const struct file_operations tracing_readme_fops = {
3839 	.open		= tracing_open_generic,
3840 	.read		= tracing_readme_read,
3841 	.llseek		= generic_file_llseek,
3842 };
3843 
3844 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
3845 {
3846 	unsigned int *ptr = v;
3847 
3848 	if (*pos || m->count)
3849 		ptr++;
3850 
3851 	(*pos)++;
3852 
3853 	for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
3854 	     ptr++) {
3855 		if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
3856 			continue;
3857 
3858 		return ptr;
3859 	}
3860 
3861 	return NULL;
3862 }
3863 
3864 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
3865 {
3866 	void *v;
3867 	loff_t l = 0;
3868 
3869 	preempt_disable();
3870 	arch_spin_lock(&trace_cmdline_lock);
3871 
3872 	v = &savedcmd->map_cmdline_to_pid[0];
3873 	while (l <= *pos) {
3874 		v = saved_cmdlines_next(m, v, &l);
3875 		if (!v)
3876 			return NULL;
3877 	}
3878 
3879 	return v;
3880 }
3881 
3882 static void saved_cmdlines_stop(struct seq_file *m, void *v)
3883 {
3884 	arch_spin_unlock(&trace_cmdline_lock);
3885 	preempt_enable();
3886 }
3887 
3888 static int saved_cmdlines_show(struct seq_file *m, void *v)
3889 {
3890 	char buf[TASK_COMM_LEN];
3891 	unsigned int *pid = v;
3892 
3893 	__trace_find_cmdline(*pid, buf);
3894 	seq_printf(m, "%d %s\n", *pid, buf);
3895 	return 0;
3896 }
3897 
3898 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
3899 	.start		= saved_cmdlines_start,
3900 	.next		= saved_cmdlines_next,
3901 	.stop		= saved_cmdlines_stop,
3902 	.show		= saved_cmdlines_show,
3903 };
3904 
3905 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
3906 {
3907 	if (tracing_disabled)
3908 		return -ENODEV;
3909 
3910 	return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
3911 }
3912 
3913 static const struct file_operations tracing_saved_cmdlines_fops = {
3914 	.open		= tracing_saved_cmdlines_open,
3915 	.read		= seq_read,
3916 	.llseek		= seq_lseek,
3917 	.release	= seq_release,
3918 };
3919 
3920 static ssize_t
3921 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
3922 				 size_t cnt, loff_t *ppos)
3923 {
3924 	char buf[64];
3925 	int r;
3926 
3927 	arch_spin_lock(&trace_cmdline_lock);
3928 	r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
3929 	arch_spin_unlock(&trace_cmdline_lock);
3930 
3931 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3932 }
3933 
3934 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
3935 {
3936 	kfree(s->saved_cmdlines);
3937 	kfree(s->map_cmdline_to_pid);
3938 	kfree(s);
3939 }
3940 
3941 static int tracing_resize_saved_cmdlines(unsigned int val)
3942 {
3943 	struct saved_cmdlines_buffer *s, *savedcmd_temp;
3944 
3945 	s = kmalloc(sizeof(*s), GFP_KERNEL);
3946 	if (!s)
3947 		return -ENOMEM;
3948 
3949 	if (allocate_cmdlines_buffer(val, s) < 0) {
3950 		kfree(s);
3951 		return -ENOMEM;
3952 	}
3953 
3954 	arch_spin_lock(&trace_cmdline_lock);
3955 	savedcmd_temp = savedcmd;
3956 	savedcmd = s;
3957 	arch_spin_unlock(&trace_cmdline_lock);
3958 	free_saved_cmdlines_buffer(savedcmd_temp);
3959 
3960 	return 0;
3961 }
3962 
3963 static ssize_t
3964 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
3965 				  size_t cnt, loff_t *ppos)
3966 {
3967 	unsigned long val;
3968 	int ret;
3969 
3970 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
3971 	if (ret)
3972 		return ret;
3973 
3974 	/* must have at least 1 entry or less than PID_MAX_DEFAULT */
3975 	if (!val || val > PID_MAX_DEFAULT)
3976 		return -EINVAL;
3977 
3978 	ret = tracing_resize_saved_cmdlines((unsigned int)val);
3979 	if (ret < 0)
3980 		return ret;
3981 
3982 	*ppos += cnt;
3983 
3984 	return cnt;
3985 }
3986 
3987 static const struct file_operations tracing_saved_cmdlines_size_fops = {
3988 	.open		= tracing_open_generic,
3989 	.read		= tracing_saved_cmdlines_size_read,
3990 	.write		= tracing_saved_cmdlines_size_write,
3991 };
3992 
3993 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
3994 static union trace_enum_map_item *
3995 update_enum_map(union trace_enum_map_item *ptr)
3996 {
3997 	if (!ptr->map.enum_string) {
3998 		if (ptr->tail.next) {
3999 			ptr = ptr->tail.next;
4000 			/* Set ptr to the next real item (skip head) */
4001 			ptr++;
4002 		} else
4003 			return NULL;
4004 	}
4005 	return ptr;
4006 }
4007 
4008 static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
4009 {
4010 	union trace_enum_map_item *ptr = v;
4011 
4012 	/*
4013 	 * Paranoid! If ptr points to end, we don't want to increment past it.
4014 	 * This really should never happen.
4015 	 */
4016 	ptr = update_enum_map(ptr);
4017 	if (WARN_ON_ONCE(!ptr))
4018 		return NULL;
4019 
4020 	ptr++;
4021 
4022 	(*pos)++;
4023 
4024 	ptr = update_enum_map(ptr);
4025 
4026 	return ptr;
4027 }
4028 
4029 static void *enum_map_start(struct seq_file *m, loff_t *pos)
4030 {
4031 	union trace_enum_map_item *v;
4032 	loff_t l = 0;
4033 
4034 	mutex_lock(&trace_enum_mutex);
4035 
4036 	v = trace_enum_maps;
4037 	if (v)
4038 		v++;
4039 
4040 	while (v && l < *pos) {
4041 		v = enum_map_next(m, v, &l);
4042 	}
4043 
4044 	return v;
4045 }
4046 
4047 static void enum_map_stop(struct seq_file *m, void *v)
4048 {
4049 	mutex_unlock(&trace_enum_mutex);
4050 }
4051 
4052 static int enum_map_show(struct seq_file *m, void *v)
4053 {
4054 	union trace_enum_map_item *ptr = v;
4055 
4056 	seq_printf(m, "%s %ld (%s)\n",
4057 		   ptr->map.enum_string, ptr->map.enum_value,
4058 		   ptr->map.system);
4059 
4060 	return 0;
4061 }
4062 
4063 static const struct seq_operations tracing_enum_map_seq_ops = {
4064 	.start		= enum_map_start,
4065 	.next		= enum_map_next,
4066 	.stop		= enum_map_stop,
4067 	.show		= enum_map_show,
4068 };
4069 
4070 static int tracing_enum_map_open(struct inode *inode, struct file *filp)
4071 {
4072 	if (tracing_disabled)
4073 		return -ENODEV;
4074 
4075 	return seq_open(filp, &tracing_enum_map_seq_ops);
4076 }
4077 
4078 static const struct file_operations tracing_enum_map_fops = {
4079 	.open		= tracing_enum_map_open,
4080 	.read		= seq_read,
4081 	.llseek		= seq_lseek,
4082 	.release	= seq_release,
4083 };
4084 
4085 static inline union trace_enum_map_item *
4086 trace_enum_jmp_to_tail(union trace_enum_map_item *ptr)
4087 {
4088 	/* Return tail of array given the head */
4089 	return ptr + ptr->head.length + 1;
4090 }
4091 
4092 static void
4093 trace_insert_enum_map_file(struct module *mod, struct trace_enum_map **start,
4094 			   int len)
4095 {
4096 	struct trace_enum_map **stop;
4097 	struct trace_enum_map **map;
4098 	union trace_enum_map_item *map_array;
4099 	union trace_enum_map_item *ptr;
4100 
4101 	stop = start + len;
4102 
4103 	/*
4104 	 * The trace_enum_maps contains the map plus a head and tail item,
4105 	 * where the head holds the module and length of array, and the
4106 	 * tail holds a pointer to the next list.
4107 	 */
4108 	map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL);
4109 	if (!map_array) {
4110 		pr_warn("Unable to allocate trace enum mapping\n");
4111 		return;
4112 	}
4113 
4114 	mutex_lock(&trace_enum_mutex);
4115 
4116 	if (!trace_enum_maps)
4117 		trace_enum_maps = map_array;
4118 	else {
4119 		ptr = trace_enum_maps;
4120 		for (;;) {
4121 			ptr = trace_enum_jmp_to_tail(ptr);
4122 			if (!ptr->tail.next)
4123 				break;
4124 			ptr = ptr->tail.next;
4125 
4126 		}
4127 		ptr->tail.next = map_array;
4128 	}
4129 	map_array->head.mod = mod;
4130 	map_array->head.length = len;
4131 	map_array++;
4132 
4133 	for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
4134 		map_array->map = **map;
4135 		map_array++;
4136 	}
4137 	memset(map_array, 0, sizeof(*map_array));
4138 
4139 	mutex_unlock(&trace_enum_mutex);
4140 }
4141 
4142 static void trace_create_enum_file(struct dentry *d_tracer)
4143 {
4144 	trace_create_file("enum_map", 0444, d_tracer,
4145 			  NULL, &tracing_enum_map_fops);
4146 }
4147 
4148 #else /* CONFIG_TRACE_ENUM_MAP_FILE */
4149 static inline void trace_create_enum_file(struct dentry *d_tracer) { }
4150 static inline void trace_insert_enum_map_file(struct module *mod,
4151 			      struct trace_enum_map **start, int len) { }
4152 #endif /* !CONFIG_TRACE_ENUM_MAP_FILE */
4153 
4154 static void trace_insert_enum_map(struct module *mod,
4155 				  struct trace_enum_map **start, int len)
4156 {
4157 	struct trace_enum_map **map;
4158 
4159 	if (len <= 0)
4160 		return;
4161 
4162 	map = start;
4163 
4164 	trace_event_enum_update(map, len);
4165 
4166 	trace_insert_enum_map_file(mod, start, len);
4167 }
4168 
4169 static ssize_t
4170 tracing_set_trace_read(struct file *filp, char __user *ubuf,
4171 		       size_t cnt, loff_t *ppos)
4172 {
4173 	struct trace_array *tr = filp->private_data;
4174 	char buf[MAX_TRACER_SIZE+2];
4175 	int r;
4176 
4177 	mutex_lock(&trace_types_lock);
4178 	r = sprintf(buf, "%s\n", tr->current_trace->name);
4179 	mutex_unlock(&trace_types_lock);
4180 
4181 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4182 }
4183 
4184 int tracer_init(struct tracer *t, struct trace_array *tr)
4185 {
4186 	tracing_reset_online_cpus(&tr->trace_buffer);
4187 	return t->init(tr);
4188 }
4189 
4190 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
4191 {
4192 	int cpu;
4193 
4194 	for_each_tracing_cpu(cpu)
4195 		per_cpu_ptr(buf->data, cpu)->entries = val;
4196 }
4197 
4198 #ifdef CONFIG_TRACER_MAX_TRACE
4199 /* resize @tr's buffer to the size of @size_tr's entries */
4200 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
4201 					struct trace_buffer *size_buf, int cpu_id)
4202 {
4203 	int cpu, ret = 0;
4204 
4205 	if (cpu_id == RING_BUFFER_ALL_CPUS) {
4206 		for_each_tracing_cpu(cpu) {
4207 			ret = ring_buffer_resize(trace_buf->buffer,
4208 				 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
4209 			if (ret < 0)
4210 				break;
4211 			per_cpu_ptr(trace_buf->data, cpu)->entries =
4212 				per_cpu_ptr(size_buf->data, cpu)->entries;
4213 		}
4214 	} else {
4215 		ret = ring_buffer_resize(trace_buf->buffer,
4216 				 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
4217 		if (ret == 0)
4218 			per_cpu_ptr(trace_buf->data, cpu_id)->entries =
4219 				per_cpu_ptr(size_buf->data, cpu_id)->entries;
4220 	}
4221 
4222 	return ret;
4223 }
4224 #endif /* CONFIG_TRACER_MAX_TRACE */
4225 
4226 static int __tracing_resize_ring_buffer(struct trace_array *tr,
4227 					unsigned long size, int cpu)
4228 {
4229 	int ret;
4230 
4231 	/*
4232 	 * If kernel or user changes the size of the ring buffer
4233 	 * we use the size that was given, and we can forget about
4234 	 * expanding it later.
4235 	 */
4236 	ring_buffer_expanded = true;
4237 
4238 	/* May be called before buffers are initialized */
4239 	if (!tr->trace_buffer.buffer)
4240 		return 0;
4241 
4242 	ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
4243 	if (ret < 0)
4244 		return ret;
4245 
4246 #ifdef CONFIG_TRACER_MAX_TRACE
4247 	if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
4248 	    !tr->current_trace->use_max_tr)
4249 		goto out;
4250 
4251 	ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
4252 	if (ret < 0) {
4253 		int r = resize_buffer_duplicate_size(&tr->trace_buffer,
4254 						     &tr->trace_buffer, cpu);
4255 		if (r < 0) {
4256 			/*
4257 			 * AARGH! We are left with different
4258 			 * size max buffer!!!!
4259 			 * The max buffer is our "snapshot" buffer.
4260 			 * When a tracer needs a snapshot (one of the
4261 			 * latency tracers), it swaps the max buffer
4262 			 * with the saved snap shot. We succeeded to
4263 			 * update the size of the main buffer, but failed to
4264 			 * update the size of the max buffer. But when we tried
4265 			 * to reset the main buffer to the original size, we
4266 			 * failed there too. This is very unlikely to
4267 			 * happen, but if it does, warn and kill all
4268 			 * tracing.
4269 			 */
4270 			WARN_ON(1);
4271 			tracing_disabled = 1;
4272 		}
4273 		return ret;
4274 	}
4275 
4276 	if (cpu == RING_BUFFER_ALL_CPUS)
4277 		set_buffer_entries(&tr->max_buffer, size);
4278 	else
4279 		per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
4280 
4281  out:
4282 #endif /* CONFIG_TRACER_MAX_TRACE */
4283 
4284 	if (cpu == RING_BUFFER_ALL_CPUS)
4285 		set_buffer_entries(&tr->trace_buffer, size);
4286 	else
4287 		per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
4288 
4289 	return ret;
4290 }
4291 
4292 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
4293 					  unsigned long size, int cpu_id)
4294 {
4295 	int ret = size;
4296 
4297 	mutex_lock(&trace_types_lock);
4298 
4299 	if (cpu_id != RING_BUFFER_ALL_CPUS) {
4300 		/* make sure, this cpu is enabled in the mask */
4301 		if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
4302 			ret = -EINVAL;
4303 			goto out;
4304 		}
4305 	}
4306 
4307 	ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4308 	if (ret < 0)
4309 		ret = -ENOMEM;
4310 
4311 out:
4312 	mutex_unlock(&trace_types_lock);
4313 
4314 	return ret;
4315 }
4316 
4317 
4318 /**
4319  * tracing_update_buffers - used by tracing facility to expand ring buffers
4320  *
4321  * To save on memory when the tracing is never used on a system with it
4322  * configured in. The ring buffers are set to a minimum size. But once
4323  * a user starts to use the tracing facility, then they need to grow
4324  * to their default size.
4325  *
4326  * This function is to be called when a tracer is about to be used.
4327  */
4328 int tracing_update_buffers(void)
4329 {
4330 	int ret = 0;
4331 
4332 	mutex_lock(&trace_types_lock);
4333 	if (!ring_buffer_expanded)
4334 		ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
4335 						RING_BUFFER_ALL_CPUS);
4336 	mutex_unlock(&trace_types_lock);
4337 
4338 	return ret;
4339 }
4340 
4341 struct trace_option_dentry;
4342 
4343 static void
4344 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4345 
4346 /*
4347  * Used to clear out the tracer before deletion of an instance.
4348  * Must have trace_types_lock held.
4349  */
4350 static void tracing_set_nop(struct trace_array *tr)
4351 {
4352 	if (tr->current_trace == &nop_trace)
4353 		return;
4354 
4355 	tr->current_trace->enabled--;
4356 
4357 	if (tr->current_trace->reset)
4358 		tr->current_trace->reset(tr);
4359 
4360 	tr->current_trace = &nop_trace;
4361 }
4362 
4363 static void add_tracer_options(struct trace_array *tr, struct tracer *t)
4364 {
4365 	/* Only enable if the directory has been created already. */
4366 	if (!tr->dir)
4367 		return;
4368 
4369 	create_trace_option_files(tr, t);
4370 }
4371 
4372 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
4373 {
4374 	struct tracer *t;
4375 #ifdef CONFIG_TRACER_MAX_TRACE
4376 	bool had_max_tr;
4377 #endif
4378 	int ret = 0;
4379 
4380 	mutex_lock(&trace_types_lock);
4381 
4382 	if (!ring_buffer_expanded) {
4383 		ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
4384 						RING_BUFFER_ALL_CPUS);
4385 		if (ret < 0)
4386 			goto out;
4387 		ret = 0;
4388 	}
4389 
4390 	for (t = trace_types; t; t = t->next) {
4391 		if (strcmp(t->name, buf) == 0)
4392 			break;
4393 	}
4394 	if (!t) {
4395 		ret = -EINVAL;
4396 		goto out;
4397 	}
4398 	if (t == tr->current_trace)
4399 		goto out;
4400 
4401 	/* Some tracers are only allowed for the top level buffer */
4402 	if (!trace_ok_for_array(t, tr)) {
4403 		ret = -EINVAL;
4404 		goto out;
4405 	}
4406 
4407 	/* If trace pipe files are being read, we can't change the tracer */
4408 	if (tr->current_trace->ref) {
4409 		ret = -EBUSY;
4410 		goto out;
4411 	}
4412 
4413 	trace_branch_disable();
4414 
4415 	tr->current_trace->enabled--;
4416 
4417 	if (tr->current_trace->reset)
4418 		tr->current_trace->reset(tr);
4419 
4420 	/* Current trace needs to be nop_trace before synchronize_sched */
4421 	tr->current_trace = &nop_trace;
4422 
4423 #ifdef CONFIG_TRACER_MAX_TRACE
4424 	had_max_tr = tr->allocated_snapshot;
4425 
4426 	if (had_max_tr && !t->use_max_tr) {
4427 		/*
4428 		 * We need to make sure that the update_max_tr sees that
4429 		 * current_trace changed to nop_trace to keep it from
4430 		 * swapping the buffers after we resize it.
4431 		 * The update_max_tr is called from interrupts disabled
4432 		 * so a synchronized_sched() is sufficient.
4433 		 */
4434 		synchronize_sched();
4435 		free_snapshot(tr);
4436 	}
4437 #endif
4438 
4439 #ifdef CONFIG_TRACER_MAX_TRACE
4440 	if (t->use_max_tr && !had_max_tr) {
4441 		ret = alloc_snapshot(tr);
4442 		if (ret < 0)
4443 			goto out;
4444 	}
4445 #endif
4446 
4447 	if (t->init) {
4448 		ret = tracer_init(t, tr);
4449 		if (ret)
4450 			goto out;
4451 	}
4452 
4453 	tr->current_trace = t;
4454 	tr->current_trace->enabled++;
4455 	trace_branch_enable(tr);
4456  out:
4457 	mutex_unlock(&trace_types_lock);
4458 
4459 	return ret;
4460 }
4461 
4462 static ssize_t
4463 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
4464 			size_t cnt, loff_t *ppos)
4465 {
4466 	struct trace_array *tr = filp->private_data;
4467 	char buf[MAX_TRACER_SIZE+1];
4468 	int i;
4469 	size_t ret;
4470 	int err;
4471 
4472 	ret = cnt;
4473 
4474 	if (cnt > MAX_TRACER_SIZE)
4475 		cnt = MAX_TRACER_SIZE;
4476 
4477 	if (copy_from_user(&buf, ubuf, cnt))
4478 		return -EFAULT;
4479 
4480 	buf[cnt] = 0;
4481 
4482 	/* strip ending whitespace. */
4483 	for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
4484 		buf[i] = 0;
4485 
4486 	err = tracing_set_tracer(tr, buf);
4487 	if (err)
4488 		return err;
4489 
4490 	*ppos += ret;
4491 
4492 	return ret;
4493 }
4494 
4495 static ssize_t
4496 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
4497 		   size_t cnt, loff_t *ppos)
4498 {
4499 	char buf[64];
4500 	int r;
4501 
4502 	r = snprintf(buf, sizeof(buf), "%ld\n",
4503 		     *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
4504 	if (r > sizeof(buf))
4505 		r = sizeof(buf);
4506 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4507 }
4508 
4509 static ssize_t
4510 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
4511 		    size_t cnt, loff_t *ppos)
4512 {
4513 	unsigned long val;
4514 	int ret;
4515 
4516 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4517 	if (ret)
4518 		return ret;
4519 
4520 	*ptr = val * 1000;
4521 
4522 	return cnt;
4523 }
4524 
4525 static ssize_t
4526 tracing_thresh_read(struct file *filp, char __user *ubuf,
4527 		    size_t cnt, loff_t *ppos)
4528 {
4529 	return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
4530 }
4531 
4532 static ssize_t
4533 tracing_thresh_write(struct file *filp, const char __user *ubuf,
4534 		     size_t cnt, loff_t *ppos)
4535 {
4536 	struct trace_array *tr = filp->private_data;
4537 	int ret;
4538 
4539 	mutex_lock(&trace_types_lock);
4540 	ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
4541 	if (ret < 0)
4542 		goto out;
4543 
4544 	if (tr->current_trace->update_thresh) {
4545 		ret = tr->current_trace->update_thresh(tr);
4546 		if (ret < 0)
4547 			goto out;
4548 	}
4549 
4550 	ret = cnt;
4551 out:
4552 	mutex_unlock(&trace_types_lock);
4553 
4554 	return ret;
4555 }
4556 
4557 #ifdef CONFIG_TRACER_MAX_TRACE
4558 
4559 static ssize_t
4560 tracing_max_lat_read(struct file *filp, char __user *ubuf,
4561 		     size_t cnt, loff_t *ppos)
4562 {
4563 	return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
4564 }
4565 
4566 static ssize_t
4567 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
4568 		      size_t cnt, loff_t *ppos)
4569 {
4570 	return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
4571 }
4572 
4573 #endif
4574 
4575 static int tracing_open_pipe(struct inode *inode, struct file *filp)
4576 {
4577 	struct trace_array *tr = inode->i_private;
4578 	struct trace_iterator *iter;
4579 	int ret = 0;
4580 
4581 	if (tracing_disabled)
4582 		return -ENODEV;
4583 
4584 	if (trace_array_get(tr) < 0)
4585 		return -ENODEV;
4586 
4587 	mutex_lock(&trace_types_lock);
4588 
4589 	/* create a buffer to store the information to pass to userspace */
4590 	iter = kzalloc(sizeof(*iter), GFP_KERNEL);
4591 	if (!iter) {
4592 		ret = -ENOMEM;
4593 		__trace_array_put(tr);
4594 		goto out;
4595 	}
4596 
4597 	trace_seq_init(&iter->seq);
4598 	iter->trace = tr->current_trace;
4599 
4600 	if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
4601 		ret = -ENOMEM;
4602 		goto fail;
4603 	}
4604 
4605 	/* trace pipe does not show start of buffer */
4606 	cpumask_setall(iter->started);
4607 
4608 	if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4609 		iter->iter_flags |= TRACE_FILE_LAT_FMT;
4610 
4611 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
4612 	if (trace_clocks[tr->clock_id].in_ns)
4613 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4614 
4615 	iter->tr = tr;
4616 	iter->trace_buffer = &tr->trace_buffer;
4617 	iter->cpu_file = tracing_get_cpu(inode);
4618 	mutex_init(&iter->mutex);
4619 	filp->private_data = iter;
4620 
4621 	if (iter->trace->pipe_open)
4622 		iter->trace->pipe_open(iter);
4623 
4624 	nonseekable_open(inode, filp);
4625 
4626 	tr->current_trace->ref++;
4627 out:
4628 	mutex_unlock(&trace_types_lock);
4629 	return ret;
4630 
4631 fail:
4632 	kfree(iter->trace);
4633 	kfree(iter);
4634 	__trace_array_put(tr);
4635 	mutex_unlock(&trace_types_lock);
4636 	return ret;
4637 }
4638 
4639 static int tracing_release_pipe(struct inode *inode, struct file *file)
4640 {
4641 	struct trace_iterator *iter = file->private_data;
4642 	struct trace_array *tr = inode->i_private;
4643 
4644 	mutex_lock(&trace_types_lock);
4645 
4646 	tr->current_trace->ref--;
4647 
4648 	if (iter->trace->pipe_close)
4649 		iter->trace->pipe_close(iter);
4650 
4651 	mutex_unlock(&trace_types_lock);
4652 
4653 	free_cpumask_var(iter->started);
4654 	mutex_destroy(&iter->mutex);
4655 	kfree(iter);
4656 
4657 	trace_array_put(tr);
4658 
4659 	return 0;
4660 }
4661 
4662 static unsigned int
4663 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
4664 {
4665 	struct trace_array *tr = iter->tr;
4666 
4667 	/* Iterators are static, they should be filled or empty */
4668 	if (trace_buffer_iter(iter, iter->cpu_file))
4669 		return POLLIN | POLLRDNORM;
4670 
4671 	if (tr->trace_flags & TRACE_ITER_BLOCK)
4672 		/*
4673 		 * Always select as readable when in blocking mode
4674 		 */
4675 		return POLLIN | POLLRDNORM;
4676 	else
4677 		return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
4678 					     filp, poll_table);
4679 }
4680 
4681 static unsigned int
4682 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
4683 {
4684 	struct trace_iterator *iter = filp->private_data;
4685 
4686 	return trace_poll(iter, filp, poll_table);
4687 }
4688 
4689 /* Must be called with iter->mutex held. */
4690 static int tracing_wait_pipe(struct file *filp)
4691 {
4692 	struct trace_iterator *iter = filp->private_data;
4693 	int ret;
4694 
4695 	while (trace_empty(iter)) {
4696 
4697 		if ((filp->f_flags & O_NONBLOCK)) {
4698 			return -EAGAIN;
4699 		}
4700 
4701 		/*
4702 		 * We block until we read something and tracing is disabled.
4703 		 * We still block if tracing is disabled, but we have never
4704 		 * read anything. This allows a user to cat this file, and
4705 		 * then enable tracing. But after we have read something,
4706 		 * we give an EOF when tracing is again disabled.
4707 		 *
4708 		 * iter->pos will be 0 if we haven't read anything.
4709 		 */
4710 		if (!tracing_is_on() && iter->pos)
4711 			break;
4712 
4713 		mutex_unlock(&iter->mutex);
4714 
4715 		ret = wait_on_pipe(iter, false);
4716 
4717 		mutex_lock(&iter->mutex);
4718 
4719 		if (ret)
4720 			return ret;
4721 	}
4722 
4723 	return 1;
4724 }
4725 
4726 /*
4727  * Consumer reader.
4728  */
4729 static ssize_t
4730 tracing_read_pipe(struct file *filp, char __user *ubuf,
4731 		  size_t cnt, loff_t *ppos)
4732 {
4733 	struct trace_iterator *iter = filp->private_data;
4734 	ssize_t sret;
4735 
4736 	/* return any leftover data */
4737 	sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4738 	if (sret != -EBUSY)
4739 		return sret;
4740 
4741 	trace_seq_init(&iter->seq);
4742 
4743 	/*
4744 	 * Avoid more than one consumer on a single file descriptor
4745 	 * This is just a matter of traces coherency, the ring buffer itself
4746 	 * is protected.
4747 	 */
4748 	mutex_lock(&iter->mutex);
4749 	if (iter->trace->read) {
4750 		sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
4751 		if (sret)
4752 			goto out;
4753 	}
4754 
4755 waitagain:
4756 	sret = tracing_wait_pipe(filp);
4757 	if (sret <= 0)
4758 		goto out;
4759 
4760 	/* stop when tracing is finished */
4761 	if (trace_empty(iter)) {
4762 		sret = 0;
4763 		goto out;
4764 	}
4765 
4766 	if (cnt >= PAGE_SIZE)
4767 		cnt = PAGE_SIZE - 1;
4768 
4769 	/* reset all but tr, trace, and overruns */
4770 	memset(&iter->seq, 0,
4771 	       sizeof(struct trace_iterator) -
4772 	       offsetof(struct trace_iterator, seq));
4773 	cpumask_clear(iter->started);
4774 	iter->pos = -1;
4775 
4776 	trace_event_read_lock();
4777 	trace_access_lock(iter->cpu_file);
4778 	while (trace_find_next_entry_inc(iter) != NULL) {
4779 		enum print_line_t ret;
4780 		int save_len = iter->seq.seq.len;
4781 
4782 		ret = print_trace_line(iter);
4783 		if (ret == TRACE_TYPE_PARTIAL_LINE) {
4784 			/* don't print partial lines */
4785 			iter->seq.seq.len = save_len;
4786 			break;
4787 		}
4788 		if (ret != TRACE_TYPE_NO_CONSUME)
4789 			trace_consume(iter);
4790 
4791 		if (trace_seq_used(&iter->seq) >= cnt)
4792 			break;
4793 
4794 		/*
4795 		 * Setting the full flag means we reached the trace_seq buffer
4796 		 * size and we should leave by partial output condition above.
4797 		 * One of the trace_seq_* functions is not used properly.
4798 		 */
4799 		WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
4800 			  iter->ent->type);
4801 	}
4802 	trace_access_unlock(iter->cpu_file);
4803 	trace_event_read_unlock();
4804 
4805 	/* Now copy what we have to the user */
4806 	sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4807 	if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
4808 		trace_seq_init(&iter->seq);
4809 
4810 	/*
4811 	 * If there was nothing to send to user, in spite of consuming trace
4812 	 * entries, go back to wait for more entries.
4813 	 */
4814 	if (sret == -EBUSY)
4815 		goto waitagain;
4816 
4817 out:
4818 	mutex_unlock(&iter->mutex);
4819 
4820 	return sret;
4821 }
4822 
4823 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
4824 				     unsigned int idx)
4825 {
4826 	__free_page(spd->pages[idx]);
4827 }
4828 
4829 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
4830 	.can_merge		= 0,
4831 	.confirm		= generic_pipe_buf_confirm,
4832 	.release		= generic_pipe_buf_release,
4833 	.steal			= generic_pipe_buf_steal,
4834 	.get			= generic_pipe_buf_get,
4835 };
4836 
4837 static size_t
4838 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
4839 {
4840 	size_t count;
4841 	int save_len;
4842 	int ret;
4843 
4844 	/* Seq buffer is page-sized, exactly what we need. */
4845 	for (;;) {
4846 		save_len = iter->seq.seq.len;
4847 		ret = print_trace_line(iter);
4848 
4849 		if (trace_seq_has_overflowed(&iter->seq)) {
4850 			iter->seq.seq.len = save_len;
4851 			break;
4852 		}
4853 
4854 		/*
4855 		 * This should not be hit, because it should only
4856 		 * be set if the iter->seq overflowed. But check it
4857 		 * anyway to be safe.
4858 		 */
4859 		if (ret == TRACE_TYPE_PARTIAL_LINE) {
4860 			iter->seq.seq.len = save_len;
4861 			break;
4862 		}
4863 
4864 		count = trace_seq_used(&iter->seq) - save_len;
4865 		if (rem < count) {
4866 			rem = 0;
4867 			iter->seq.seq.len = save_len;
4868 			break;
4869 		}
4870 
4871 		if (ret != TRACE_TYPE_NO_CONSUME)
4872 			trace_consume(iter);
4873 		rem -= count;
4874 		if (!trace_find_next_entry_inc(iter))	{
4875 			rem = 0;
4876 			iter->ent = NULL;
4877 			break;
4878 		}
4879 	}
4880 
4881 	return rem;
4882 }
4883 
4884 static ssize_t tracing_splice_read_pipe(struct file *filp,
4885 					loff_t *ppos,
4886 					struct pipe_inode_info *pipe,
4887 					size_t len,
4888 					unsigned int flags)
4889 {
4890 	struct page *pages_def[PIPE_DEF_BUFFERS];
4891 	struct partial_page partial_def[PIPE_DEF_BUFFERS];
4892 	struct trace_iterator *iter = filp->private_data;
4893 	struct splice_pipe_desc spd = {
4894 		.pages		= pages_def,
4895 		.partial	= partial_def,
4896 		.nr_pages	= 0, /* This gets updated below. */
4897 		.nr_pages_max	= PIPE_DEF_BUFFERS,
4898 		.flags		= flags,
4899 		.ops		= &tracing_pipe_buf_ops,
4900 		.spd_release	= tracing_spd_release_pipe,
4901 	};
4902 	ssize_t ret;
4903 	size_t rem;
4904 	unsigned int i;
4905 
4906 	if (splice_grow_spd(pipe, &spd))
4907 		return -ENOMEM;
4908 
4909 	mutex_lock(&iter->mutex);
4910 
4911 	if (iter->trace->splice_read) {
4912 		ret = iter->trace->splice_read(iter, filp,
4913 					       ppos, pipe, len, flags);
4914 		if (ret)
4915 			goto out_err;
4916 	}
4917 
4918 	ret = tracing_wait_pipe(filp);
4919 	if (ret <= 0)
4920 		goto out_err;
4921 
4922 	if (!iter->ent && !trace_find_next_entry_inc(iter)) {
4923 		ret = -EFAULT;
4924 		goto out_err;
4925 	}
4926 
4927 	trace_event_read_lock();
4928 	trace_access_lock(iter->cpu_file);
4929 
4930 	/* Fill as many pages as possible. */
4931 	for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
4932 		spd.pages[i] = alloc_page(GFP_KERNEL);
4933 		if (!spd.pages[i])
4934 			break;
4935 
4936 		rem = tracing_fill_pipe_page(rem, iter);
4937 
4938 		/* Copy the data into the page, so we can start over. */
4939 		ret = trace_seq_to_buffer(&iter->seq,
4940 					  page_address(spd.pages[i]),
4941 					  trace_seq_used(&iter->seq));
4942 		if (ret < 0) {
4943 			__free_page(spd.pages[i]);
4944 			break;
4945 		}
4946 		spd.partial[i].offset = 0;
4947 		spd.partial[i].len = trace_seq_used(&iter->seq);
4948 
4949 		trace_seq_init(&iter->seq);
4950 	}
4951 
4952 	trace_access_unlock(iter->cpu_file);
4953 	trace_event_read_unlock();
4954 	mutex_unlock(&iter->mutex);
4955 
4956 	spd.nr_pages = i;
4957 
4958 	if (i)
4959 		ret = splice_to_pipe(pipe, &spd);
4960 	else
4961 		ret = 0;
4962 out:
4963 	splice_shrink_spd(&spd);
4964 	return ret;
4965 
4966 out_err:
4967 	mutex_unlock(&iter->mutex);
4968 	goto out;
4969 }
4970 
4971 static ssize_t
4972 tracing_entries_read(struct file *filp, char __user *ubuf,
4973 		     size_t cnt, loff_t *ppos)
4974 {
4975 	struct inode *inode = file_inode(filp);
4976 	struct trace_array *tr = inode->i_private;
4977 	int cpu = tracing_get_cpu(inode);
4978 	char buf[64];
4979 	int r = 0;
4980 	ssize_t ret;
4981 
4982 	mutex_lock(&trace_types_lock);
4983 
4984 	if (cpu == RING_BUFFER_ALL_CPUS) {
4985 		int cpu, buf_size_same;
4986 		unsigned long size;
4987 
4988 		size = 0;
4989 		buf_size_same = 1;
4990 		/* check if all cpu sizes are same */
4991 		for_each_tracing_cpu(cpu) {
4992 			/* fill in the size from first enabled cpu */
4993 			if (size == 0)
4994 				size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
4995 			if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
4996 				buf_size_same = 0;
4997 				break;
4998 			}
4999 		}
5000 
5001 		if (buf_size_same) {
5002 			if (!ring_buffer_expanded)
5003 				r = sprintf(buf, "%lu (expanded: %lu)\n",
5004 					    size >> 10,
5005 					    trace_buf_size >> 10);
5006 			else
5007 				r = sprintf(buf, "%lu\n", size >> 10);
5008 		} else
5009 			r = sprintf(buf, "X\n");
5010 	} else
5011 		r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
5012 
5013 	mutex_unlock(&trace_types_lock);
5014 
5015 	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5016 	return ret;
5017 }
5018 
5019 static ssize_t
5020 tracing_entries_write(struct file *filp, const char __user *ubuf,
5021 		      size_t cnt, loff_t *ppos)
5022 {
5023 	struct inode *inode = file_inode(filp);
5024 	struct trace_array *tr = inode->i_private;
5025 	unsigned long val;
5026 	int ret;
5027 
5028 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5029 	if (ret)
5030 		return ret;
5031 
5032 	/* must have at least 1 entry */
5033 	if (!val)
5034 		return -EINVAL;
5035 
5036 	/* value is in KB */
5037 	val <<= 10;
5038 	ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
5039 	if (ret < 0)
5040 		return ret;
5041 
5042 	*ppos += cnt;
5043 
5044 	return cnt;
5045 }
5046 
5047 static ssize_t
5048 tracing_total_entries_read(struct file *filp, char __user *ubuf,
5049 				size_t cnt, loff_t *ppos)
5050 {
5051 	struct trace_array *tr = filp->private_data;
5052 	char buf[64];
5053 	int r, cpu;
5054 	unsigned long size = 0, expanded_size = 0;
5055 
5056 	mutex_lock(&trace_types_lock);
5057 	for_each_tracing_cpu(cpu) {
5058 		size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
5059 		if (!ring_buffer_expanded)
5060 			expanded_size += trace_buf_size >> 10;
5061 	}
5062 	if (ring_buffer_expanded)
5063 		r = sprintf(buf, "%lu\n", size);
5064 	else
5065 		r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
5066 	mutex_unlock(&trace_types_lock);
5067 
5068 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5069 }
5070 
5071 static ssize_t
5072 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
5073 			  size_t cnt, loff_t *ppos)
5074 {
5075 	/*
5076 	 * There is no need to read what the user has written, this function
5077 	 * is just to make sure that there is no error when "echo" is used
5078 	 */
5079 
5080 	*ppos += cnt;
5081 
5082 	return cnt;
5083 }
5084 
5085 static int
5086 tracing_free_buffer_release(struct inode *inode, struct file *filp)
5087 {
5088 	struct trace_array *tr = inode->i_private;
5089 
5090 	/* disable tracing ? */
5091 	if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
5092 		tracer_tracing_off(tr);
5093 	/* resize the ring buffer to 0 */
5094 	tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
5095 
5096 	trace_array_put(tr);
5097 
5098 	return 0;
5099 }
5100 
5101 static ssize_t
5102 tracing_mark_write(struct file *filp, const char __user *ubuf,
5103 					size_t cnt, loff_t *fpos)
5104 {
5105 	unsigned long addr = (unsigned long)ubuf;
5106 	struct trace_array *tr = filp->private_data;
5107 	struct ring_buffer_event *event;
5108 	struct ring_buffer *buffer;
5109 	struct print_entry *entry;
5110 	unsigned long irq_flags;
5111 	struct page *pages[2];
5112 	void *map_page[2];
5113 	int nr_pages = 1;
5114 	ssize_t written;
5115 	int offset;
5116 	int size;
5117 	int len;
5118 	int ret;
5119 	int i;
5120 
5121 	if (tracing_disabled)
5122 		return -EINVAL;
5123 
5124 	if (!(tr->trace_flags & TRACE_ITER_MARKERS))
5125 		return -EINVAL;
5126 
5127 	if (cnt > TRACE_BUF_SIZE)
5128 		cnt = TRACE_BUF_SIZE;
5129 
5130 	/*
5131 	 * Userspace is injecting traces into the kernel trace buffer.
5132 	 * We want to be as non intrusive as possible.
5133 	 * To do so, we do not want to allocate any special buffers
5134 	 * or take any locks, but instead write the userspace data
5135 	 * straight into the ring buffer.
5136 	 *
5137 	 * First we need to pin the userspace buffer into memory,
5138 	 * which, most likely it is, because it just referenced it.
5139 	 * But there's no guarantee that it is. By using get_user_pages_fast()
5140 	 * and kmap_atomic/kunmap_atomic() we can get access to the
5141 	 * pages directly. We then write the data directly into the
5142 	 * ring buffer.
5143 	 */
5144 	BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
5145 
5146 	/* check if we cross pages */
5147 	if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK))
5148 		nr_pages = 2;
5149 
5150 	offset = addr & (PAGE_SIZE - 1);
5151 	addr &= PAGE_MASK;
5152 
5153 	ret = get_user_pages_fast(addr, nr_pages, 0, pages);
5154 	if (ret < nr_pages) {
5155 		while (--ret >= 0)
5156 			put_page(pages[ret]);
5157 		written = -EFAULT;
5158 		goto out;
5159 	}
5160 
5161 	for (i = 0; i < nr_pages; i++)
5162 		map_page[i] = kmap_atomic(pages[i]);
5163 
5164 	local_save_flags(irq_flags);
5165 	size = sizeof(*entry) + cnt + 2; /* possible \n added */
5166 	buffer = tr->trace_buffer.buffer;
5167 	event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
5168 					  irq_flags, preempt_count());
5169 	if (!event) {
5170 		/* Ring buffer disabled, return as if not open for write */
5171 		written = -EBADF;
5172 		goto out_unlock;
5173 	}
5174 
5175 	entry = ring_buffer_event_data(event);
5176 	entry->ip = _THIS_IP_;
5177 
5178 	if (nr_pages == 2) {
5179 		len = PAGE_SIZE - offset;
5180 		memcpy(&entry->buf, map_page[0] + offset, len);
5181 		memcpy(&entry->buf[len], map_page[1], cnt - len);
5182 	} else
5183 		memcpy(&entry->buf, map_page[0] + offset, cnt);
5184 
5185 	if (entry->buf[cnt - 1] != '\n') {
5186 		entry->buf[cnt] = '\n';
5187 		entry->buf[cnt + 1] = '\0';
5188 	} else
5189 		entry->buf[cnt] = '\0';
5190 
5191 	__buffer_unlock_commit(buffer, event);
5192 
5193 	written = cnt;
5194 
5195 	*fpos += written;
5196 
5197  out_unlock:
5198 	for (i = nr_pages - 1; i >= 0; i--) {
5199 		kunmap_atomic(map_page[i]);
5200 		put_page(pages[i]);
5201 	}
5202  out:
5203 	return written;
5204 }
5205 
5206 static int tracing_clock_show(struct seq_file *m, void *v)
5207 {
5208 	struct trace_array *tr = m->private;
5209 	int i;
5210 
5211 	for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
5212 		seq_printf(m,
5213 			"%s%s%s%s", i ? " " : "",
5214 			i == tr->clock_id ? "[" : "", trace_clocks[i].name,
5215 			i == tr->clock_id ? "]" : "");
5216 	seq_putc(m, '\n');
5217 
5218 	return 0;
5219 }
5220 
5221 static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
5222 {
5223 	int i;
5224 
5225 	for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
5226 		if (strcmp(trace_clocks[i].name, clockstr) == 0)
5227 			break;
5228 	}
5229 	if (i == ARRAY_SIZE(trace_clocks))
5230 		return -EINVAL;
5231 
5232 	mutex_lock(&trace_types_lock);
5233 
5234 	tr->clock_id = i;
5235 
5236 	ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
5237 
5238 	/*
5239 	 * New clock may not be consistent with the previous clock.
5240 	 * Reset the buffer so that it doesn't have incomparable timestamps.
5241 	 */
5242 	tracing_reset_online_cpus(&tr->trace_buffer);
5243 
5244 #ifdef CONFIG_TRACER_MAX_TRACE
5245 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer)
5246 		ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
5247 	tracing_reset_online_cpus(&tr->max_buffer);
5248 #endif
5249 
5250 	mutex_unlock(&trace_types_lock);
5251 
5252 	return 0;
5253 }
5254 
5255 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
5256 				   size_t cnt, loff_t *fpos)
5257 {
5258 	struct seq_file *m = filp->private_data;
5259 	struct trace_array *tr = m->private;
5260 	char buf[64];
5261 	const char *clockstr;
5262 	int ret;
5263 
5264 	if (cnt >= sizeof(buf))
5265 		return -EINVAL;
5266 
5267 	if (copy_from_user(&buf, ubuf, cnt))
5268 		return -EFAULT;
5269 
5270 	buf[cnt] = 0;
5271 
5272 	clockstr = strstrip(buf);
5273 
5274 	ret = tracing_set_clock(tr, clockstr);
5275 	if (ret)
5276 		return ret;
5277 
5278 	*fpos += cnt;
5279 
5280 	return cnt;
5281 }
5282 
5283 static int tracing_clock_open(struct inode *inode, struct file *file)
5284 {
5285 	struct trace_array *tr = inode->i_private;
5286 	int ret;
5287 
5288 	if (tracing_disabled)
5289 		return -ENODEV;
5290 
5291 	if (trace_array_get(tr))
5292 		return -ENODEV;
5293 
5294 	ret = single_open(file, tracing_clock_show, inode->i_private);
5295 	if (ret < 0)
5296 		trace_array_put(tr);
5297 
5298 	return ret;
5299 }
5300 
5301 struct ftrace_buffer_info {
5302 	struct trace_iterator	iter;
5303 	void			*spare;
5304 	unsigned int		read;
5305 };
5306 
5307 #ifdef CONFIG_TRACER_SNAPSHOT
5308 static int tracing_snapshot_open(struct inode *inode, struct file *file)
5309 {
5310 	struct trace_array *tr = inode->i_private;
5311 	struct trace_iterator *iter;
5312 	struct seq_file *m;
5313 	int ret = 0;
5314 
5315 	if (trace_array_get(tr) < 0)
5316 		return -ENODEV;
5317 
5318 	if (file->f_mode & FMODE_READ) {
5319 		iter = __tracing_open(inode, file, true);
5320 		if (IS_ERR(iter))
5321 			ret = PTR_ERR(iter);
5322 	} else {
5323 		/* Writes still need the seq_file to hold the private data */
5324 		ret = -ENOMEM;
5325 		m = kzalloc(sizeof(*m), GFP_KERNEL);
5326 		if (!m)
5327 			goto out;
5328 		iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5329 		if (!iter) {
5330 			kfree(m);
5331 			goto out;
5332 		}
5333 		ret = 0;
5334 
5335 		iter->tr = tr;
5336 		iter->trace_buffer = &tr->max_buffer;
5337 		iter->cpu_file = tracing_get_cpu(inode);
5338 		m->private = iter;
5339 		file->private_data = m;
5340 	}
5341 out:
5342 	if (ret < 0)
5343 		trace_array_put(tr);
5344 
5345 	return ret;
5346 }
5347 
5348 static ssize_t
5349 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
5350 		       loff_t *ppos)
5351 {
5352 	struct seq_file *m = filp->private_data;
5353 	struct trace_iterator *iter = m->private;
5354 	struct trace_array *tr = iter->tr;
5355 	unsigned long val;
5356 	int ret;
5357 
5358 	ret = tracing_update_buffers();
5359 	if (ret < 0)
5360 		return ret;
5361 
5362 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5363 	if (ret)
5364 		return ret;
5365 
5366 	mutex_lock(&trace_types_lock);
5367 
5368 	if (tr->current_trace->use_max_tr) {
5369 		ret = -EBUSY;
5370 		goto out;
5371 	}
5372 
5373 	switch (val) {
5374 	case 0:
5375 		if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5376 			ret = -EINVAL;
5377 			break;
5378 		}
5379 		if (tr->allocated_snapshot)
5380 			free_snapshot(tr);
5381 		break;
5382 	case 1:
5383 /* Only allow per-cpu swap if the ring buffer supports it */
5384 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
5385 		if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5386 			ret = -EINVAL;
5387 			break;
5388 		}
5389 #endif
5390 		if (!tr->allocated_snapshot) {
5391 			ret = alloc_snapshot(tr);
5392 			if (ret < 0)
5393 				break;
5394 		}
5395 		local_irq_disable();
5396 		/* Now, we're going to swap */
5397 		if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5398 			update_max_tr(tr, current, smp_processor_id());
5399 		else
5400 			update_max_tr_single(tr, current, iter->cpu_file);
5401 		local_irq_enable();
5402 		break;
5403 	default:
5404 		if (tr->allocated_snapshot) {
5405 			if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5406 				tracing_reset_online_cpus(&tr->max_buffer);
5407 			else
5408 				tracing_reset(&tr->max_buffer, iter->cpu_file);
5409 		}
5410 		break;
5411 	}
5412 
5413 	if (ret >= 0) {
5414 		*ppos += cnt;
5415 		ret = cnt;
5416 	}
5417 out:
5418 	mutex_unlock(&trace_types_lock);
5419 	return ret;
5420 }
5421 
5422 static int tracing_snapshot_release(struct inode *inode, struct file *file)
5423 {
5424 	struct seq_file *m = file->private_data;
5425 	int ret;
5426 
5427 	ret = tracing_release(inode, file);
5428 
5429 	if (file->f_mode & FMODE_READ)
5430 		return ret;
5431 
5432 	/* If write only, the seq_file is just a stub */
5433 	if (m)
5434 		kfree(m->private);
5435 	kfree(m);
5436 
5437 	return 0;
5438 }
5439 
5440 static int tracing_buffers_open(struct inode *inode, struct file *filp);
5441 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
5442 				    size_t count, loff_t *ppos);
5443 static int tracing_buffers_release(struct inode *inode, struct file *file);
5444 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5445 		   struct pipe_inode_info *pipe, size_t len, unsigned int flags);
5446 
5447 static int snapshot_raw_open(struct inode *inode, struct file *filp)
5448 {
5449 	struct ftrace_buffer_info *info;
5450 	int ret;
5451 
5452 	ret = tracing_buffers_open(inode, filp);
5453 	if (ret < 0)
5454 		return ret;
5455 
5456 	info = filp->private_data;
5457 
5458 	if (info->iter.trace->use_max_tr) {
5459 		tracing_buffers_release(inode, filp);
5460 		return -EBUSY;
5461 	}
5462 
5463 	info->iter.snapshot = true;
5464 	info->iter.trace_buffer = &info->iter.tr->max_buffer;
5465 
5466 	return ret;
5467 }
5468 
5469 #endif /* CONFIG_TRACER_SNAPSHOT */
5470 
5471 
5472 static const struct file_operations tracing_thresh_fops = {
5473 	.open		= tracing_open_generic,
5474 	.read		= tracing_thresh_read,
5475 	.write		= tracing_thresh_write,
5476 	.llseek		= generic_file_llseek,
5477 };
5478 
5479 #ifdef CONFIG_TRACER_MAX_TRACE
5480 static const struct file_operations tracing_max_lat_fops = {
5481 	.open		= tracing_open_generic,
5482 	.read		= tracing_max_lat_read,
5483 	.write		= tracing_max_lat_write,
5484 	.llseek		= generic_file_llseek,
5485 };
5486 #endif
5487 
5488 static const struct file_operations set_tracer_fops = {
5489 	.open		= tracing_open_generic,
5490 	.read		= tracing_set_trace_read,
5491 	.write		= tracing_set_trace_write,
5492 	.llseek		= generic_file_llseek,
5493 };
5494 
5495 static const struct file_operations tracing_pipe_fops = {
5496 	.open		= tracing_open_pipe,
5497 	.poll		= tracing_poll_pipe,
5498 	.read		= tracing_read_pipe,
5499 	.splice_read	= tracing_splice_read_pipe,
5500 	.release	= tracing_release_pipe,
5501 	.llseek		= no_llseek,
5502 };
5503 
5504 static const struct file_operations tracing_entries_fops = {
5505 	.open		= tracing_open_generic_tr,
5506 	.read		= tracing_entries_read,
5507 	.write		= tracing_entries_write,
5508 	.llseek		= generic_file_llseek,
5509 	.release	= tracing_release_generic_tr,
5510 };
5511 
5512 static const struct file_operations tracing_total_entries_fops = {
5513 	.open		= tracing_open_generic_tr,
5514 	.read		= tracing_total_entries_read,
5515 	.llseek		= generic_file_llseek,
5516 	.release	= tracing_release_generic_tr,
5517 };
5518 
5519 static const struct file_operations tracing_free_buffer_fops = {
5520 	.open		= tracing_open_generic_tr,
5521 	.write		= tracing_free_buffer_write,
5522 	.release	= tracing_free_buffer_release,
5523 };
5524 
5525 static const struct file_operations tracing_mark_fops = {
5526 	.open		= tracing_open_generic_tr,
5527 	.write		= tracing_mark_write,
5528 	.llseek		= generic_file_llseek,
5529 	.release	= tracing_release_generic_tr,
5530 };
5531 
5532 static const struct file_operations trace_clock_fops = {
5533 	.open		= tracing_clock_open,
5534 	.read		= seq_read,
5535 	.llseek		= seq_lseek,
5536 	.release	= tracing_single_release_tr,
5537 	.write		= tracing_clock_write,
5538 };
5539 
5540 #ifdef CONFIG_TRACER_SNAPSHOT
5541 static const struct file_operations snapshot_fops = {
5542 	.open		= tracing_snapshot_open,
5543 	.read		= seq_read,
5544 	.write		= tracing_snapshot_write,
5545 	.llseek		= tracing_lseek,
5546 	.release	= tracing_snapshot_release,
5547 };
5548 
5549 static const struct file_operations snapshot_raw_fops = {
5550 	.open		= snapshot_raw_open,
5551 	.read		= tracing_buffers_read,
5552 	.release	= tracing_buffers_release,
5553 	.splice_read	= tracing_buffers_splice_read,
5554 	.llseek		= no_llseek,
5555 };
5556 
5557 #endif /* CONFIG_TRACER_SNAPSHOT */
5558 
5559 static int tracing_buffers_open(struct inode *inode, struct file *filp)
5560 {
5561 	struct trace_array *tr = inode->i_private;
5562 	struct ftrace_buffer_info *info;
5563 	int ret;
5564 
5565 	if (tracing_disabled)
5566 		return -ENODEV;
5567 
5568 	if (trace_array_get(tr) < 0)
5569 		return -ENODEV;
5570 
5571 	info = kzalloc(sizeof(*info), GFP_KERNEL);
5572 	if (!info) {
5573 		trace_array_put(tr);
5574 		return -ENOMEM;
5575 	}
5576 
5577 	mutex_lock(&trace_types_lock);
5578 
5579 	info->iter.tr		= tr;
5580 	info->iter.cpu_file	= tracing_get_cpu(inode);
5581 	info->iter.trace	= tr->current_trace;
5582 	info->iter.trace_buffer = &tr->trace_buffer;
5583 	info->spare		= NULL;
5584 	/* Force reading ring buffer for first read */
5585 	info->read		= (unsigned int)-1;
5586 
5587 	filp->private_data = info;
5588 
5589 	tr->current_trace->ref++;
5590 
5591 	mutex_unlock(&trace_types_lock);
5592 
5593 	ret = nonseekable_open(inode, filp);
5594 	if (ret < 0)
5595 		trace_array_put(tr);
5596 
5597 	return ret;
5598 }
5599 
5600 static unsigned int
5601 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
5602 {
5603 	struct ftrace_buffer_info *info = filp->private_data;
5604 	struct trace_iterator *iter = &info->iter;
5605 
5606 	return trace_poll(iter, filp, poll_table);
5607 }
5608 
5609 static ssize_t
5610 tracing_buffers_read(struct file *filp, char __user *ubuf,
5611 		     size_t count, loff_t *ppos)
5612 {
5613 	struct ftrace_buffer_info *info = filp->private_data;
5614 	struct trace_iterator *iter = &info->iter;
5615 	ssize_t ret;
5616 	ssize_t size;
5617 
5618 	if (!count)
5619 		return 0;
5620 
5621 #ifdef CONFIG_TRACER_MAX_TRACE
5622 	if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5623 		return -EBUSY;
5624 #endif
5625 
5626 	if (!info->spare)
5627 		info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
5628 							  iter->cpu_file);
5629 	if (!info->spare)
5630 		return -ENOMEM;
5631 
5632 	/* Do we have previous read data to read? */
5633 	if (info->read < PAGE_SIZE)
5634 		goto read;
5635 
5636  again:
5637 	trace_access_lock(iter->cpu_file);
5638 	ret = ring_buffer_read_page(iter->trace_buffer->buffer,
5639 				    &info->spare,
5640 				    count,
5641 				    iter->cpu_file, 0);
5642 	trace_access_unlock(iter->cpu_file);
5643 
5644 	if (ret < 0) {
5645 		if (trace_empty(iter)) {
5646 			if ((filp->f_flags & O_NONBLOCK))
5647 				return -EAGAIN;
5648 
5649 			ret = wait_on_pipe(iter, false);
5650 			if (ret)
5651 				return ret;
5652 
5653 			goto again;
5654 		}
5655 		return 0;
5656 	}
5657 
5658 	info->read = 0;
5659  read:
5660 	size = PAGE_SIZE - info->read;
5661 	if (size > count)
5662 		size = count;
5663 
5664 	ret = copy_to_user(ubuf, info->spare + info->read, size);
5665 	if (ret == size)
5666 		return -EFAULT;
5667 
5668 	size -= ret;
5669 
5670 	*ppos += size;
5671 	info->read += size;
5672 
5673 	return size;
5674 }
5675 
5676 static int tracing_buffers_release(struct inode *inode, struct file *file)
5677 {
5678 	struct ftrace_buffer_info *info = file->private_data;
5679 	struct trace_iterator *iter = &info->iter;
5680 
5681 	mutex_lock(&trace_types_lock);
5682 
5683 	iter->tr->current_trace->ref--;
5684 
5685 	__trace_array_put(iter->tr);
5686 
5687 	if (info->spare)
5688 		ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
5689 	kfree(info);
5690 
5691 	mutex_unlock(&trace_types_lock);
5692 
5693 	return 0;
5694 }
5695 
5696 struct buffer_ref {
5697 	struct ring_buffer	*buffer;
5698 	void			*page;
5699 	int			ref;
5700 };
5701 
5702 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
5703 				    struct pipe_buffer *buf)
5704 {
5705 	struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5706 
5707 	if (--ref->ref)
5708 		return;
5709 
5710 	ring_buffer_free_read_page(ref->buffer, ref->page);
5711 	kfree(ref);
5712 	buf->private = 0;
5713 }
5714 
5715 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
5716 				struct pipe_buffer *buf)
5717 {
5718 	struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5719 
5720 	ref->ref++;
5721 }
5722 
5723 /* Pipe buffer operations for a buffer. */
5724 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
5725 	.can_merge		= 0,
5726 	.confirm		= generic_pipe_buf_confirm,
5727 	.release		= buffer_pipe_buf_release,
5728 	.steal			= generic_pipe_buf_steal,
5729 	.get			= buffer_pipe_buf_get,
5730 };
5731 
5732 /*
5733  * Callback from splice_to_pipe(), if we need to release some pages
5734  * at the end of the spd in case we error'ed out in filling the pipe.
5735  */
5736 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
5737 {
5738 	struct buffer_ref *ref =
5739 		(struct buffer_ref *)spd->partial[i].private;
5740 
5741 	if (--ref->ref)
5742 		return;
5743 
5744 	ring_buffer_free_read_page(ref->buffer, ref->page);
5745 	kfree(ref);
5746 	spd->partial[i].private = 0;
5747 }
5748 
5749 static ssize_t
5750 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5751 			    struct pipe_inode_info *pipe, size_t len,
5752 			    unsigned int flags)
5753 {
5754 	struct ftrace_buffer_info *info = file->private_data;
5755 	struct trace_iterator *iter = &info->iter;
5756 	struct partial_page partial_def[PIPE_DEF_BUFFERS];
5757 	struct page *pages_def[PIPE_DEF_BUFFERS];
5758 	struct splice_pipe_desc spd = {
5759 		.pages		= pages_def,
5760 		.partial	= partial_def,
5761 		.nr_pages_max	= PIPE_DEF_BUFFERS,
5762 		.flags		= flags,
5763 		.ops		= &buffer_pipe_buf_ops,
5764 		.spd_release	= buffer_spd_release,
5765 	};
5766 	struct buffer_ref *ref;
5767 	int entries, size, i;
5768 	ssize_t ret = 0;
5769 
5770 #ifdef CONFIG_TRACER_MAX_TRACE
5771 	if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5772 		return -EBUSY;
5773 #endif
5774 
5775 	if (splice_grow_spd(pipe, &spd))
5776 		return -ENOMEM;
5777 
5778 	if (*ppos & (PAGE_SIZE - 1))
5779 		return -EINVAL;
5780 
5781 	if (len & (PAGE_SIZE - 1)) {
5782 		if (len < PAGE_SIZE)
5783 			return -EINVAL;
5784 		len &= PAGE_MASK;
5785 	}
5786 
5787  again:
5788 	trace_access_lock(iter->cpu_file);
5789 	entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5790 
5791 	for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
5792 		struct page *page;
5793 		int r;
5794 
5795 		ref = kzalloc(sizeof(*ref), GFP_KERNEL);
5796 		if (!ref) {
5797 			ret = -ENOMEM;
5798 			break;
5799 		}
5800 
5801 		ref->ref = 1;
5802 		ref->buffer = iter->trace_buffer->buffer;
5803 		ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
5804 		if (!ref->page) {
5805 			ret = -ENOMEM;
5806 			kfree(ref);
5807 			break;
5808 		}
5809 
5810 		r = ring_buffer_read_page(ref->buffer, &ref->page,
5811 					  len, iter->cpu_file, 1);
5812 		if (r < 0) {
5813 			ring_buffer_free_read_page(ref->buffer, ref->page);
5814 			kfree(ref);
5815 			break;
5816 		}
5817 
5818 		/*
5819 		 * zero out any left over data, this is going to
5820 		 * user land.
5821 		 */
5822 		size = ring_buffer_page_len(ref->page);
5823 		if (size < PAGE_SIZE)
5824 			memset(ref->page + size, 0, PAGE_SIZE - size);
5825 
5826 		page = virt_to_page(ref->page);
5827 
5828 		spd.pages[i] = page;
5829 		spd.partial[i].len = PAGE_SIZE;
5830 		spd.partial[i].offset = 0;
5831 		spd.partial[i].private = (unsigned long)ref;
5832 		spd.nr_pages++;
5833 		*ppos += PAGE_SIZE;
5834 
5835 		entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5836 	}
5837 
5838 	trace_access_unlock(iter->cpu_file);
5839 	spd.nr_pages = i;
5840 
5841 	/* did we read anything? */
5842 	if (!spd.nr_pages) {
5843 		if (ret)
5844 			return ret;
5845 
5846 		if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
5847 			return -EAGAIN;
5848 
5849 		ret = wait_on_pipe(iter, true);
5850 		if (ret)
5851 			return ret;
5852 
5853 		goto again;
5854 	}
5855 
5856 	ret = splice_to_pipe(pipe, &spd);
5857 	splice_shrink_spd(&spd);
5858 
5859 	return ret;
5860 }
5861 
5862 static const struct file_operations tracing_buffers_fops = {
5863 	.open		= tracing_buffers_open,
5864 	.read		= tracing_buffers_read,
5865 	.poll		= tracing_buffers_poll,
5866 	.release	= tracing_buffers_release,
5867 	.splice_read	= tracing_buffers_splice_read,
5868 	.llseek		= no_llseek,
5869 };
5870 
5871 static ssize_t
5872 tracing_stats_read(struct file *filp, char __user *ubuf,
5873 		   size_t count, loff_t *ppos)
5874 {
5875 	struct inode *inode = file_inode(filp);
5876 	struct trace_array *tr = inode->i_private;
5877 	struct trace_buffer *trace_buf = &tr->trace_buffer;
5878 	int cpu = tracing_get_cpu(inode);
5879 	struct trace_seq *s;
5880 	unsigned long cnt;
5881 	unsigned long long t;
5882 	unsigned long usec_rem;
5883 
5884 	s = kmalloc(sizeof(*s), GFP_KERNEL);
5885 	if (!s)
5886 		return -ENOMEM;
5887 
5888 	trace_seq_init(s);
5889 
5890 	cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
5891 	trace_seq_printf(s, "entries: %ld\n", cnt);
5892 
5893 	cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
5894 	trace_seq_printf(s, "overrun: %ld\n", cnt);
5895 
5896 	cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
5897 	trace_seq_printf(s, "commit overrun: %ld\n", cnt);
5898 
5899 	cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
5900 	trace_seq_printf(s, "bytes: %ld\n", cnt);
5901 
5902 	if (trace_clocks[tr->clock_id].in_ns) {
5903 		/* local or global for trace_clock */
5904 		t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5905 		usec_rem = do_div(t, USEC_PER_SEC);
5906 		trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
5907 								t, usec_rem);
5908 
5909 		t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
5910 		usec_rem = do_div(t, USEC_PER_SEC);
5911 		trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
5912 	} else {
5913 		/* counter or tsc mode for trace_clock */
5914 		trace_seq_printf(s, "oldest event ts: %llu\n",
5915 				ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5916 
5917 		trace_seq_printf(s, "now ts: %llu\n",
5918 				ring_buffer_time_stamp(trace_buf->buffer, cpu));
5919 	}
5920 
5921 	cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
5922 	trace_seq_printf(s, "dropped events: %ld\n", cnt);
5923 
5924 	cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
5925 	trace_seq_printf(s, "read events: %ld\n", cnt);
5926 
5927 	count = simple_read_from_buffer(ubuf, count, ppos,
5928 					s->buffer, trace_seq_used(s));
5929 
5930 	kfree(s);
5931 
5932 	return count;
5933 }
5934 
5935 static const struct file_operations tracing_stats_fops = {
5936 	.open		= tracing_open_generic_tr,
5937 	.read		= tracing_stats_read,
5938 	.llseek		= generic_file_llseek,
5939 	.release	= tracing_release_generic_tr,
5940 };
5941 
5942 #ifdef CONFIG_DYNAMIC_FTRACE
5943 
5944 int __weak ftrace_arch_read_dyn_info(char *buf, int size)
5945 {
5946 	return 0;
5947 }
5948 
5949 static ssize_t
5950 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
5951 		  size_t cnt, loff_t *ppos)
5952 {
5953 	static char ftrace_dyn_info_buffer[1024];
5954 	static DEFINE_MUTEX(dyn_info_mutex);
5955 	unsigned long *p = filp->private_data;
5956 	char *buf = ftrace_dyn_info_buffer;
5957 	int size = ARRAY_SIZE(ftrace_dyn_info_buffer);
5958 	int r;
5959 
5960 	mutex_lock(&dyn_info_mutex);
5961 	r = sprintf(buf, "%ld ", *p);
5962 
5963 	r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r);
5964 	buf[r++] = '\n';
5965 
5966 	r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5967 
5968 	mutex_unlock(&dyn_info_mutex);
5969 
5970 	return r;
5971 }
5972 
5973 static const struct file_operations tracing_dyn_info_fops = {
5974 	.open		= tracing_open_generic,
5975 	.read		= tracing_read_dyn_info,
5976 	.llseek		= generic_file_llseek,
5977 };
5978 #endif /* CONFIG_DYNAMIC_FTRACE */
5979 
5980 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
5981 static void
5982 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5983 {
5984 	tracing_snapshot();
5985 }
5986 
5987 static void
5988 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5989 {
5990 	unsigned long *count = (long *)data;
5991 
5992 	if (!*count)
5993 		return;
5994 
5995 	if (*count != -1)
5996 		(*count)--;
5997 
5998 	tracing_snapshot();
5999 }
6000 
6001 static int
6002 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
6003 		      struct ftrace_probe_ops *ops, void *data)
6004 {
6005 	long count = (long)data;
6006 
6007 	seq_printf(m, "%ps:", (void *)ip);
6008 
6009 	seq_puts(m, "snapshot");
6010 
6011 	if (count == -1)
6012 		seq_puts(m, ":unlimited\n");
6013 	else
6014 		seq_printf(m, ":count=%ld\n", count);
6015 
6016 	return 0;
6017 }
6018 
6019 static struct ftrace_probe_ops snapshot_probe_ops = {
6020 	.func			= ftrace_snapshot,
6021 	.print			= ftrace_snapshot_print,
6022 };
6023 
6024 static struct ftrace_probe_ops snapshot_count_probe_ops = {
6025 	.func			= ftrace_count_snapshot,
6026 	.print			= ftrace_snapshot_print,
6027 };
6028 
6029 static int
6030 ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
6031 			       char *glob, char *cmd, char *param, int enable)
6032 {
6033 	struct ftrace_probe_ops *ops;
6034 	void *count = (void *)-1;
6035 	char *number;
6036 	int ret;
6037 
6038 	/* hash funcs only work with set_ftrace_filter */
6039 	if (!enable)
6040 		return -EINVAL;
6041 
6042 	ops = param ? &snapshot_count_probe_ops :  &snapshot_probe_ops;
6043 
6044 	if (glob[0] == '!') {
6045 		unregister_ftrace_function_probe_func(glob+1, ops);
6046 		return 0;
6047 	}
6048 
6049 	if (!param)
6050 		goto out_reg;
6051 
6052 	number = strsep(&param, ":");
6053 
6054 	if (!strlen(number))
6055 		goto out_reg;
6056 
6057 	/*
6058 	 * We use the callback data field (which is a pointer)
6059 	 * as our counter.
6060 	 */
6061 	ret = kstrtoul(number, 0, (unsigned long *)&count);
6062 	if (ret)
6063 		return ret;
6064 
6065  out_reg:
6066 	ret = register_ftrace_function_probe(glob, ops, count);
6067 
6068 	if (ret >= 0)
6069 		alloc_snapshot(&global_trace);
6070 
6071 	return ret < 0 ? ret : 0;
6072 }
6073 
6074 static struct ftrace_func_command ftrace_snapshot_cmd = {
6075 	.name			= "snapshot",
6076 	.func			= ftrace_trace_snapshot_callback,
6077 };
6078 
6079 static __init int register_snapshot_cmd(void)
6080 {
6081 	return register_ftrace_command(&ftrace_snapshot_cmd);
6082 }
6083 #else
6084 static inline __init int register_snapshot_cmd(void) { return 0; }
6085 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
6086 
6087 static struct dentry *tracing_get_dentry(struct trace_array *tr)
6088 {
6089 	if (WARN_ON(!tr->dir))
6090 		return ERR_PTR(-ENODEV);
6091 
6092 	/* Top directory uses NULL as the parent */
6093 	if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
6094 		return NULL;
6095 
6096 	/* All sub buffers have a descriptor */
6097 	return tr->dir;
6098 }
6099 
6100 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
6101 {
6102 	struct dentry *d_tracer;
6103 
6104 	if (tr->percpu_dir)
6105 		return tr->percpu_dir;
6106 
6107 	d_tracer = tracing_get_dentry(tr);
6108 	if (IS_ERR(d_tracer))
6109 		return NULL;
6110 
6111 	tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
6112 
6113 	WARN_ONCE(!tr->percpu_dir,
6114 		  "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
6115 
6116 	return tr->percpu_dir;
6117 }
6118 
6119 static struct dentry *
6120 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
6121 		      void *data, long cpu, const struct file_operations *fops)
6122 {
6123 	struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
6124 
6125 	if (ret) /* See tracing_get_cpu() */
6126 		d_inode(ret)->i_cdev = (void *)(cpu + 1);
6127 	return ret;
6128 }
6129 
6130 static void
6131 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
6132 {
6133 	struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
6134 	struct dentry *d_cpu;
6135 	char cpu_dir[30]; /* 30 characters should be more than enough */
6136 
6137 	if (!d_percpu)
6138 		return;
6139 
6140 	snprintf(cpu_dir, 30, "cpu%ld", cpu);
6141 	d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
6142 	if (!d_cpu) {
6143 		pr_warn("Could not create tracefs '%s' entry\n", cpu_dir);
6144 		return;
6145 	}
6146 
6147 	/* per cpu trace_pipe */
6148 	trace_create_cpu_file("trace_pipe", 0444, d_cpu,
6149 				tr, cpu, &tracing_pipe_fops);
6150 
6151 	/* per cpu trace */
6152 	trace_create_cpu_file("trace", 0644, d_cpu,
6153 				tr, cpu, &tracing_fops);
6154 
6155 	trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
6156 				tr, cpu, &tracing_buffers_fops);
6157 
6158 	trace_create_cpu_file("stats", 0444, d_cpu,
6159 				tr, cpu, &tracing_stats_fops);
6160 
6161 	trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
6162 				tr, cpu, &tracing_entries_fops);
6163 
6164 #ifdef CONFIG_TRACER_SNAPSHOT
6165 	trace_create_cpu_file("snapshot", 0644, d_cpu,
6166 				tr, cpu, &snapshot_fops);
6167 
6168 	trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
6169 				tr, cpu, &snapshot_raw_fops);
6170 #endif
6171 }
6172 
6173 #ifdef CONFIG_FTRACE_SELFTEST
6174 /* Let selftest have access to static functions in this file */
6175 #include "trace_selftest.c"
6176 #endif
6177 
6178 static ssize_t
6179 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
6180 			loff_t *ppos)
6181 {
6182 	struct trace_option_dentry *topt = filp->private_data;
6183 	char *buf;
6184 
6185 	if (topt->flags->val & topt->opt->bit)
6186 		buf = "1\n";
6187 	else
6188 		buf = "0\n";
6189 
6190 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6191 }
6192 
6193 static ssize_t
6194 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
6195 			 loff_t *ppos)
6196 {
6197 	struct trace_option_dentry *topt = filp->private_data;
6198 	unsigned long val;
6199 	int ret;
6200 
6201 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6202 	if (ret)
6203 		return ret;
6204 
6205 	if (val != 0 && val != 1)
6206 		return -EINVAL;
6207 
6208 	if (!!(topt->flags->val & topt->opt->bit) != val) {
6209 		mutex_lock(&trace_types_lock);
6210 		ret = __set_tracer_option(topt->tr, topt->flags,
6211 					  topt->opt, !val);
6212 		mutex_unlock(&trace_types_lock);
6213 		if (ret)
6214 			return ret;
6215 	}
6216 
6217 	*ppos += cnt;
6218 
6219 	return cnt;
6220 }
6221 
6222 
6223 static const struct file_operations trace_options_fops = {
6224 	.open = tracing_open_generic,
6225 	.read = trace_options_read,
6226 	.write = trace_options_write,
6227 	.llseek	= generic_file_llseek,
6228 };
6229 
6230 /*
6231  * In order to pass in both the trace_array descriptor as well as the index
6232  * to the flag that the trace option file represents, the trace_array
6233  * has a character array of trace_flags_index[], which holds the index
6234  * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
6235  * The address of this character array is passed to the flag option file
6236  * read/write callbacks.
6237  *
6238  * In order to extract both the index and the trace_array descriptor,
6239  * get_tr_index() uses the following algorithm.
6240  *
6241  *   idx = *ptr;
6242  *
6243  * As the pointer itself contains the address of the index (remember
6244  * index[1] == 1).
6245  *
6246  * Then to get the trace_array descriptor, by subtracting that index
6247  * from the ptr, we get to the start of the index itself.
6248  *
6249  *   ptr - idx == &index[0]
6250  *
6251  * Then a simple container_of() from that pointer gets us to the
6252  * trace_array descriptor.
6253  */
6254 static void get_tr_index(void *data, struct trace_array **ptr,
6255 			 unsigned int *pindex)
6256 {
6257 	*pindex = *(unsigned char *)data;
6258 
6259 	*ptr = container_of(data - *pindex, struct trace_array,
6260 			    trace_flags_index);
6261 }
6262 
6263 static ssize_t
6264 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
6265 			loff_t *ppos)
6266 {
6267 	void *tr_index = filp->private_data;
6268 	struct trace_array *tr;
6269 	unsigned int index;
6270 	char *buf;
6271 
6272 	get_tr_index(tr_index, &tr, &index);
6273 
6274 	if (tr->trace_flags & (1 << index))
6275 		buf = "1\n";
6276 	else
6277 		buf = "0\n";
6278 
6279 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6280 }
6281 
6282 static ssize_t
6283 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
6284 			 loff_t *ppos)
6285 {
6286 	void *tr_index = filp->private_data;
6287 	struct trace_array *tr;
6288 	unsigned int index;
6289 	unsigned long val;
6290 	int ret;
6291 
6292 	get_tr_index(tr_index, &tr, &index);
6293 
6294 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6295 	if (ret)
6296 		return ret;
6297 
6298 	if (val != 0 && val != 1)
6299 		return -EINVAL;
6300 
6301 	mutex_lock(&trace_types_lock);
6302 	ret = set_tracer_flag(tr, 1 << index, val);
6303 	mutex_unlock(&trace_types_lock);
6304 
6305 	if (ret < 0)
6306 		return ret;
6307 
6308 	*ppos += cnt;
6309 
6310 	return cnt;
6311 }
6312 
6313 static const struct file_operations trace_options_core_fops = {
6314 	.open = tracing_open_generic,
6315 	.read = trace_options_core_read,
6316 	.write = trace_options_core_write,
6317 	.llseek = generic_file_llseek,
6318 };
6319 
6320 struct dentry *trace_create_file(const char *name,
6321 				 umode_t mode,
6322 				 struct dentry *parent,
6323 				 void *data,
6324 				 const struct file_operations *fops)
6325 {
6326 	struct dentry *ret;
6327 
6328 	ret = tracefs_create_file(name, mode, parent, data, fops);
6329 	if (!ret)
6330 		pr_warn("Could not create tracefs '%s' entry\n", name);
6331 
6332 	return ret;
6333 }
6334 
6335 
6336 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
6337 {
6338 	struct dentry *d_tracer;
6339 
6340 	if (tr->options)
6341 		return tr->options;
6342 
6343 	d_tracer = tracing_get_dentry(tr);
6344 	if (IS_ERR(d_tracer))
6345 		return NULL;
6346 
6347 	tr->options = tracefs_create_dir("options", d_tracer);
6348 	if (!tr->options) {
6349 		pr_warn("Could not create tracefs directory 'options'\n");
6350 		return NULL;
6351 	}
6352 
6353 	return tr->options;
6354 }
6355 
6356 static void
6357 create_trace_option_file(struct trace_array *tr,
6358 			 struct trace_option_dentry *topt,
6359 			 struct tracer_flags *flags,
6360 			 struct tracer_opt *opt)
6361 {
6362 	struct dentry *t_options;
6363 
6364 	t_options = trace_options_init_dentry(tr);
6365 	if (!t_options)
6366 		return;
6367 
6368 	topt->flags = flags;
6369 	topt->opt = opt;
6370 	topt->tr = tr;
6371 
6372 	topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
6373 				    &trace_options_fops);
6374 
6375 }
6376 
6377 static void
6378 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
6379 {
6380 	struct trace_option_dentry *topts;
6381 	struct trace_options *tr_topts;
6382 	struct tracer_flags *flags;
6383 	struct tracer_opt *opts;
6384 	int cnt;
6385 	int i;
6386 
6387 	if (!tracer)
6388 		return;
6389 
6390 	flags = tracer->flags;
6391 
6392 	if (!flags || !flags->opts)
6393 		return;
6394 
6395 	/*
6396 	 * If this is an instance, only create flags for tracers
6397 	 * the instance may have.
6398 	 */
6399 	if (!trace_ok_for_array(tracer, tr))
6400 		return;
6401 
6402 	for (i = 0; i < tr->nr_topts; i++) {
6403 		/* Make sure there's no duplicate flags. */
6404 		if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags))
6405 			return;
6406 	}
6407 
6408 	opts = flags->opts;
6409 
6410 	for (cnt = 0; opts[cnt].name; cnt++)
6411 		;
6412 
6413 	topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
6414 	if (!topts)
6415 		return;
6416 
6417 	tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
6418 			    GFP_KERNEL);
6419 	if (!tr_topts) {
6420 		kfree(topts);
6421 		return;
6422 	}
6423 
6424 	tr->topts = tr_topts;
6425 	tr->topts[tr->nr_topts].tracer = tracer;
6426 	tr->topts[tr->nr_topts].topts = topts;
6427 	tr->nr_topts++;
6428 
6429 	for (cnt = 0; opts[cnt].name; cnt++) {
6430 		create_trace_option_file(tr, &topts[cnt], flags,
6431 					 &opts[cnt]);
6432 		WARN_ONCE(topts[cnt].entry == NULL,
6433 			  "Failed to create trace option: %s",
6434 			  opts[cnt].name);
6435 	}
6436 }
6437 
6438 static struct dentry *
6439 create_trace_option_core_file(struct trace_array *tr,
6440 			      const char *option, long index)
6441 {
6442 	struct dentry *t_options;
6443 
6444 	t_options = trace_options_init_dentry(tr);
6445 	if (!t_options)
6446 		return NULL;
6447 
6448 	return trace_create_file(option, 0644, t_options,
6449 				 (void *)&tr->trace_flags_index[index],
6450 				 &trace_options_core_fops);
6451 }
6452 
6453 static void create_trace_options_dir(struct trace_array *tr)
6454 {
6455 	struct dentry *t_options;
6456 	bool top_level = tr == &global_trace;
6457 	int i;
6458 
6459 	t_options = trace_options_init_dentry(tr);
6460 	if (!t_options)
6461 		return;
6462 
6463 	for (i = 0; trace_options[i]; i++) {
6464 		if (top_level ||
6465 		    !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
6466 			create_trace_option_core_file(tr, trace_options[i], i);
6467 	}
6468 }
6469 
6470 static ssize_t
6471 rb_simple_read(struct file *filp, char __user *ubuf,
6472 	       size_t cnt, loff_t *ppos)
6473 {
6474 	struct trace_array *tr = filp->private_data;
6475 	char buf[64];
6476 	int r;
6477 
6478 	r = tracer_tracing_is_on(tr);
6479 	r = sprintf(buf, "%d\n", r);
6480 
6481 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6482 }
6483 
6484 static ssize_t
6485 rb_simple_write(struct file *filp, const char __user *ubuf,
6486 		size_t cnt, loff_t *ppos)
6487 {
6488 	struct trace_array *tr = filp->private_data;
6489 	struct ring_buffer *buffer = tr->trace_buffer.buffer;
6490 	unsigned long val;
6491 	int ret;
6492 
6493 	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6494 	if (ret)
6495 		return ret;
6496 
6497 	if (buffer) {
6498 		mutex_lock(&trace_types_lock);
6499 		if (val) {
6500 			tracer_tracing_on(tr);
6501 			if (tr->current_trace->start)
6502 				tr->current_trace->start(tr);
6503 		} else {
6504 			tracer_tracing_off(tr);
6505 			if (tr->current_trace->stop)
6506 				tr->current_trace->stop(tr);
6507 		}
6508 		mutex_unlock(&trace_types_lock);
6509 	}
6510 
6511 	(*ppos)++;
6512 
6513 	return cnt;
6514 }
6515 
6516 static const struct file_operations rb_simple_fops = {
6517 	.open		= tracing_open_generic_tr,
6518 	.read		= rb_simple_read,
6519 	.write		= rb_simple_write,
6520 	.release	= tracing_release_generic_tr,
6521 	.llseek		= default_llseek,
6522 };
6523 
6524 struct dentry *trace_instance_dir;
6525 
6526 static void
6527 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
6528 
6529 static int
6530 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
6531 {
6532 	enum ring_buffer_flags rb_flags;
6533 
6534 	rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
6535 
6536 	buf->tr = tr;
6537 
6538 	buf->buffer = ring_buffer_alloc(size, rb_flags);
6539 	if (!buf->buffer)
6540 		return -ENOMEM;
6541 
6542 	buf->data = alloc_percpu(struct trace_array_cpu);
6543 	if (!buf->data) {
6544 		ring_buffer_free(buf->buffer);
6545 		return -ENOMEM;
6546 	}
6547 
6548 	/* Allocate the first page for all buffers */
6549 	set_buffer_entries(&tr->trace_buffer,
6550 			   ring_buffer_size(tr->trace_buffer.buffer, 0));
6551 
6552 	return 0;
6553 }
6554 
6555 static int allocate_trace_buffers(struct trace_array *tr, int size)
6556 {
6557 	int ret;
6558 
6559 	ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
6560 	if (ret)
6561 		return ret;
6562 
6563 #ifdef CONFIG_TRACER_MAX_TRACE
6564 	ret = allocate_trace_buffer(tr, &tr->max_buffer,
6565 				    allocate_snapshot ? size : 1);
6566 	if (WARN_ON(ret)) {
6567 		ring_buffer_free(tr->trace_buffer.buffer);
6568 		free_percpu(tr->trace_buffer.data);
6569 		return -ENOMEM;
6570 	}
6571 	tr->allocated_snapshot = allocate_snapshot;
6572 
6573 	/*
6574 	 * Only the top level trace array gets its snapshot allocated
6575 	 * from the kernel command line.
6576 	 */
6577 	allocate_snapshot = false;
6578 #endif
6579 	return 0;
6580 }
6581 
6582 static void free_trace_buffer(struct trace_buffer *buf)
6583 {
6584 	if (buf->buffer) {
6585 		ring_buffer_free(buf->buffer);
6586 		buf->buffer = NULL;
6587 		free_percpu(buf->data);
6588 		buf->data = NULL;
6589 	}
6590 }
6591 
6592 static void free_trace_buffers(struct trace_array *tr)
6593 {
6594 	if (!tr)
6595 		return;
6596 
6597 	free_trace_buffer(&tr->trace_buffer);
6598 
6599 #ifdef CONFIG_TRACER_MAX_TRACE
6600 	free_trace_buffer(&tr->max_buffer);
6601 #endif
6602 }
6603 
6604 static void init_trace_flags_index(struct trace_array *tr)
6605 {
6606 	int i;
6607 
6608 	/* Used by the trace options files */
6609 	for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
6610 		tr->trace_flags_index[i] = i;
6611 }
6612 
6613 static void __update_tracer_options(struct trace_array *tr)
6614 {
6615 	struct tracer *t;
6616 
6617 	for (t = trace_types; t; t = t->next)
6618 		add_tracer_options(tr, t);
6619 }
6620 
6621 static void update_tracer_options(struct trace_array *tr)
6622 {
6623 	mutex_lock(&trace_types_lock);
6624 	__update_tracer_options(tr);
6625 	mutex_unlock(&trace_types_lock);
6626 }
6627 
6628 static int instance_mkdir(const char *name)
6629 {
6630 	struct trace_array *tr;
6631 	int ret;
6632 
6633 	mutex_lock(&trace_types_lock);
6634 
6635 	ret = -EEXIST;
6636 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6637 		if (tr->name && strcmp(tr->name, name) == 0)
6638 			goto out_unlock;
6639 	}
6640 
6641 	ret = -ENOMEM;
6642 	tr = kzalloc(sizeof(*tr), GFP_KERNEL);
6643 	if (!tr)
6644 		goto out_unlock;
6645 
6646 	tr->name = kstrdup(name, GFP_KERNEL);
6647 	if (!tr->name)
6648 		goto out_free_tr;
6649 
6650 	if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
6651 		goto out_free_tr;
6652 
6653 	tr->trace_flags = global_trace.trace_flags;
6654 
6655 	cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
6656 
6657 	raw_spin_lock_init(&tr->start_lock);
6658 
6659 	tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6660 
6661 	tr->current_trace = &nop_trace;
6662 
6663 	INIT_LIST_HEAD(&tr->systems);
6664 	INIT_LIST_HEAD(&tr->events);
6665 
6666 	if (allocate_trace_buffers(tr, trace_buf_size) < 0)
6667 		goto out_free_tr;
6668 
6669 	tr->dir = tracefs_create_dir(name, trace_instance_dir);
6670 	if (!tr->dir)
6671 		goto out_free_tr;
6672 
6673 	ret = event_trace_add_tracer(tr->dir, tr);
6674 	if (ret) {
6675 		tracefs_remove_recursive(tr->dir);
6676 		goto out_free_tr;
6677 	}
6678 
6679 	init_tracer_tracefs(tr, tr->dir);
6680 	init_trace_flags_index(tr);
6681 	__update_tracer_options(tr);
6682 
6683 	list_add(&tr->list, &ftrace_trace_arrays);
6684 
6685 	mutex_unlock(&trace_types_lock);
6686 
6687 	return 0;
6688 
6689  out_free_tr:
6690 	free_trace_buffers(tr);
6691 	free_cpumask_var(tr->tracing_cpumask);
6692 	kfree(tr->name);
6693 	kfree(tr);
6694 
6695  out_unlock:
6696 	mutex_unlock(&trace_types_lock);
6697 
6698 	return ret;
6699 
6700 }
6701 
6702 static int instance_rmdir(const char *name)
6703 {
6704 	struct trace_array *tr;
6705 	int found = 0;
6706 	int ret;
6707 	int i;
6708 
6709 	mutex_lock(&trace_types_lock);
6710 
6711 	ret = -ENODEV;
6712 	list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6713 		if (tr->name && strcmp(tr->name, name) == 0) {
6714 			found = 1;
6715 			break;
6716 		}
6717 	}
6718 	if (!found)
6719 		goto out_unlock;
6720 
6721 	ret = -EBUSY;
6722 	if (tr->ref || (tr->current_trace && tr->current_trace->ref))
6723 		goto out_unlock;
6724 
6725 	list_del(&tr->list);
6726 
6727 	tracing_set_nop(tr);
6728 	event_trace_del_tracer(tr);
6729 	ftrace_destroy_function_files(tr);
6730 	tracefs_remove_recursive(tr->dir);
6731 	free_trace_buffers(tr);
6732 
6733 	for (i = 0; i < tr->nr_topts; i++) {
6734 		kfree(tr->topts[i].topts);
6735 	}
6736 	kfree(tr->topts);
6737 
6738 	kfree(tr->name);
6739 	kfree(tr);
6740 
6741 	ret = 0;
6742 
6743  out_unlock:
6744 	mutex_unlock(&trace_types_lock);
6745 
6746 	return ret;
6747 }
6748 
6749 static __init void create_trace_instances(struct dentry *d_tracer)
6750 {
6751 	trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
6752 							 instance_mkdir,
6753 							 instance_rmdir);
6754 	if (WARN_ON(!trace_instance_dir))
6755 		return;
6756 }
6757 
6758 static void
6759 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
6760 {
6761 	int cpu;
6762 
6763 	trace_create_file("available_tracers", 0444, d_tracer,
6764 			tr, &show_traces_fops);
6765 
6766 	trace_create_file("current_tracer", 0644, d_tracer,
6767 			tr, &set_tracer_fops);
6768 
6769 	trace_create_file("tracing_cpumask", 0644, d_tracer,
6770 			  tr, &tracing_cpumask_fops);
6771 
6772 	trace_create_file("trace_options", 0644, d_tracer,
6773 			  tr, &tracing_iter_fops);
6774 
6775 	trace_create_file("trace", 0644, d_tracer,
6776 			  tr, &tracing_fops);
6777 
6778 	trace_create_file("trace_pipe", 0444, d_tracer,
6779 			  tr, &tracing_pipe_fops);
6780 
6781 	trace_create_file("buffer_size_kb", 0644, d_tracer,
6782 			  tr, &tracing_entries_fops);
6783 
6784 	trace_create_file("buffer_total_size_kb", 0444, d_tracer,
6785 			  tr, &tracing_total_entries_fops);
6786 
6787 	trace_create_file("free_buffer", 0200, d_tracer,
6788 			  tr, &tracing_free_buffer_fops);
6789 
6790 	trace_create_file("trace_marker", 0220, d_tracer,
6791 			  tr, &tracing_mark_fops);
6792 
6793 	trace_create_file("trace_clock", 0644, d_tracer, tr,
6794 			  &trace_clock_fops);
6795 
6796 	trace_create_file("tracing_on", 0644, d_tracer,
6797 			  tr, &rb_simple_fops);
6798 
6799 	create_trace_options_dir(tr);
6800 
6801 #ifdef CONFIG_TRACER_MAX_TRACE
6802 	trace_create_file("tracing_max_latency", 0644, d_tracer,
6803 			&tr->max_latency, &tracing_max_lat_fops);
6804 #endif
6805 
6806 	if (ftrace_create_function_files(tr, d_tracer))
6807 		WARN(1, "Could not allocate function filter files");
6808 
6809 #ifdef CONFIG_TRACER_SNAPSHOT
6810 	trace_create_file("snapshot", 0644, d_tracer,
6811 			  tr, &snapshot_fops);
6812 #endif
6813 
6814 	for_each_tracing_cpu(cpu)
6815 		tracing_init_tracefs_percpu(tr, cpu);
6816 
6817 }
6818 
6819 static struct vfsmount *trace_automount(void *ingore)
6820 {
6821 	struct vfsmount *mnt;
6822 	struct file_system_type *type;
6823 
6824 	/*
6825 	 * To maintain backward compatibility for tools that mount
6826 	 * debugfs to get to the tracing facility, tracefs is automatically
6827 	 * mounted to the debugfs/tracing directory.
6828 	 */
6829 	type = get_fs_type("tracefs");
6830 	if (!type)
6831 		return NULL;
6832 	mnt = vfs_kern_mount(type, 0, "tracefs", NULL);
6833 	put_filesystem(type);
6834 	if (IS_ERR(mnt))
6835 		return NULL;
6836 	mntget(mnt);
6837 
6838 	return mnt;
6839 }
6840 
6841 /**
6842  * tracing_init_dentry - initialize top level trace array
6843  *
6844  * This is called when creating files or directories in the tracing
6845  * directory. It is called via fs_initcall() by any of the boot up code
6846  * and expects to return the dentry of the top level tracing directory.
6847  */
6848 struct dentry *tracing_init_dentry(void)
6849 {
6850 	struct trace_array *tr = &global_trace;
6851 
6852 	/* The top level trace array uses  NULL as parent */
6853 	if (tr->dir)
6854 		return NULL;
6855 
6856 	if (WARN_ON(!tracefs_initialized()) ||
6857 		(IS_ENABLED(CONFIG_DEBUG_FS) &&
6858 		 WARN_ON(!debugfs_initialized())))
6859 		return ERR_PTR(-ENODEV);
6860 
6861 	/*
6862 	 * As there may still be users that expect the tracing
6863 	 * files to exist in debugfs/tracing, we must automount
6864 	 * the tracefs file system there, so older tools still
6865 	 * work with the newer kerenl.
6866 	 */
6867 	tr->dir = debugfs_create_automount("tracing", NULL,
6868 					   trace_automount, NULL);
6869 	if (!tr->dir) {
6870 		pr_warn_once("Could not create debugfs directory 'tracing'\n");
6871 		return ERR_PTR(-ENOMEM);
6872 	}
6873 
6874 	return NULL;
6875 }
6876 
6877 extern struct trace_enum_map *__start_ftrace_enum_maps[];
6878 extern struct trace_enum_map *__stop_ftrace_enum_maps[];
6879 
6880 static void __init trace_enum_init(void)
6881 {
6882 	int len;
6883 
6884 	len = __stop_ftrace_enum_maps - __start_ftrace_enum_maps;
6885 	trace_insert_enum_map(NULL, __start_ftrace_enum_maps, len);
6886 }
6887 
6888 #ifdef CONFIG_MODULES
6889 static void trace_module_add_enums(struct module *mod)
6890 {
6891 	if (!mod->num_trace_enums)
6892 		return;
6893 
6894 	/*
6895 	 * Modules with bad taint do not have events created, do
6896 	 * not bother with enums either.
6897 	 */
6898 	if (trace_module_has_bad_taint(mod))
6899 		return;
6900 
6901 	trace_insert_enum_map(mod, mod->trace_enums, mod->num_trace_enums);
6902 }
6903 
6904 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
6905 static void trace_module_remove_enums(struct module *mod)
6906 {
6907 	union trace_enum_map_item *map;
6908 	union trace_enum_map_item **last = &trace_enum_maps;
6909 
6910 	if (!mod->num_trace_enums)
6911 		return;
6912 
6913 	mutex_lock(&trace_enum_mutex);
6914 
6915 	map = trace_enum_maps;
6916 
6917 	while (map) {
6918 		if (map->head.mod == mod)
6919 			break;
6920 		map = trace_enum_jmp_to_tail(map);
6921 		last = &map->tail.next;
6922 		map = map->tail.next;
6923 	}
6924 	if (!map)
6925 		goto out;
6926 
6927 	*last = trace_enum_jmp_to_tail(map)->tail.next;
6928 	kfree(map);
6929  out:
6930 	mutex_unlock(&trace_enum_mutex);
6931 }
6932 #else
6933 static inline void trace_module_remove_enums(struct module *mod) { }
6934 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
6935 
6936 static int trace_module_notify(struct notifier_block *self,
6937 			       unsigned long val, void *data)
6938 {
6939 	struct module *mod = data;
6940 
6941 	switch (val) {
6942 	case MODULE_STATE_COMING:
6943 		trace_module_add_enums(mod);
6944 		break;
6945 	case MODULE_STATE_GOING:
6946 		trace_module_remove_enums(mod);
6947 		break;
6948 	}
6949 
6950 	return 0;
6951 }
6952 
6953 static struct notifier_block trace_module_nb = {
6954 	.notifier_call = trace_module_notify,
6955 	.priority = 0,
6956 };
6957 #endif /* CONFIG_MODULES */
6958 
6959 static __init int tracer_init_tracefs(void)
6960 {
6961 	struct dentry *d_tracer;
6962 
6963 	trace_access_lock_init();
6964 
6965 	d_tracer = tracing_init_dentry();
6966 	if (IS_ERR(d_tracer))
6967 		return 0;
6968 
6969 	init_tracer_tracefs(&global_trace, d_tracer);
6970 
6971 	trace_create_file("tracing_thresh", 0644, d_tracer,
6972 			&global_trace, &tracing_thresh_fops);
6973 
6974 	trace_create_file("README", 0444, d_tracer,
6975 			NULL, &tracing_readme_fops);
6976 
6977 	trace_create_file("saved_cmdlines", 0444, d_tracer,
6978 			NULL, &tracing_saved_cmdlines_fops);
6979 
6980 	trace_create_file("saved_cmdlines_size", 0644, d_tracer,
6981 			  NULL, &tracing_saved_cmdlines_size_fops);
6982 
6983 	trace_enum_init();
6984 
6985 	trace_create_enum_file(d_tracer);
6986 
6987 #ifdef CONFIG_MODULES
6988 	register_module_notifier(&trace_module_nb);
6989 #endif
6990 
6991 #ifdef CONFIG_DYNAMIC_FTRACE
6992 	trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
6993 			&ftrace_update_tot_cnt, &tracing_dyn_info_fops);
6994 #endif
6995 
6996 	create_trace_instances(d_tracer);
6997 
6998 	update_tracer_options(&global_trace);
6999 
7000 	return 0;
7001 }
7002 
7003 static int trace_panic_handler(struct notifier_block *this,
7004 			       unsigned long event, void *unused)
7005 {
7006 	if (ftrace_dump_on_oops)
7007 		ftrace_dump(ftrace_dump_on_oops);
7008 	return NOTIFY_OK;
7009 }
7010 
7011 static struct notifier_block trace_panic_notifier = {
7012 	.notifier_call  = trace_panic_handler,
7013 	.next           = NULL,
7014 	.priority       = 150   /* priority: INT_MAX >= x >= 0 */
7015 };
7016 
7017 static int trace_die_handler(struct notifier_block *self,
7018 			     unsigned long val,
7019 			     void *data)
7020 {
7021 	switch (val) {
7022 	case DIE_OOPS:
7023 		if (ftrace_dump_on_oops)
7024 			ftrace_dump(ftrace_dump_on_oops);
7025 		break;
7026 	default:
7027 		break;
7028 	}
7029 	return NOTIFY_OK;
7030 }
7031 
7032 static struct notifier_block trace_die_notifier = {
7033 	.notifier_call = trace_die_handler,
7034 	.priority = 200
7035 };
7036 
7037 /*
7038  * printk is set to max of 1024, we really don't need it that big.
7039  * Nothing should be printing 1000 characters anyway.
7040  */
7041 #define TRACE_MAX_PRINT		1000
7042 
7043 /*
7044  * Define here KERN_TRACE so that we have one place to modify
7045  * it if we decide to change what log level the ftrace dump
7046  * should be at.
7047  */
7048 #define KERN_TRACE		KERN_EMERG
7049 
7050 void
7051 trace_printk_seq(struct trace_seq *s)
7052 {
7053 	/* Probably should print a warning here. */
7054 	if (s->seq.len >= TRACE_MAX_PRINT)
7055 		s->seq.len = TRACE_MAX_PRINT;
7056 
7057 	/*
7058 	 * More paranoid code. Although the buffer size is set to
7059 	 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
7060 	 * an extra layer of protection.
7061 	 */
7062 	if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
7063 		s->seq.len = s->seq.size - 1;
7064 
7065 	/* should be zero ended, but we are paranoid. */
7066 	s->buffer[s->seq.len] = 0;
7067 
7068 	printk(KERN_TRACE "%s", s->buffer);
7069 
7070 	trace_seq_init(s);
7071 }
7072 
7073 void trace_init_global_iter(struct trace_iterator *iter)
7074 {
7075 	iter->tr = &global_trace;
7076 	iter->trace = iter->tr->current_trace;
7077 	iter->cpu_file = RING_BUFFER_ALL_CPUS;
7078 	iter->trace_buffer = &global_trace.trace_buffer;
7079 
7080 	if (iter->trace && iter->trace->open)
7081 		iter->trace->open(iter);
7082 
7083 	/* Annotate start of buffers if we had overruns */
7084 	if (ring_buffer_overruns(iter->trace_buffer->buffer))
7085 		iter->iter_flags |= TRACE_FILE_ANNOTATE;
7086 
7087 	/* Output in nanoseconds only if we are using a clock in nanoseconds. */
7088 	if (trace_clocks[iter->tr->clock_id].in_ns)
7089 		iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
7090 }
7091 
7092 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
7093 {
7094 	/* use static because iter can be a bit big for the stack */
7095 	static struct trace_iterator iter;
7096 	static atomic_t dump_running;
7097 	struct trace_array *tr = &global_trace;
7098 	unsigned int old_userobj;
7099 	unsigned long flags;
7100 	int cnt = 0, cpu;
7101 
7102 	/* Only allow one dump user at a time. */
7103 	if (atomic_inc_return(&dump_running) != 1) {
7104 		atomic_dec(&dump_running);
7105 		return;
7106 	}
7107 
7108 	/*
7109 	 * Always turn off tracing when we dump.
7110 	 * We don't need to show trace output of what happens
7111 	 * between multiple crashes.
7112 	 *
7113 	 * If the user does a sysrq-z, then they can re-enable
7114 	 * tracing with echo 1 > tracing_on.
7115 	 */
7116 	tracing_off();
7117 
7118 	local_irq_save(flags);
7119 
7120 	/* Simulate the iterator */
7121 	trace_init_global_iter(&iter);
7122 
7123 	for_each_tracing_cpu(cpu) {
7124 		atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7125 	}
7126 
7127 	old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
7128 
7129 	/* don't look at user memory in panic mode */
7130 	tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
7131 
7132 	switch (oops_dump_mode) {
7133 	case DUMP_ALL:
7134 		iter.cpu_file = RING_BUFFER_ALL_CPUS;
7135 		break;
7136 	case DUMP_ORIG:
7137 		iter.cpu_file = raw_smp_processor_id();
7138 		break;
7139 	case DUMP_NONE:
7140 		goto out_enable;
7141 	default:
7142 		printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
7143 		iter.cpu_file = RING_BUFFER_ALL_CPUS;
7144 	}
7145 
7146 	printk(KERN_TRACE "Dumping ftrace buffer:\n");
7147 
7148 	/* Did function tracer already get disabled? */
7149 	if (ftrace_is_dead()) {
7150 		printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
7151 		printk("#          MAY BE MISSING FUNCTION EVENTS\n");
7152 	}
7153 
7154 	/*
7155 	 * We need to stop all tracing on all CPUS to read the
7156 	 * the next buffer. This is a bit expensive, but is
7157 	 * not done often. We fill all what we can read,
7158 	 * and then release the locks again.
7159 	 */
7160 
7161 	while (!trace_empty(&iter)) {
7162 
7163 		if (!cnt)
7164 			printk(KERN_TRACE "---------------------------------\n");
7165 
7166 		cnt++;
7167 
7168 		/* reset all but tr, trace, and overruns */
7169 		memset(&iter.seq, 0,
7170 		       sizeof(struct trace_iterator) -
7171 		       offsetof(struct trace_iterator, seq));
7172 		iter.iter_flags |= TRACE_FILE_LAT_FMT;
7173 		iter.pos = -1;
7174 
7175 		if (trace_find_next_entry_inc(&iter) != NULL) {
7176 			int ret;
7177 
7178 			ret = print_trace_line(&iter);
7179 			if (ret != TRACE_TYPE_NO_CONSUME)
7180 				trace_consume(&iter);
7181 		}
7182 		touch_nmi_watchdog();
7183 
7184 		trace_printk_seq(&iter.seq);
7185 	}
7186 
7187 	if (!cnt)
7188 		printk(KERN_TRACE "   (ftrace buffer empty)\n");
7189 	else
7190 		printk(KERN_TRACE "---------------------------------\n");
7191 
7192  out_enable:
7193 	tr->trace_flags |= old_userobj;
7194 
7195 	for_each_tracing_cpu(cpu) {
7196 		atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7197 	}
7198  	atomic_dec(&dump_running);
7199 	local_irq_restore(flags);
7200 }
7201 EXPORT_SYMBOL_GPL(ftrace_dump);
7202 
7203 __init static int tracer_alloc_buffers(void)
7204 {
7205 	int ring_buf_size;
7206 	int ret = -ENOMEM;
7207 
7208 	/*
7209 	 * Make sure we don't accidently add more trace options
7210 	 * than we have bits for.
7211 	 */
7212 	BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
7213 
7214 	if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
7215 		goto out;
7216 
7217 	if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
7218 		goto out_free_buffer_mask;
7219 
7220 	/* Only allocate trace_printk buffers if a trace_printk exists */
7221 	if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
7222 		/* Must be called before global_trace.buffer is allocated */
7223 		trace_printk_init_buffers();
7224 
7225 	/* To save memory, keep the ring buffer size to its minimum */
7226 	if (ring_buffer_expanded)
7227 		ring_buf_size = trace_buf_size;
7228 	else
7229 		ring_buf_size = 1;
7230 
7231 	cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
7232 	cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
7233 
7234 	raw_spin_lock_init(&global_trace.start_lock);
7235 
7236 	/* Used for event triggers */
7237 	temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
7238 	if (!temp_buffer)
7239 		goto out_free_cpumask;
7240 
7241 	if (trace_create_savedcmd() < 0)
7242 		goto out_free_temp_buffer;
7243 
7244 	/* TODO: make the number of buffers hot pluggable with CPUS */
7245 	if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
7246 		printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
7247 		WARN_ON(1);
7248 		goto out_free_savedcmd;
7249 	}
7250 
7251 	if (global_trace.buffer_disabled)
7252 		tracing_off();
7253 
7254 	if (trace_boot_clock) {
7255 		ret = tracing_set_clock(&global_trace, trace_boot_clock);
7256 		if (ret < 0)
7257 			pr_warn("Trace clock %s not defined, going back to default\n",
7258 				trace_boot_clock);
7259 	}
7260 
7261 	/*
7262 	 * register_tracer() might reference current_trace, so it
7263 	 * needs to be set before we register anything. This is
7264 	 * just a bootstrap of current_trace anyway.
7265 	 */
7266 	global_trace.current_trace = &nop_trace;
7267 
7268 	global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
7269 
7270 	ftrace_init_global_array_ops(&global_trace);
7271 
7272 	init_trace_flags_index(&global_trace);
7273 
7274 	register_tracer(&nop_trace);
7275 
7276 	/* All seems OK, enable tracing */
7277 	tracing_disabled = 0;
7278 
7279 	atomic_notifier_chain_register(&panic_notifier_list,
7280 				       &trace_panic_notifier);
7281 
7282 	register_die_notifier(&trace_die_notifier);
7283 
7284 	global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
7285 
7286 	INIT_LIST_HEAD(&global_trace.systems);
7287 	INIT_LIST_HEAD(&global_trace.events);
7288 	list_add(&global_trace.list, &ftrace_trace_arrays);
7289 
7290 	apply_trace_boot_options();
7291 
7292 	register_snapshot_cmd();
7293 
7294 	return 0;
7295 
7296 out_free_savedcmd:
7297 	free_saved_cmdlines_buffer(savedcmd);
7298 out_free_temp_buffer:
7299 	ring_buffer_free(temp_buffer);
7300 out_free_cpumask:
7301 	free_cpumask_var(global_trace.tracing_cpumask);
7302 out_free_buffer_mask:
7303 	free_cpumask_var(tracing_buffer_mask);
7304 out:
7305 	return ret;
7306 }
7307 
7308 void __init trace_init(void)
7309 {
7310 	if (tracepoint_printk) {
7311 		tracepoint_print_iter =
7312 			kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
7313 		if (WARN_ON(!tracepoint_print_iter))
7314 			tracepoint_printk = 0;
7315 	}
7316 	tracer_alloc_buffers();
7317 	trace_event_init();
7318 }
7319 
7320 __init static int clear_boot_tracer(void)
7321 {
7322 	/*
7323 	 * The default tracer at boot buffer is an init section.
7324 	 * This function is called in lateinit. If we did not
7325 	 * find the boot tracer, then clear it out, to prevent
7326 	 * later registration from accessing the buffer that is
7327 	 * about to be freed.
7328 	 */
7329 	if (!default_bootup_tracer)
7330 		return 0;
7331 
7332 	printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
7333 	       default_bootup_tracer);
7334 	default_bootup_tracer = NULL;
7335 
7336 	return 0;
7337 }
7338 
7339 fs_initcall(tracer_init_tracefs);
7340 late_initcall(clear_boot_tracer);
7341