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