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