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