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