]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - kernel/trace/trace.c
tracing: Add trace_export support for trace_marker
[mirror_ubuntu-jammy-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() &&
2653 this_cpu_read(trace_buffered_event) !=
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)) {
ff895103
SRV
3567 kfree(iter->temp);
3568 iter->temp = kmalloc(iter->ent_size, GFP_KERNEL);
3569 if (!iter->temp)
3570 return NULL;
3571 }
3572 memcpy(iter->temp, iter->ent, iter->ent_size);
3573 iter->temp_size = iter->ent_size;
3574 iter->ent = iter->temp;
3575 }
3576 entry = __find_next_entry(iter, ent_cpu, NULL, ent_ts);
3577 /* Put back the original ent_size */
3578 iter->ent_size = ent_size;
3579
3580 return entry;
dd0e545f
SR
3581}
3582
3583/* Find the next real entry, and increment the iterator to the next entry */
955b61e5 3584void *trace_find_next_entry_inc(struct trace_iterator *iter)
dd0e545f 3585{
bc21b478
SR
3586 iter->ent = __find_next_entry(iter, &iter->cpu,
3587 &iter->lost_events, &iter->ts);
dd0e545f 3588
3928a8a2 3589 if (iter->ent)
e2ac8ef5 3590 trace_iterator_increment(iter);
dd0e545f 3591
3928a8a2 3592 return iter->ent ? iter : NULL;
b3806b43 3593}
bc0c38d1 3594
e309b41d 3595static void trace_consume(struct trace_iterator *iter)
b3806b43 3596{
1c5eb448 3597 ring_buffer_consume(iter->array_buffer->buffer, iter->cpu, &iter->ts,
bc21b478 3598 &iter->lost_events);
bc0c38d1
SR
3599}
3600
e309b41d 3601static void *s_next(struct seq_file *m, void *v, loff_t *pos)
bc0c38d1
SR
3602{
3603 struct trace_iterator *iter = m->private;
bc0c38d1 3604 int i = (int)*pos;
4e3c3333 3605 void *ent;
bc0c38d1 3606
a63ce5b3
SR
3607 WARN_ON_ONCE(iter->leftover);
3608
bc0c38d1
SR
3609 (*pos)++;
3610
3611 /* can't go backwards */
3612 if (iter->idx > i)
3613 return NULL;
3614
3615 if (iter->idx < 0)
955b61e5 3616 ent = trace_find_next_entry_inc(iter);
bc0c38d1
SR
3617 else
3618 ent = iter;
3619
3620 while (ent && iter->idx < i)
955b61e5 3621 ent = trace_find_next_entry_inc(iter);
bc0c38d1
SR
3622
3623 iter->pos = *pos;
3624
bc0c38d1
SR
3625 return ent;
3626}
3627
955b61e5 3628void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2f26ebd5 3629{
2f26ebd5
SR
3630 struct ring_buffer_iter *buf_iter;
3631 unsigned long entries = 0;
3632 u64 ts;
3633
1c5eb448 3634 per_cpu_ptr(iter->array_buffer->data, cpu)->skipped_entries = 0;
2f26ebd5 3635
6d158a81
SR
3636 buf_iter = trace_buffer_iter(iter, cpu);
3637 if (!buf_iter)
2f26ebd5
SR
3638 return;
3639
2f26ebd5
SR
3640 ring_buffer_iter_reset(buf_iter);
3641
3642 /*
3643 * We could have the case with the max latency tracers
3644 * that a reset never took place on a cpu. This is evident
3645 * by the timestamp being before the start of the buffer.
3646 */
69243720 3647 while (ring_buffer_iter_peek(buf_iter, &ts)) {
1c5eb448 3648 if (ts >= iter->array_buffer->time_start)
2f26ebd5
SR
3649 break;
3650 entries++;
bc1a72af 3651 ring_buffer_iter_advance(buf_iter);
2f26ebd5
SR
3652 }
3653
1c5eb448 3654 per_cpu_ptr(iter->array_buffer->data, cpu)->skipped_entries = entries;
2f26ebd5
SR
3655}
3656
d7350c3f 3657/*
d7350c3f
FW
3658 * The current tracer is copied to avoid a global locking
3659 * all around.
3660 */
bc0c38d1
SR
3661static void *s_start(struct seq_file *m, loff_t *pos)
3662{
3663 struct trace_iterator *iter = m->private;
2b6080f2 3664 struct trace_array *tr = iter->tr;
b04cc6b1 3665 int cpu_file = iter->cpu_file;
bc0c38d1
SR
3666 void *p = NULL;
3667 loff_t l = 0;
3928a8a2 3668 int cpu;
bc0c38d1 3669
2fd196ec
HT
3670 /*
3671 * copy the tracer to avoid using a global lock all around.
3672 * iter->trace is a copy of current_trace, the pointer to the
3673 * name may be used instead of a strcmp(), as iter->trace->name
3674 * will point to the same string as current_trace->name.
3675 */
bc0c38d1 3676 mutex_lock(&trace_types_lock);
2b6080f2
SR
3677 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
3678 *iter->trace = *tr->current_trace;
d7350c3f 3679 mutex_unlock(&trace_types_lock);
bc0c38d1 3680
12883efb 3681#ifdef CONFIG_TRACER_MAX_TRACE
debdd57f
HT
3682 if (iter->snapshot && iter->trace->use_max_tr)
3683 return ERR_PTR(-EBUSY);
12883efb 3684#endif
debdd57f
HT
3685
3686 if (!iter->snapshot)
d914ba37 3687 atomic_inc(&trace_record_taskinfo_disabled);
bc0c38d1 3688
bc0c38d1
SR
3689 if (*pos != iter->pos) {
3690 iter->ent = NULL;
3691 iter->cpu = 0;
3692 iter->idx = -1;
3693
ae3b5093 3694 if (cpu_file == RING_BUFFER_ALL_CPUS) {
b04cc6b1 3695 for_each_tracing_cpu(cpu)
2f26ebd5 3696 tracing_iter_reset(iter, cpu);
b04cc6b1 3697 } else
2f26ebd5 3698 tracing_iter_reset(iter, cpu_file);
bc0c38d1 3699
ac91d854 3700 iter->leftover = 0;
bc0c38d1
SR
3701 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
3702 ;
3703
3704 } else {
a63ce5b3
SR
3705 /*
3706 * If we overflowed the seq_file before, then we want
3707 * to just reuse the trace_seq buffer again.
3708 */
3709 if (iter->leftover)
3710 p = iter;
3711 else {
3712 l = *pos - 1;
3713 p = s_next(m, p, &l);
3714 }
bc0c38d1
SR
3715 }
3716
4f535968 3717 trace_event_read_lock();
7e53bd42 3718 trace_access_lock(cpu_file);
bc0c38d1
SR
3719 return p;
3720}
3721
3722static void s_stop(struct seq_file *m, void *p)
3723{
7e53bd42
LJ
3724 struct trace_iterator *iter = m->private;
3725
12883efb 3726#ifdef CONFIG_TRACER_MAX_TRACE
debdd57f
HT
3727 if (iter->snapshot && iter->trace->use_max_tr)
3728 return;
12883efb 3729#endif
debdd57f
HT
3730
3731 if (!iter->snapshot)
d914ba37 3732 atomic_dec(&trace_record_taskinfo_disabled);
12883efb 3733
7e53bd42 3734 trace_access_unlock(iter->cpu_file);
4f535968 3735 trace_event_read_unlock();
bc0c38d1
SR
3736}
3737
ecffc8a8 3738static void
1c5eb448 3739get_total_entries_cpu(struct array_buffer *buf, unsigned long *total,
ecffc8a8
DA
3740 unsigned long *entries, int cpu)
3741{
3742 unsigned long count;
3743
3744 count = ring_buffer_entries_cpu(buf->buffer, cpu);
3745 /*
3746 * If this buffer has skipped entries, then we hold all
3747 * entries for the trace and we need to ignore the
3748 * ones before the time stamp.
3749 */
3750 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
3751 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
3752 /* total is the same as the entries */
3753 *total = count;
3754 } else
3755 *total = count +
3756 ring_buffer_overrun_cpu(buf->buffer, cpu);
3757 *entries = count;
3758}
3759
39eaf7ef 3760static void
1c5eb448 3761get_total_entries(struct array_buffer *buf,
12883efb 3762 unsigned long *total, unsigned long *entries)
39eaf7ef 3763{
ecffc8a8 3764 unsigned long t, e;
39eaf7ef
SR
3765 int cpu;
3766
3767 *total = 0;
3768 *entries = 0;
3769
3770 for_each_tracing_cpu(cpu) {
ecffc8a8
DA
3771 get_total_entries_cpu(buf, &t, &e, cpu);
3772 *total += t;
3773 *entries += e;
39eaf7ef
SR
3774 }
3775}
3776
ecffc8a8
DA
3777unsigned long trace_total_entries_cpu(struct trace_array *tr, int cpu)
3778{
3779 unsigned long total, entries;
3780
3781 if (!tr)
3782 tr = &global_trace;
3783
1c5eb448 3784 get_total_entries_cpu(&tr->array_buffer, &total, &entries, cpu);
ecffc8a8
DA
3785
3786 return entries;
3787}
3788
3789unsigned long trace_total_entries(struct trace_array *tr)
3790{
3791 unsigned long total, entries;
3792
3793 if (!tr)
3794 tr = &global_trace;
3795
1c5eb448 3796 get_total_entries(&tr->array_buffer, &total, &entries);
ecffc8a8
DA
3797
3798 return entries;
3799}
3800
e309b41d 3801static void print_lat_help_header(struct seq_file *m)
bc0c38d1 3802{
d79ac28f
RV
3803 seq_puts(m, "# _------=> CPU# \n"
3804 "# / _-----=> irqs-off \n"
3805 "# | / _----=> need-resched \n"
3806 "# || / _---=> hardirq/softirq \n"
3807 "# ||| / _--=> preempt-depth \n"
3808 "# |||| / delay \n"
3809 "# cmd pid ||||| time | caller \n"
3810 "# \\ / ||||| \\ | / \n");
bc0c38d1
SR
3811}
3812
1c5eb448 3813static void print_event_info(struct array_buffer *buf, struct seq_file *m)
bc0c38d1 3814{
39eaf7ef
SR
3815 unsigned long total;
3816 unsigned long entries;
3817
12883efb 3818 get_total_entries(buf, &total, &entries);
39eaf7ef
SR
3819 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n",
3820 entries, total, num_online_cpus());
3821 seq_puts(m, "#\n");
3822}
3823
1c5eb448 3824static void print_func_help_header(struct array_buffer *buf, struct seq_file *m,
441dae8f 3825 unsigned int flags)
39eaf7ef 3826{
441dae8f
JF
3827 bool tgid = flags & TRACE_ITER_RECORD_TGID;
3828
12883efb 3829 print_event_info(buf, m);
441dae8f 3830
f8494fa3
JFG
3831 seq_printf(m, "# TASK-PID %s CPU# TIMESTAMP FUNCTION\n", tgid ? "TGID " : "");
3832 seq_printf(m, "# | | %s | | |\n", tgid ? " | " : "");
bc0c38d1
SR
3833}
3834
1c5eb448 3835static void print_func_help_header_irq(struct array_buffer *buf, struct seq_file *m,
441dae8f 3836 unsigned int flags)
77271ce4 3837{
441dae8f 3838 bool tgid = flags & TRACE_ITER_RECORD_TGID;
0f5e5a3a
RV
3839 const char *space = " ";
3840 int prec = tgid ? 10 : 2;
b11fb737 3841
9e738215
QP
3842 print_event_info(buf, m);
3843
0f5e5a3a
RV
3844 seq_printf(m, "# %.*s _-----=> irqs-off\n", prec, space);
3845 seq_printf(m, "# %.*s / _----=> need-resched\n", prec, space);
3846 seq_printf(m, "# %.*s| / _---=> hardirq/softirq\n", prec, space);
3847 seq_printf(m, "# %.*s|| / _--=> preempt-depth\n", prec, space);
3848 seq_printf(m, "# %.*s||| / delay\n", prec, space);
3849 seq_printf(m, "# TASK-PID %.*sCPU# |||| TIMESTAMP FUNCTION\n", prec, " TGID ");
3850 seq_printf(m, "# | | %.*s | |||| | |\n", prec, " | ");
77271ce4 3851}
bc0c38d1 3852
62b915f1 3853void
bc0c38d1
SR
3854print_trace_header(struct seq_file *m, struct trace_iterator *iter)
3855{
983f938a 3856 unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
1c5eb448 3857 struct array_buffer *buf = iter->array_buffer;
12883efb 3858 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2b6080f2 3859 struct tracer *type = iter->trace;
39eaf7ef
SR
3860 unsigned long entries;
3861 unsigned long total;
bc0c38d1
SR
3862 const char *name = "preemption";
3863
d840f718 3864 name = type->name;
bc0c38d1 3865
12883efb 3866 get_total_entries(buf, &total, &entries);
bc0c38d1 3867
888b55dc 3868 seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
bc0c38d1 3869 name, UTS_RELEASE);
888b55dc 3870 seq_puts(m, "# -----------------------------------"
bc0c38d1 3871 "---------------------------------\n");
888b55dc 3872 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
bc0c38d1 3873 " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
57f50be1 3874 nsecs_to_usecs(data->saved_latency),
bc0c38d1 3875 entries,
4c11d7ae 3876 total,
12883efb 3877 buf->cpu,
bc0c38d1
SR
3878#if defined(CONFIG_PREEMPT_NONE)
3879 "server",
3880#elif defined(CONFIG_PREEMPT_VOLUNTARY)
3881 "desktop",
b5c21b45 3882#elif defined(CONFIG_PREEMPT)
bc0c38d1 3883 "preempt",
9c34fc4b
SAS
3884#elif defined(CONFIG_PREEMPT_RT)
3885 "preempt_rt",
bc0c38d1
SR
3886#else
3887 "unknown",
3888#endif
3889 /* These are reserved for later use */
3890 0, 0, 0, 0);
3891#ifdef CONFIG_SMP
3892 seq_printf(m, " #P:%d)\n", num_online_cpus());
3893#else
3894 seq_puts(m, ")\n");
3895#endif
888b55dc
KM
3896 seq_puts(m, "# -----------------\n");
3897 seq_printf(m, "# | task: %.16s-%d "
bc0c38d1 3898 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
d20b92ab
EB
3899 data->comm, data->pid,
3900 from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
bc0c38d1 3901 data->policy, data->rt_priority);
888b55dc 3902 seq_puts(m, "# -----------------\n");
bc0c38d1
SR
3903
3904 if (data->critical_start) {
888b55dc 3905 seq_puts(m, "# => started at: ");
214023c3
SR
3906 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
3907 trace_print_seq(m, &iter->seq);
888b55dc 3908 seq_puts(m, "\n# => ended at: ");
214023c3
SR
3909 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
3910 trace_print_seq(m, &iter->seq);
8248ac05 3911 seq_puts(m, "\n#\n");
bc0c38d1
SR
3912 }
3913
888b55dc 3914 seq_puts(m, "#\n");
bc0c38d1
SR
3915}
3916
a309720c
SR
3917static void test_cpu_buff_start(struct trace_iterator *iter)
3918{
3919 struct trace_seq *s = &iter->seq;
983f938a 3920 struct trace_array *tr = iter->tr;
a309720c 3921
983f938a 3922 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
12ef7d44
SR
3923 return;
3924
3925 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
3926 return;
3927
4dbbe2d8
MK
3928 if (cpumask_available(iter->started) &&
3929 cpumask_test_cpu(iter->cpu, iter->started))
a309720c
SR
3930 return;
3931
1c5eb448 3932 if (per_cpu_ptr(iter->array_buffer->data, iter->cpu)->skipped_entries)
2f26ebd5
SR
3933 return;
3934
4dbbe2d8 3935 if (cpumask_available(iter->started))
919cd979 3936 cpumask_set_cpu(iter->cpu, iter->started);
b0dfa978
FW
3937
3938 /* Don't print started cpu buffer for the first entry of the trace */
3939 if (iter->idx > 1)
3940 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
3941 iter->cpu);
a309720c
SR
3942}
3943
2c4f035f 3944static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
bc0c38d1 3945{
983f938a 3946 struct trace_array *tr = iter->tr;
214023c3 3947 struct trace_seq *s = &iter->seq;
983f938a 3948 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
4e3c3333 3949 struct trace_entry *entry;
f633cef0 3950 struct trace_event *event;
bc0c38d1 3951
4e3c3333 3952 entry = iter->ent;
dd0e545f 3953
a309720c
SR
3954 test_cpu_buff_start(iter);
3955
c4a8e8be 3956 event = ftrace_find_event(entry->type);
bc0c38d1 3957
983f938a 3958 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
3959 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
3960 trace_print_lat_context(iter);
3961 else
3962 trace_print_context(iter);
c4a8e8be 3963 }
bc0c38d1 3964
19a7fe20
SRRH
3965 if (trace_seq_has_overflowed(s))
3966 return TRACE_TYPE_PARTIAL_LINE;
3967
268ccda0 3968 if (event)
a9a57763 3969 return event->funcs->trace(iter, sym_flags, event);
d9793bd8 3970
19a7fe20 3971 trace_seq_printf(s, "Unknown type %d\n", entry->type);
02b67518 3972
19a7fe20 3973 return trace_handle_return(s);
bc0c38d1
SR
3974}
3975
2c4f035f 3976static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
f9896bf3 3977{
983f938a 3978 struct trace_array *tr = iter->tr;
f9896bf3
IM
3979 struct trace_seq *s = &iter->seq;
3980 struct trace_entry *entry;
f633cef0 3981 struct trace_event *event;
f9896bf3
IM
3982
3983 entry = iter->ent;
dd0e545f 3984
983f938a 3985 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
19a7fe20
SRRH
3986 trace_seq_printf(s, "%d %d %llu ",
3987 entry->pid, iter->cpu, iter->ts);
3988
3989 if (trace_seq_has_overflowed(s))
3990 return TRACE_TYPE_PARTIAL_LINE;
f9896bf3 3991
f633cef0 3992 event = ftrace_find_event(entry->type);
268ccda0 3993 if (event)
a9a57763 3994 return event->funcs->raw(iter, 0, event);
d9793bd8 3995
19a7fe20 3996 trace_seq_printf(s, "%d ?\n", entry->type);
777e208d 3997
19a7fe20 3998 return trace_handle_return(s);
f9896bf3
IM
3999}
4000
2c4f035f 4001static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
5e3ca0ec 4002{
983f938a 4003 struct trace_array *tr = iter->tr;
5e3ca0ec
IM
4004 struct trace_seq *s = &iter->seq;
4005 unsigned char newline = '\n';
4006 struct trace_entry *entry;
f633cef0 4007 struct trace_event *event;
5e3ca0ec
IM
4008
4009 entry = iter->ent;
dd0e545f 4010
983f938a 4011 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
4012 SEQ_PUT_HEX_FIELD(s, entry->pid);
4013 SEQ_PUT_HEX_FIELD(s, iter->cpu);
4014 SEQ_PUT_HEX_FIELD(s, iter->ts);
4015 if (trace_seq_has_overflowed(s))
4016 return TRACE_TYPE_PARTIAL_LINE;
c4a8e8be 4017 }
5e3ca0ec 4018
f633cef0 4019 event = ftrace_find_event(entry->type);
268ccda0 4020 if (event) {
a9a57763 4021 enum print_line_t ret = event->funcs->hex(iter, 0, event);
d9793bd8
ACM
4022 if (ret != TRACE_TYPE_HANDLED)
4023 return ret;
4024 }
7104f300 4025
19a7fe20 4026 SEQ_PUT_FIELD(s, newline);
5e3ca0ec 4027
19a7fe20 4028 return trace_handle_return(s);
5e3ca0ec
IM
4029}
4030
2c4f035f 4031static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
cb0f12aa 4032{
983f938a 4033 struct trace_array *tr = iter->tr;
cb0f12aa
IM
4034 struct trace_seq *s = &iter->seq;
4035 struct trace_entry *entry;
f633cef0 4036 struct trace_event *event;
cb0f12aa
IM
4037
4038 entry = iter->ent;
dd0e545f 4039
983f938a 4040 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
4041 SEQ_PUT_FIELD(s, entry->pid);
4042 SEQ_PUT_FIELD(s, iter->cpu);
4043 SEQ_PUT_FIELD(s, iter->ts);
4044 if (trace_seq_has_overflowed(s))
4045 return TRACE_TYPE_PARTIAL_LINE;
c4a8e8be 4046 }
cb0f12aa 4047
f633cef0 4048 event = ftrace_find_event(entry->type);
a9a57763
SR
4049 return event ? event->funcs->binary(iter, 0, event) :
4050 TRACE_TYPE_HANDLED;
cb0f12aa
IM
4051}
4052
62b915f1 4053int trace_empty(struct trace_iterator *iter)
bc0c38d1 4054{
6d158a81 4055 struct ring_buffer_iter *buf_iter;
bc0c38d1
SR
4056 int cpu;
4057
9aba60fe 4058 /* If we are looking at one CPU buffer, only check that one */
ae3b5093 4059 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
9aba60fe 4060 cpu = iter->cpu_file;
6d158a81
SR
4061 buf_iter = trace_buffer_iter(iter, cpu);
4062 if (buf_iter) {
4063 if (!ring_buffer_iter_empty(buf_iter))
9aba60fe
SR
4064 return 0;
4065 } else {
1c5eb448 4066 if (!ring_buffer_empty_cpu(iter->array_buffer->buffer, cpu))
9aba60fe
SR
4067 return 0;
4068 }
4069 return 1;
4070 }
4071
ab46428c 4072 for_each_tracing_cpu(cpu) {
6d158a81
SR
4073 buf_iter = trace_buffer_iter(iter, cpu);
4074 if (buf_iter) {
4075 if (!ring_buffer_iter_empty(buf_iter))
d769041f
SR
4076 return 0;
4077 } else {
1c5eb448 4078 if (!ring_buffer_empty_cpu(iter->array_buffer->buffer, cpu))
d769041f
SR
4079 return 0;
4080 }
bc0c38d1 4081 }
d769041f 4082
797d3712 4083 return 1;
bc0c38d1
SR
4084}
4085
4f535968 4086/* Called with trace_event_read_lock() held. */
955b61e5 4087enum print_line_t print_trace_line(struct trace_iterator *iter)
f9896bf3 4088{
983f938a
SRRH
4089 struct trace_array *tr = iter->tr;
4090 unsigned long trace_flags = tr->trace_flags;
2c4f035f
FW
4091 enum print_line_t ret;
4092
19a7fe20 4093 if (iter->lost_events) {
c9b7a4a7
SRV
4094 if (iter->lost_events == (unsigned long)-1)
4095 trace_seq_printf(&iter->seq, "CPU:%d [LOST EVENTS]\n",
4096 iter->cpu);
4097 else
4098 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
4099 iter->cpu, iter->lost_events);
19a7fe20
SRRH
4100 if (trace_seq_has_overflowed(&iter->seq))
4101 return TRACE_TYPE_PARTIAL_LINE;
4102 }
bc21b478 4103
2c4f035f
FW
4104 if (iter->trace && iter->trace->print_line) {
4105 ret = iter->trace->print_line(iter);
4106 if (ret != TRACE_TYPE_UNHANDLED)
4107 return ret;
4108 }
72829bc3 4109
09ae7234
SRRH
4110 if (iter->ent->type == TRACE_BPUTS &&
4111 trace_flags & TRACE_ITER_PRINTK &&
4112 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
4113 return trace_print_bputs_msg_only(iter);
4114
48ead020
FW
4115 if (iter->ent->type == TRACE_BPRINT &&
4116 trace_flags & TRACE_ITER_PRINTK &&
4117 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
5ef841f6 4118 return trace_print_bprintk_msg_only(iter);
48ead020 4119
66896a85
FW
4120 if (iter->ent->type == TRACE_PRINT &&
4121 trace_flags & TRACE_ITER_PRINTK &&
4122 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
5ef841f6 4123 return trace_print_printk_msg_only(iter);
66896a85 4124
cb0f12aa
IM
4125 if (trace_flags & TRACE_ITER_BIN)
4126 return print_bin_fmt(iter);
4127
5e3ca0ec
IM
4128 if (trace_flags & TRACE_ITER_HEX)
4129 return print_hex_fmt(iter);
4130
f9896bf3
IM
4131 if (trace_flags & TRACE_ITER_RAW)
4132 return print_raw_fmt(iter);
4133
f9896bf3
IM
4134 return print_trace_fmt(iter);
4135}
4136
7e9a49ef
JO
4137void trace_latency_header(struct seq_file *m)
4138{
4139 struct trace_iterator *iter = m->private;
983f938a 4140 struct trace_array *tr = iter->tr;
7e9a49ef
JO
4141
4142 /* print nothing if the buffers are empty */
4143 if (trace_empty(iter))
4144 return;
4145
4146 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
4147 print_trace_header(m, iter);
4148
983f938a 4149 if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
7e9a49ef
JO
4150 print_lat_help_header(m);
4151}
4152
62b915f1
JO
4153void trace_default_header(struct seq_file *m)
4154{
4155 struct trace_iterator *iter = m->private;
983f938a
SRRH
4156 struct trace_array *tr = iter->tr;
4157 unsigned long trace_flags = tr->trace_flags;
62b915f1 4158
f56e7f8e
JO
4159 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
4160 return;
4161
62b915f1
JO
4162 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
4163 /* print nothing if the buffers are empty */
4164 if (trace_empty(iter))
4165 return;
4166 print_trace_header(m, iter);
4167 if (!(trace_flags & TRACE_ITER_VERBOSE))
4168 print_lat_help_header(m);
4169 } else {
77271ce4
SR
4170 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
4171 if (trace_flags & TRACE_ITER_IRQ_INFO)
1c5eb448 4172 print_func_help_header_irq(iter->array_buffer,
441dae8f 4173 m, trace_flags);
77271ce4 4174 else
1c5eb448 4175 print_func_help_header(iter->array_buffer, m,
441dae8f 4176 trace_flags);
77271ce4 4177 }
62b915f1
JO
4178 }
4179}
4180
e0a413f6
SR
4181static void test_ftrace_alive(struct seq_file *m)
4182{
4183 if (!ftrace_is_dead())
4184 return;
d79ac28f
RV
4185 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
4186 "# MAY BE MISSING FUNCTION EVENTS\n");
e0a413f6
SR
4187}
4188
d8741e2e 4189#ifdef CONFIG_TRACER_MAX_TRACE
f1affcaa 4190static void show_snapshot_main_help(struct seq_file *m)
d8741e2e 4191{
d79ac28f
RV
4192 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
4193 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
4194 "# Takes a snapshot of the main buffer.\n"
4195 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
4196 "# (Doesn't have to be '2' works with any number that\n"
4197 "# is not a '0' or '1')\n");
d8741e2e 4198}
f1affcaa
SRRH
4199
4200static void show_snapshot_percpu_help(struct seq_file *m)
4201{
fa6f0cc7 4202 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
f1affcaa 4203#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
d79ac28f
RV
4204 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
4205 "# Takes a snapshot of the main buffer for this cpu.\n");
f1affcaa 4206#else
d79ac28f
RV
4207 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
4208 "# Must use main snapshot file to allocate.\n");
f1affcaa 4209#endif
d79ac28f
RV
4210 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
4211 "# (Doesn't have to be '2' works with any number that\n"
4212 "# is not a '0' or '1')\n");
f1affcaa
SRRH
4213}
4214
d8741e2e
SRRH
4215static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
4216{
45ad21ca 4217 if (iter->tr->allocated_snapshot)
fa6f0cc7 4218 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
d8741e2e 4219 else
fa6f0cc7 4220 seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
d8741e2e 4221
fa6f0cc7 4222 seq_puts(m, "# Snapshot commands:\n");
f1affcaa
SRRH
4223 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
4224 show_snapshot_main_help(m);
4225 else
4226 show_snapshot_percpu_help(m);
d8741e2e
SRRH
4227}
4228#else
4229/* Should never be called */
4230static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
4231#endif
4232
bc0c38d1
SR
4233static int s_show(struct seq_file *m, void *v)
4234{
4235 struct trace_iterator *iter = v;
a63ce5b3 4236 int ret;
bc0c38d1
SR
4237
4238 if (iter->ent == NULL) {
4239 if (iter->tr) {
4240 seq_printf(m, "# tracer: %s\n", iter->trace->name);
4241 seq_puts(m, "#\n");
e0a413f6 4242 test_ftrace_alive(m);
bc0c38d1 4243 }
d8741e2e
SRRH
4244 if (iter->snapshot && trace_empty(iter))
4245 print_snapshot_help(m, iter);
4246 else if (iter->trace && iter->trace->print_header)
8bba1bf5 4247 iter->trace->print_header(m);
62b915f1
JO
4248 else
4249 trace_default_header(m);
4250
a63ce5b3
SR
4251 } else if (iter->leftover) {
4252 /*
4253 * If we filled the seq_file buffer earlier, we
4254 * want to just show it now.
4255 */
4256 ret = trace_print_seq(m, &iter->seq);
4257
4258 /* ret should this time be zero, but you never know */
4259 iter->leftover = ret;
4260
bc0c38d1 4261 } else {
f9896bf3 4262 print_trace_line(iter);
a63ce5b3
SR
4263 ret = trace_print_seq(m, &iter->seq);
4264 /*
4265 * If we overflow the seq_file buffer, then it will
4266 * ask us for this data again at start up.
4267 * Use that instead.
4268 * ret is 0 if seq_file write succeeded.
4269 * -1 otherwise.
4270 */
4271 iter->leftover = ret;
bc0c38d1
SR
4272 }
4273
4274 return 0;
4275}
4276
649e9c70
ON
4277/*
4278 * Should be used after trace_array_get(), trace_types_lock
4279 * ensures that i_cdev was already initialized.
4280 */
4281static inline int tracing_get_cpu(struct inode *inode)
4282{
4283 if (inode->i_cdev) /* See trace_create_cpu_file() */
4284 return (long)inode->i_cdev - 1;
4285 return RING_BUFFER_ALL_CPUS;
4286}
4287
88e9d34c 4288static const struct seq_operations tracer_seq_ops = {
4bf39a94
IM
4289 .start = s_start,
4290 .next = s_next,
4291 .stop = s_stop,
4292 .show = s_show,
bc0c38d1
SR
4293};
4294
e309b41d 4295static struct trace_iterator *
6484c71c 4296__tracing_open(struct inode *inode, struct file *file, bool snapshot)
bc0c38d1 4297{
6484c71c 4298 struct trace_array *tr = inode->i_private;
bc0c38d1 4299 struct trace_iterator *iter;
50e18b94 4300 int cpu;
bc0c38d1 4301
85a2f9b4
SR
4302 if (tracing_disabled)
4303 return ERR_PTR(-ENODEV);
60a11774 4304
50e18b94 4305 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
85a2f9b4
SR
4306 if (!iter)
4307 return ERR_PTR(-ENOMEM);
bc0c38d1 4308
72917235 4309 iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
6d158a81 4310 GFP_KERNEL);
93574fcc
DC
4311 if (!iter->buffer_iter)
4312 goto release;
4313
ff895103
SRV
4314 /*
4315 * trace_find_next_entry() may need to save off iter->ent.
4316 * It will place it into the iter->temp buffer. As most
4317 * events are less than 128, allocate a buffer of that size.
4318 * If one is greater, then trace_find_next_entry() will
4319 * allocate a new buffer to adjust for the bigger iter->ent.
4320 * It's not critical if it fails to get allocated here.
4321 */
4322 iter->temp = kmalloc(128, GFP_KERNEL);
4323 if (iter->temp)
4324 iter->temp_size = 128;
4325
d7350c3f
FW
4326 /*
4327 * We make a copy of the current tracer to avoid concurrent
4328 * changes on it while we are reading.
4329 */
bc0c38d1 4330 mutex_lock(&trace_types_lock);
d7350c3f 4331 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
85a2f9b4 4332 if (!iter->trace)
d7350c3f 4333 goto fail;
85a2f9b4 4334
2b6080f2 4335 *iter->trace = *tr->current_trace;
d7350c3f 4336
79f55997 4337 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
b0dfa978
FW
4338 goto fail;
4339
12883efb
SRRH
4340 iter->tr = tr;
4341
4342#ifdef CONFIG_TRACER_MAX_TRACE
2b6080f2
SR
4343 /* Currently only the top directory has a snapshot */
4344 if (tr->current_trace->print_max || snapshot)
1c5eb448 4345 iter->array_buffer = &tr->max_buffer;
bc0c38d1 4346 else
12883efb 4347#endif
1c5eb448 4348 iter->array_buffer = &tr->array_buffer;
debdd57f 4349 iter->snapshot = snapshot;
bc0c38d1 4350 iter->pos = -1;
6484c71c 4351 iter->cpu_file = tracing_get_cpu(inode);
d7350c3f 4352 mutex_init(&iter->mutex);
bc0c38d1 4353
8bba1bf5 4354 /* Notify the tracer early; before we stop tracing. */
b3f7a6cd 4355 if (iter->trace->open)
a93751ca 4356 iter->trace->open(iter);
8bba1bf5 4357
12ef7d44 4358 /* Annotate start of buffers if we had overruns */
1c5eb448 4359 if (ring_buffer_overruns(iter->array_buffer->buffer))
12ef7d44
SR
4360 iter->iter_flags |= TRACE_FILE_ANNOTATE;
4361
8be0709f 4362 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
58e8eedf 4363 if (trace_clocks[tr->clock_id].in_ns)
8be0709f
DS
4364 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4365
06e0a548
SRV
4366 /*
4367 * If pause-on-trace is enabled, then stop the trace while
4368 * dumping, unless this is the "snapshot" file
4369 */
4370 if (!iter->snapshot && (tr->trace_flags & TRACE_ITER_PAUSE_ON_TRACE))
2b6080f2 4371 tracing_stop_tr(tr);
2f26ebd5 4372
ae3b5093 4373 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
b04cc6b1 4374 for_each_tracing_cpu(cpu) {
b04cc6b1 4375 iter->buffer_iter[cpu] =
1c5eb448 4376 ring_buffer_read_prepare(iter->array_buffer->buffer,
31b265b3 4377 cpu, GFP_KERNEL);
72c9ddfd
DM
4378 }
4379 ring_buffer_read_prepare_sync();
4380 for_each_tracing_cpu(cpu) {
4381 ring_buffer_read_start(iter->buffer_iter[cpu]);
2f26ebd5 4382 tracing_iter_reset(iter, cpu);
b04cc6b1
FW
4383 }
4384 } else {
4385 cpu = iter->cpu_file;
3928a8a2 4386 iter->buffer_iter[cpu] =
1c5eb448 4387 ring_buffer_read_prepare(iter->array_buffer->buffer,
31b265b3 4388 cpu, GFP_KERNEL);
72c9ddfd
DM
4389 ring_buffer_read_prepare_sync();
4390 ring_buffer_read_start(iter->buffer_iter[cpu]);
2f26ebd5 4391 tracing_iter_reset(iter, cpu);
3928a8a2
SR
4392 }
4393
bc0c38d1
SR
4394 mutex_unlock(&trace_types_lock);
4395
bc0c38d1 4396 return iter;
3928a8a2 4397
d7350c3f 4398 fail:
3928a8a2 4399 mutex_unlock(&trace_types_lock);
d7350c3f 4400 kfree(iter->trace);
ff895103 4401 kfree(iter->temp);
6d158a81 4402 kfree(iter->buffer_iter);
93574fcc 4403release:
50e18b94
JO
4404 seq_release_private(inode, file);
4405 return ERR_PTR(-ENOMEM);
bc0c38d1
SR
4406}
4407
4408int tracing_open_generic(struct inode *inode, struct file *filp)
4409{
8530dec6
SRV
4410 int ret;
4411
4412 ret = tracing_check_open_get_tr(NULL);
4413 if (ret)
4414 return ret;
60a11774 4415
bc0c38d1
SR
4416 filp->private_data = inode->i_private;
4417 return 0;
4418}
4419
2e86421d
GB
4420bool tracing_is_disabled(void)
4421{
4422 return (tracing_disabled) ? true: false;
4423}
4424
7b85af63
SRRH
4425/*
4426 * Open and update trace_array ref count.
4427 * Must have the current trace_array passed to it.
4428 */
aa07d71f 4429int tracing_open_generic_tr(struct inode *inode, struct file *filp)
7b85af63
SRRH
4430{
4431 struct trace_array *tr = inode->i_private;
8530dec6 4432 int ret;
7b85af63 4433
8530dec6
SRV
4434 ret = tracing_check_open_get_tr(tr);
4435 if (ret)
4436 return ret;
7b85af63
SRRH
4437
4438 filp->private_data = inode->i_private;
4439
4440 return 0;
7b85af63
SRRH
4441}
4442
4fd27358 4443static int tracing_release(struct inode *inode, struct file *file)
bc0c38d1 4444{
6484c71c 4445 struct trace_array *tr = inode->i_private;
907f2784 4446 struct seq_file *m = file->private_data;
4acd4d00 4447 struct trace_iterator *iter;
3928a8a2 4448 int cpu;
bc0c38d1 4449
ff451961 4450 if (!(file->f_mode & FMODE_READ)) {
6484c71c 4451 trace_array_put(tr);
4acd4d00 4452 return 0;
ff451961 4453 }
4acd4d00 4454
6484c71c 4455 /* Writes do not use seq_file */
4acd4d00 4456 iter = m->private;
bc0c38d1 4457 mutex_lock(&trace_types_lock);
a695cb58 4458
3928a8a2
SR
4459 for_each_tracing_cpu(cpu) {
4460 if (iter->buffer_iter[cpu])
4461 ring_buffer_read_finish(iter->buffer_iter[cpu]);
4462 }
4463
bc0c38d1
SR
4464 if (iter->trace && iter->trace->close)
4465 iter->trace->close(iter);
4466
06e0a548 4467 if (!iter->snapshot && tr->stop_count)
debdd57f 4468 /* reenable tracing if it was previously enabled */
2b6080f2 4469 tracing_start_tr(tr);
f77d09a3
AL
4470
4471 __trace_array_put(tr);
4472
bc0c38d1
SR
4473 mutex_unlock(&trace_types_lock);
4474
d7350c3f 4475 mutex_destroy(&iter->mutex);
b0dfa978 4476 free_cpumask_var(iter->started);
ff895103 4477 kfree(iter->temp);
d7350c3f 4478 kfree(iter->trace);
6d158a81 4479 kfree(iter->buffer_iter);
50e18b94 4480 seq_release_private(inode, file);
ff451961 4481
bc0c38d1
SR
4482 return 0;
4483}
4484
7b85af63
SRRH
4485static int tracing_release_generic_tr(struct inode *inode, struct file *file)
4486{
4487 struct trace_array *tr = inode->i_private;
4488
4489 trace_array_put(tr);
bc0c38d1
SR
4490 return 0;
4491}
4492
7b85af63
SRRH
4493static int tracing_single_release_tr(struct inode *inode, struct file *file)
4494{
4495 struct trace_array *tr = inode->i_private;
4496
4497 trace_array_put(tr);
4498
4499 return single_release(inode, file);
4500}
4501
bc0c38d1
SR
4502static int tracing_open(struct inode *inode, struct file *file)
4503{
6484c71c 4504 struct trace_array *tr = inode->i_private;
85a2f9b4 4505 struct trace_iterator *iter;
8530dec6 4506 int ret;
bc0c38d1 4507
8530dec6
SRV
4508 ret = tracing_check_open_get_tr(tr);
4509 if (ret)
4510 return ret;
ff451961 4511
4acd4d00 4512 /* If this file was open for write, then erase contents */
6484c71c
ON
4513 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
4514 int cpu = tracing_get_cpu(inode);
1c5eb448 4515 struct array_buffer *trace_buf = &tr->array_buffer;
8dd33bcb
BY
4516
4517#ifdef CONFIG_TRACER_MAX_TRACE
4518 if (tr->current_trace->print_max)
4519 trace_buf = &tr->max_buffer;
4520#endif
6484c71c
ON
4521
4522 if (cpu == RING_BUFFER_ALL_CPUS)
8dd33bcb 4523 tracing_reset_online_cpus(trace_buf);
4acd4d00 4524 else
a47b53e9 4525 tracing_reset_cpu(trace_buf, cpu);
4acd4d00 4526 }
bc0c38d1 4527
4acd4d00 4528 if (file->f_mode & FMODE_READ) {
6484c71c 4529 iter = __tracing_open(inode, file, false);
4acd4d00
SR
4530 if (IS_ERR(iter))
4531 ret = PTR_ERR(iter);
983f938a 4532 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4acd4d00
SR
4533 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4534 }
ff451961
SRRH
4535
4536 if (ret < 0)
4537 trace_array_put(tr);
4538
bc0c38d1
SR
4539 return ret;
4540}
4541
607e2ea1
SRRH
4542/*
4543 * Some tracers are not suitable for instance buffers.
4544 * A tracer is always available for the global array (toplevel)
4545 * or if it explicitly states that it is.
4546 */
4547static bool
4548trace_ok_for_array(struct tracer *t, struct trace_array *tr)
4549{
4550 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
4551}
4552
4553/* Find the next tracer that this trace array may use */
4554static struct tracer *
4555get_tracer_for_array(struct trace_array *tr, struct tracer *t)
4556{
4557 while (t && !trace_ok_for_array(t, tr))
4558 t = t->next;
4559
4560 return t;
4561}
4562
e309b41d 4563static void *
bc0c38d1
SR
4564t_next(struct seq_file *m, void *v, loff_t *pos)
4565{
607e2ea1 4566 struct trace_array *tr = m->private;
f129e965 4567 struct tracer *t = v;
bc0c38d1
SR
4568
4569 (*pos)++;
4570
4571 if (t)
607e2ea1 4572 t = get_tracer_for_array(tr, t->next);
bc0c38d1 4573
bc0c38d1
SR
4574 return t;
4575}
4576
4577static void *t_start(struct seq_file *m, loff_t *pos)
4578{
607e2ea1 4579 struct trace_array *tr = m->private;
f129e965 4580 struct tracer *t;
bc0c38d1
SR
4581 loff_t l = 0;
4582
4583 mutex_lock(&trace_types_lock);
607e2ea1
SRRH
4584
4585 t = get_tracer_for_array(tr, trace_types);
4586 for (; t && l < *pos; t = t_next(m, t, &l))
4587 ;
bc0c38d1
SR
4588
4589 return t;
4590}
4591
4592static void t_stop(struct seq_file *m, void *p)
4593{
4594 mutex_unlock(&trace_types_lock);
4595}
4596
4597static int t_show(struct seq_file *m, void *v)
4598{
4599 struct tracer *t = v;
4600
4601 if (!t)
4602 return 0;
4603
fa6f0cc7 4604 seq_puts(m, t->name);
bc0c38d1
SR
4605 if (t->next)
4606 seq_putc(m, ' ');
4607 else
4608 seq_putc(m, '\n');
4609
4610 return 0;
4611}
4612
88e9d34c 4613static const struct seq_operations show_traces_seq_ops = {
4bf39a94
IM
4614 .start = t_start,
4615 .next = t_next,
4616 .stop = t_stop,
4617 .show = t_show,
bc0c38d1
SR
4618};
4619
4620static int show_traces_open(struct inode *inode, struct file *file)
4621{
607e2ea1
SRRH
4622 struct trace_array *tr = inode->i_private;
4623 struct seq_file *m;
4624 int ret;
4625
8530dec6
SRV
4626 ret = tracing_check_open_get_tr(tr);
4627 if (ret)
4628 return ret;
194c2c74 4629
607e2ea1 4630 ret = seq_open(file, &show_traces_seq_ops);
194c2c74
SRV
4631 if (ret) {
4632 trace_array_put(tr);
607e2ea1 4633 return ret;
194c2c74 4634 }
607e2ea1
SRRH
4635
4636 m = file->private_data;
4637 m->private = tr;
4638
4639 return 0;
bc0c38d1
SR
4640}
4641
194c2c74
SRV
4642static int show_traces_release(struct inode *inode, struct file *file)
4643{
4644 struct trace_array *tr = inode->i_private;
4645
4646 trace_array_put(tr);
4647 return seq_release(inode, file);
4648}
4649
4acd4d00
SR
4650static ssize_t
4651tracing_write_stub(struct file *filp, const char __user *ubuf,
4652 size_t count, loff_t *ppos)
4653{
4654 return count;
4655}
4656
098c879e 4657loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
364829b1 4658{
098c879e
SRRH
4659 int ret;
4660
364829b1 4661 if (file->f_mode & FMODE_READ)
098c879e 4662 ret = seq_lseek(file, offset, whence);
364829b1 4663 else
098c879e
SRRH
4664 file->f_pos = ret = 0;
4665
4666 return ret;
364829b1
SP
4667}
4668
5e2336a0 4669static const struct file_operations tracing_fops = {
4bf39a94
IM
4670 .open = tracing_open,
4671 .read = seq_read,
4acd4d00 4672 .write = tracing_write_stub,
098c879e 4673 .llseek = tracing_lseek,
4bf39a94 4674 .release = tracing_release,
bc0c38d1
SR
4675};
4676
5e2336a0 4677static const struct file_operations show_traces_fops = {
c7078de1
IM
4678 .open = show_traces_open,
4679 .read = seq_read,
b444786f 4680 .llseek = seq_lseek,
194c2c74 4681 .release = show_traces_release,
c7078de1
IM
4682};
4683
4684static ssize_t
4685tracing_cpumask_read(struct file *filp, char __user *ubuf,
4686 size_t count, loff_t *ppos)
4687{
ccfe9e42 4688 struct trace_array *tr = file_inode(filp)->i_private;
90e406f9 4689 char *mask_str;
36dfe925 4690 int len;
c7078de1 4691
90e406f9
CD
4692 len = snprintf(NULL, 0, "%*pb\n",
4693 cpumask_pr_args(tr->tracing_cpumask)) + 1;
4694 mask_str = kmalloc(len, GFP_KERNEL);
4695 if (!mask_str)
4696 return -ENOMEM;
36dfe925 4697
90e406f9 4698 len = snprintf(mask_str, len, "%*pb\n",
1a40243b
TH
4699 cpumask_pr_args(tr->tracing_cpumask));
4700 if (len >= count) {
36dfe925
IM
4701 count = -EINVAL;
4702 goto out_err;
4703 }
90e406f9 4704 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
36dfe925
IM
4705
4706out_err:
90e406f9 4707 kfree(mask_str);
c7078de1
IM
4708
4709 return count;
4710}
4711
9d15dbbd
MH
4712int tracing_set_cpumask(struct trace_array *tr,
4713 cpumask_var_t tracing_cpumask_new)
c7078de1 4714{
9d15dbbd 4715 int cpu;
c7078de1 4716
9d15dbbd
MH
4717 if (!tr)
4718 return -EINVAL;
36dfe925 4719
a5e25883 4720 local_irq_disable();
0b9b12c1 4721 arch_spin_lock(&tr->max_lock);
ab46428c 4722 for_each_tracing_cpu(cpu) {
36dfe925
IM
4723 /*
4724 * Increase/decrease the disabled counter if we are
4725 * about to flip a bit in the cpumask:
4726 */
ccfe9e42 4727 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
9e01c1b7 4728 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
1c5eb448
SRV
4729 atomic_inc(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled);
4730 ring_buffer_record_disable_cpu(tr->array_buffer.buffer, cpu);
36dfe925 4731 }
ccfe9e42 4732 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
9e01c1b7 4733 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
1c5eb448
SRV
4734 atomic_dec(&per_cpu_ptr(tr->array_buffer.data, cpu)->disabled);
4735 ring_buffer_record_enable_cpu(tr->array_buffer.buffer, cpu);
36dfe925
IM
4736 }
4737 }
0b9b12c1 4738 arch_spin_unlock(&tr->max_lock);
a5e25883 4739 local_irq_enable();
36dfe925 4740
ccfe9e42 4741 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
9d15dbbd
MH
4742
4743 return 0;
4744}
4745
4746static ssize_t
4747tracing_cpumask_write(struct file *filp, const char __user *ubuf,
4748 size_t count, loff_t *ppos)
4749{
4750 struct trace_array *tr = file_inode(filp)->i_private;
4751 cpumask_var_t tracing_cpumask_new;
4752 int err;
4753
4754 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
4755 return -ENOMEM;
4756
4757 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
4758 if (err)
4759 goto err_free;
4760
4761 err = tracing_set_cpumask(tr, tracing_cpumask_new);
4762 if (err)
4763 goto err_free;
4764
9e01c1b7 4765 free_cpumask_var(tracing_cpumask_new);
c7078de1
IM
4766
4767 return count;
36dfe925 4768
9d15dbbd 4769err_free:
215368e8 4770 free_cpumask_var(tracing_cpumask_new);
36dfe925
IM
4771
4772 return err;
c7078de1
IM
4773}
4774
5e2336a0 4775static const struct file_operations tracing_cpumask_fops = {
ccfe9e42 4776 .open = tracing_open_generic_tr,
c7078de1
IM
4777 .read = tracing_cpumask_read,
4778 .write = tracing_cpumask_write,
ccfe9e42 4779 .release = tracing_release_generic_tr,
b444786f 4780 .llseek = generic_file_llseek,
bc0c38d1
SR
4781};
4782
fdb372ed 4783static int tracing_trace_options_show(struct seq_file *m, void *v)
bc0c38d1 4784{
d8e83d26 4785 struct tracer_opt *trace_opts;
2b6080f2 4786 struct trace_array *tr = m->private;
d8e83d26 4787 u32 tracer_flags;
d8e83d26 4788 int i;
adf9f195 4789
d8e83d26 4790 mutex_lock(&trace_types_lock);
2b6080f2
SR
4791 tracer_flags = tr->current_trace->flags->val;
4792 trace_opts = tr->current_trace->flags->opts;
d8e83d26 4793
bc0c38d1 4794 for (i = 0; trace_options[i]; i++) {
983f938a 4795 if (tr->trace_flags & (1 << i))
fdb372ed 4796 seq_printf(m, "%s\n", trace_options[i]);
bc0c38d1 4797 else
fdb372ed 4798 seq_printf(m, "no%s\n", trace_options[i]);
bc0c38d1
SR
4799 }
4800
adf9f195
FW
4801 for (i = 0; trace_opts[i].name; i++) {
4802 if (tracer_flags & trace_opts[i].bit)
fdb372ed 4803 seq_printf(m, "%s\n", trace_opts[i].name);
adf9f195 4804 else
fdb372ed 4805 seq_printf(m, "no%s\n", trace_opts[i].name);
adf9f195 4806 }
d8e83d26 4807 mutex_unlock(&trace_types_lock);
adf9f195 4808
fdb372ed 4809 return 0;
bc0c38d1 4810}
bc0c38d1 4811
8c1a49ae 4812static int __set_tracer_option(struct trace_array *tr,
8d18eaaf
LZ
4813 struct tracer_flags *tracer_flags,
4814 struct tracer_opt *opts, int neg)
4815{
d39cdd20 4816 struct tracer *trace = tracer_flags->trace;
8d18eaaf 4817 int ret;
bc0c38d1 4818
8c1a49ae 4819 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
8d18eaaf
LZ
4820 if (ret)
4821 return ret;
4822
4823 if (neg)
4824 tracer_flags->val &= ~opts->bit;
4825 else
4826 tracer_flags->val |= opts->bit;
4827 return 0;
bc0c38d1
SR
4828}
4829
adf9f195 4830/* Try to assign a tracer specific option */
8c1a49ae 4831static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
adf9f195 4832{
8c1a49ae 4833 struct tracer *trace = tr->current_trace;
7770841e 4834 struct tracer_flags *tracer_flags = trace->flags;
adf9f195 4835 struct tracer_opt *opts = NULL;
8d18eaaf 4836 int i;
adf9f195 4837
7770841e
Z
4838 for (i = 0; tracer_flags->opts[i].name; i++) {
4839 opts = &tracer_flags->opts[i];
adf9f195 4840
8d18eaaf 4841 if (strcmp(cmp, opts->name) == 0)
8c1a49ae 4842 return __set_tracer_option(tr, trace->flags, opts, neg);
adf9f195 4843 }
adf9f195 4844
8d18eaaf 4845 return -EINVAL;
adf9f195
FW
4846}
4847
613f04a0
SRRH
4848/* Some tracers require overwrite to stay enabled */
4849int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
4850{
4851 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
4852 return -1;
4853
4854 return 0;
4855}
4856
2b6080f2 4857int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
af4617bd 4858{
3a53acf1
PS
4859 if ((mask == TRACE_ITER_RECORD_TGID) ||
4860 (mask == TRACE_ITER_RECORD_CMD))
4861 lockdep_assert_held(&event_mutex);
4862
af4617bd 4863 /* do nothing if flag is already set */
983f938a 4864 if (!!(tr->trace_flags & mask) == !!enabled)
613f04a0
SRRH
4865 return 0;
4866
4867 /* Give the tracer a chance to approve the change */
2b6080f2 4868 if (tr->current_trace->flag_changed)
bf6065b5 4869 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
613f04a0 4870 return -EINVAL;
af4617bd
SR
4871
4872 if (enabled)
983f938a 4873 tr->trace_flags |= mask;
af4617bd 4874 else
983f938a 4875 tr->trace_flags &= ~mask;
e870e9a1
LZ
4876
4877 if (mask == TRACE_ITER_RECORD_CMD)
4878 trace_event_enable_cmd_record(enabled);
750912fa 4879
d914ba37
JF
4880 if (mask == TRACE_ITER_RECORD_TGID) {
4881 if (!tgid_map)
6ee40511 4882 tgid_map = kvcalloc(PID_MAX_DEFAULT + 1,
6396bb22 4883 sizeof(*tgid_map),
d914ba37
JF
4884 GFP_KERNEL);
4885 if (!tgid_map) {
4886 tr->trace_flags &= ~TRACE_ITER_RECORD_TGID;
4887 return -ENOMEM;
4888 }
4889
4890 trace_event_enable_tgid_record(enabled);
4891 }
4892
c37775d5
SR
4893 if (mask == TRACE_ITER_EVENT_FORK)
4894 trace_event_follow_fork(tr, enabled);
4895
1e10486f
NK
4896 if (mask == TRACE_ITER_FUNC_FORK)
4897 ftrace_pid_follow_fork(tr, enabled);
4898
80902822 4899 if (mask == TRACE_ITER_OVERWRITE) {
1c5eb448 4900 ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled);
80902822 4901#ifdef CONFIG_TRACER_MAX_TRACE
12883efb 4902 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
80902822
SRRH
4903#endif
4904 }
81698831 4905
b9f9108c 4906 if (mask == TRACE_ITER_PRINTK) {
81698831 4907 trace_printk_start_stop_comm(enabled);
b9f9108c
SRRH
4908 trace_printk_control(enabled);
4909 }
613f04a0
SRRH
4910
4911 return 0;
af4617bd
SR
4912}
4913
9c5b9d3d 4914int trace_set_options(struct trace_array *tr, char *option)
bc0c38d1 4915{
8d18eaaf 4916 char *cmp;
bc0c38d1 4917 int neg = 0;
591a033d 4918 int ret;
a4d1e688 4919 size_t orig_len = strlen(option);
3d739c1f 4920 int len;
bc0c38d1 4921
7bcfaf54 4922 cmp = strstrip(option);
bc0c38d1 4923
3d739c1f
SRV
4924 len = str_has_prefix(cmp, "no");
4925 if (len)
bc0c38d1 4926 neg = 1;
3d739c1f
SRV
4927
4928 cmp += len;
bc0c38d1 4929
3a53acf1 4930 mutex_lock(&event_mutex);
69d34da2
SRRH
4931 mutex_lock(&trace_types_lock);
4932
591a033d 4933 ret = match_string(trace_options, -1, cmp);
adf9f195 4934 /* If no option could be set, test the specific tracer options */
591a033d 4935 if (ret < 0)
8c1a49ae 4936 ret = set_tracer_option(tr, cmp, neg);
591a033d
YX
4937 else
4938 ret = set_tracer_flag(tr, 1 << ret, !neg);
69d34da2
SRRH
4939
4940 mutex_unlock(&trace_types_lock);
3a53acf1 4941 mutex_unlock(&event_mutex);
bc0c38d1 4942
a4d1e688
JW
4943 /*
4944 * If the first trailing whitespace is replaced with '\0' by strstrip,
4945 * turn it back into a space.
4946 */
4947 if (orig_len > strlen(option))
4948 option[strlen(option)] = ' ';
4949
7bcfaf54
SR
4950 return ret;
4951}
4952
a4d1e688
JW
4953static void __init apply_trace_boot_options(void)
4954{
4955 char *buf = trace_boot_options_buf;
4956 char *option;
4957
4958 while (true) {
4959 option = strsep(&buf, ",");
4960
4961 if (!option)
4962 break;
a4d1e688 4963
43ed3843
SRRH
4964 if (*option)
4965 trace_set_options(&global_trace, option);
a4d1e688
JW
4966
4967 /* Put back the comma to allow this to be called again */
4968 if (buf)
4969 *(buf - 1) = ',';
4970 }
4971}
4972
7bcfaf54
SR
4973static ssize_t
4974tracing_trace_options_write(struct file *filp, const char __user *ubuf,
4975 size_t cnt, loff_t *ppos)
4976{
2b6080f2
SR
4977 struct seq_file *m = filp->private_data;
4978 struct trace_array *tr = m->private;
7bcfaf54 4979 char buf[64];
613f04a0 4980 int ret;
7bcfaf54
SR
4981
4982 if (cnt >= sizeof(buf))
4983 return -EINVAL;
4984
4afe6495 4985 if (copy_from_user(buf, ubuf, cnt))
7bcfaf54
SR
4986 return -EFAULT;
4987
a8dd2176
SR
4988 buf[cnt] = 0;
4989
2b6080f2 4990 ret = trace_set_options(tr, buf);
613f04a0
SRRH
4991 if (ret < 0)
4992 return ret;
7bcfaf54 4993
cf8517cf 4994 *ppos += cnt;
bc0c38d1
SR
4995
4996 return cnt;
4997}
4998
fdb372ed
LZ
4999static int tracing_trace_options_open(struct inode *inode, struct file *file)
5000{
7b85af63 5001 struct trace_array *tr = inode->i_private;
f77d09a3 5002 int ret;
7b85af63 5003
8530dec6
SRV
5004 ret = tracing_check_open_get_tr(tr);
5005 if (ret)
5006 return ret;
7b85af63 5007
f77d09a3
AL
5008 ret = single_open(file, tracing_trace_options_show, inode->i_private);
5009 if (ret < 0)
5010 trace_array_put(tr);
5011
5012 return ret;
fdb372ed
LZ
5013}
5014
5e2336a0 5015static const struct file_operations tracing_iter_fops = {
fdb372ed
LZ
5016 .open = tracing_trace_options_open,
5017 .read = seq_read,
5018 .llseek = seq_lseek,
7b85af63 5019 .release = tracing_single_release_tr,
ee6bce52 5020 .write = tracing_trace_options_write,
bc0c38d1
SR
5021};
5022
7bd2f24c
IM
5023static const char readme_msg[] =
5024 "tracing mini-HOWTO:\n\n"
22f45649
SRRH
5025 "# echo 0 > tracing_on : quick way to disable tracing\n"
5026 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
5027 " Important files:\n"
5028 " trace\t\t\t- The static contents of the buffer\n"
5029 "\t\t\t To clear the buffer write into this file: echo > trace\n"
5030 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
5031 " current_tracer\t- function and latency tracers\n"
5032 " available_tracers\t- list of configured tracers for current_tracer\n"
a8d65579 5033 " error_log\t- error log for failed commands (that support it)\n"
22f45649
SRRH
5034 " buffer_size_kb\t- view and modify size of per cpu buffer\n"
5035 " buffer_total_size_kb - view total size of all cpu buffers\n\n"
5036 " trace_clock\t\t-change the clock used to order events\n"
5037 " local: Per cpu clock but may not be synced across CPUs\n"
5038 " global: Synced across CPUs but slows tracing down.\n"
5039 " counter: Not a clock, but just an increment\n"
5040 " uptime: Jiffy counter from time of boot\n"
5041 " perf: Same clock that perf events use\n"
5042#ifdef CONFIG_X86_64
5043 " x86-tsc: TSC cycle counter\n"
5044#endif
2c1ea60b
TZ
5045 "\n timestamp_mode\t-view the mode used to timestamp events\n"
5046 " delta: Delta difference against a buffer-wide timestamp\n"
5047 " absolute: Absolute (standalone) timestamp\n"
22f45649 5048 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
fa32e855 5049 "\n trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n"
22f45649
SRRH
5050 " tracing_cpumask\t- Limit which CPUs to trace\n"
5051 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
5052 "\t\t\t Remove sub-buffer with rmdir\n"
5053 " trace_options\t\t- Set format or modify how tracing happens\n"
b9416997 5054 "\t\t\t Disable an option by prefixing 'no' to the\n"
71485c45 5055 "\t\t\t option name\n"
939c7a4f 5056 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
22f45649
SRRH
5057#ifdef CONFIG_DYNAMIC_FTRACE
5058 "\n available_filter_functions - list of functions that can be filtered on\n"
71485c45
SRRH
5059 " set_ftrace_filter\t- echo function name in here to only trace these\n"
5060 "\t\t\t functions\n"
60f1d5e3 5061 "\t accepts: func_full_name or glob-matching-pattern\n"
71485c45
SRRH
5062 "\t modules: Can select a group via module\n"
5063 "\t Format: :mod:<module-name>\n"
5064 "\t example: echo :mod:ext3 > set_ftrace_filter\n"
5065 "\t triggers: a command to perform when function is hit\n"
5066 "\t Format: <function>:<trigger>[:count]\n"
5067 "\t trigger: traceon, traceoff\n"
5068 "\t\t enable_event:<system>:<event>\n"
5069 "\t\t disable_event:<system>:<event>\n"
22f45649 5070#ifdef CONFIG_STACKTRACE
71485c45 5071 "\t\t stacktrace\n"
22f45649
SRRH
5072#endif
5073#ifdef CONFIG_TRACER_SNAPSHOT
71485c45 5074 "\t\t snapshot\n"
22f45649 5075#endif
17a280ea
SRRH
5076 "\t\t dump\n"
5077 "\t\t cpudump\n"
71485c45
SRRH
5078 "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
5079 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
5080 "\t The first one will disable tracing every time do_fault is hit\n"
5081 "\t The second will disable tracing at most 3 times when do_trap is hit\n"
5082 "\t The first time do trap is hit and it disables tracing, the\n"
5083 "\t counter will decrement to 2. If tracing is already disabled,\n"
5084 "\t the counter will not decrement. It only decrements when the\n"
5085 "\t trigger did work\n"
5086 "\t To remove trigger without count:\n"
5087 "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
5088 "\t To remove trigger with a count:\n"
5089 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
22f45649 5090 " set_ftrace_notrace\t- echo function name in here to never trace.\n"
71485c45
SRRH
5091 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
5092 "\t modules: Can select a group via module command :mod:\n"
5093 "\t Does not accept triggers\n"
22f45649
SRRH
5094#endif /* CONFIG_DYNAMIC_FTRACE */
5095#ifdef CONFIG_FUNCTION_TRACER
71485c45
SRRH
5096 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
5097 "\t\t (function)\n"
b3b1e6ed
SRV
5098 " set_ftrace_notrace_pid\t- Write pid(s) to not function trace those pids\n"
5099 "\t\t (function)\n"
22f45649
SRRH
5100#endif
5101#ifdef CONFIG_FUNCTION_GRAPH_TRACER
5102 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
d048a8c7 5103 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
22f45649
SRRH
5104 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
5105#endif
5106#ifdef CONFIG_TRACER_SNAPSHOT
71485c45
SRRH
5107 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
5108 "\t\t\t snapshot buffer. Read the contents for more\n"
5109 "\t\t\t information\n"
22f45649 5110#endif
991821c8 5111#ifdef CONFIG_STACK_TRACER
22f45649
SRRH
5112 " stack_trace\t\t- Shows the max stack trace when active\n"
5113 " stack_max_size\t- Shows current max stack size that was traced\n"
71485c45
SRRH
5114 "\t\t\t Write into this file to reset the max size (trigger a\n"
5115 "\t\t\t new trace)\n"
22f45649 5116#ifdef CONFIG_DYNAMIC_FTRACE
71485c45
SRRH
5117 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
5118 "\t\t\t traces\n"
22f45649 5119#endif
991821c8 5120#endif /* CONFIG_STACK_TRACER */
5448d44c 5121#ifdef CONFIG_DYNAMIC_EVENTS
ca89bc07 5122 " dynamic_events\t\t- Create/append/remove/show the generic dynamic events\n"
5448d44c
MH
5123 "\t\t\t Write into this file to define/undefine new trace events.\n"
5124#endif
6b0b7551 5125#ifdef CONFIG_KPROBE_EVENTS
ca89bc07 5126 " kprobe_events\t\t- Create/append/remove/show the kernel dynamic events\n"
86425625
MH
5127 "\t\t\t Write into this file to define/undefine new trace events.\n"
5128#endif
6b0b7551 5129#ifdef CONFIG_UPROBE_EVENTS
41af3cf5 5130 " uprobe_events\t\t- Create/append/remove/show the userspace dynamic events\n"
86425625
MH
5131 "\t\t\t Write into this file to define/undefine new trace events.\n"
5132#endif
6b0b7551 5133#if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS)
86425625 5134 "\t accepts: event-definitions (one definition per line)\n"
c3ca46ef
MH
5135 "\t Format: p[:[<group>/]<event>] <place> [<args>]\n"
5136 "\t r[maxactive][:[<group>/]<event>] <place> [<args>]\n"
7bbab38d
MH
5137#ifdef CONFIG_HIST_TRIGGERS
5138 "\t s:[synthetic/]<event> <field> [<field>]\n"
5139#endif
86425625 5140 "\t -:[<group>/]<event>\n"
6b0b7551 5141#ifdef CONFIG_KPROBE_EVENTS
86425625 5142 "\t place: [<module>:]<symbol>[+<offset>]|<memaddr>\n"
35b6f55a 5143 "place (kretprobe): [<module>:]<symbol>[+<offset>]|<memaddr>\n"
86425625 5144#endif
6b0b7551 5145#ifdef CONFIG_UPROBE_EVENTS
1cc33161 5146 " place (uprobe): <path>:<offset>[(ref_ctr_offset)]\n"
86425625
MH
5147#endif
5148 "\t args: <name>=fetcharg[:type]\n"
5149 "\t fetcharg: %<register>, @<address>, @<symbol>[+|-<offset>],\n"
a1303af5 5150#ifdef CONFIG_HAVE_FUNCTION_ARG_ACCESS_API
e65f7ae7 5151 "\t $stack<index>, $stack, $retval, $comm, $arg<N>,\n"
a1303af5 5152#else
e65f7ae7 5153 "\t $stack<index>, $stack, $retval, $comm,\n"
a1303af5 5154#endif
a42e3c4d 5155 "\t +|-[u]<offset>(<fetcharg>), \\imm-value, \\\"imm-string\"\n"
60c2e0ce 5156 "\t type: s8/16/32/64, u8/16/32/64, x8/16/32/64, string, symbol,\n"
88903c46 5157 "\t b<bit-width>@<bit-offset>/<container-size>, ustring,\n"
40b53b77 5158 "\t <type>\\[<array-size>\\]\n"
7bbab38d
MH
5159#ifdef CONFIG_HIST_TRIGGERS
5160 "\t field: <stype> <name>;\n"
5161 "\t stype: u8/u16/u32/u64, s8/s16/s32/s64, pid_t,\n"
5162 "\t [unsigned] char/int/long\n"
5163#endif
86425625 5164#endif
26f25564
TZ
5165 " events/\t\t- Directory containing all trace event subsystems:\n"
5166 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
5167 " events/<system>/\t- Directory containing all trace events for <system>:\n"
71485c45
SRRH
5168 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
5169 "\t\t\t events\n"
26f25564 5170 " filter\t\t- If set, only events passing filter are traced\n"
71485c45
SRRH
5171 " events/<system>/<event>/\t- Directory containing control files for\n"
5172 "\t\t\t <event>:\n"
26f25564
TZ
5173 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
5174 " filter\t\t- If set, only events passing filter are traced\n"
5175 " trigger\t\t- If set, a command to perform when event is hit\n"
71485c45
SRRH
5176 "\t Format: <trigger>[:count][if <filter>]\n"
5177 "\t trigger: traceon, traceoff\n"
5178 "\t enable_event:<system>:<event>\n"
5179 "\t disable_event:<system>:<event>\n"
d0bad49b
TZ
5180#ifdef CONFIG_HIST_TRIGGERS
5181 "\t enable_hist:<system>:<event>\n"
5182 "\t disable_hist:<system>:<event>\n"
5183#endif
26f25564 5184#ifdef CONFIG_STACKTRACE
71485c45 5185 "\t\t stacktrace\n"
26f25564
TZ
5186#endif
5187#ifdef CONFIG_TRACER_SNAPSHOT
71485c45 5188 "\t\t snapshot\n"
7ef224d1
TZ
5189#endif
5190#ifdef CONFIG_HIST_TRIGGERS
5191 "\t\t hist (see below)\n"
26f25564 5192#endif
71485c45
SRRH
5193 "\t example: echo traceoff > events/block/block_unplug/trigger\n"
5194 "\t echo traceoff:3 > events/block/block_unplug/trigger\n"
5195 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
5196 "\t events/block/block_unplug/trigger\n"
5197 "\t The first disables tracing every time block_unplug is hit.\n"
5198 "\t The second disables tracing the first 3 times block_unplug is hit.\n"
5199 "\t The third enables the kmalloc event the first 3 times block_unplug\n"
5200 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
5201 "\t Like function triggers, the counter is only decremented if it\n"
5202 "\t enabled or disabled tracing.\n"
5203 "\t To remove a trigger without a count:\n"
5204 "\t echo '!<trigger> > <system>/<event>/trigger\n"
5205 "\t To remove a trigger with a count:\n"
5206 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
5207 "\t Filters can be ignored when removing a trigger.\n"
7ef224d1
TZ
5208#ifdef CONFIG_HIST_TRIGGERS
5209 " hist trigger\t- If set, event hits are aggregated into a hash table\n"
76a3b0c8 5210 "\t Format: hist:keys=<field1[,field2,...]>\n"
f2606835 5211 "\t [:values=<field1[,field2,...]>]\n"
e62347d2 5212 "\t [:sort=<field1[,field2,...]>]\n"
7ef224d1 5213 "\t [:size=#entries]\n"
e86ae9ba 5214 "\t [:pause][:continue][:clear]\n"
5463bfda 5215 "\t [:name=histname1]\n"
c3e49506 5216 "\t [:<handler>.<action>]\n"
7ef224d1
TZ
5217 "\t [if <filter>]\n\n"
5218 "\t When a matching event is hit, an entry is added to a hash\n"
f2606835
TZ
5219 "\t table using the key(s) and value(s) named, and the value of a\n"
5220 "\t sum called 'hitcount' is incremented. Keys and values\n"
5221 "\t correspond to fields in the event's format description. Keys\n"
69a0200c
TZ
5222 "\t can be any field, or the special string 'stacktrace'.\n"
5223 "\t Compound keys consisting of up to two fields can be specified\n"
5224 "\t by the 'keys' keyword. Values must correspond to numeric\n"
5225 "\t fields. Sort keys consisting of up to two fields can be\n"
5226 "\t specified using the 'sort' keyword. The sort direction can\n"
5227 "\t be modified by appending '.descending' or '.ascending' to a\n"
5228 "\t sort field. The 'size' parameter can be used to specify more\n"
5463bfda
TZ
5229 "\t or fewer than the default 2048 entries for the hashtable size.\n"
5230 "\t If a hist trigger is given a name using the 'name' parameter,\n"
5231 "\t its histogram data will be shared with other triggers of the\n"
5232 "\t same name, and trigger hits will update this common data.\n\n"
7ef224d1 5233 "\t Reading the 'hist' file for the event will dump the hash\n"
52a7f16d
TZ
5234 "\t table in its entirety to stdout. If there are multiple hist\n"
5235 "\t triggers attached to an event, there will be a table for each\n"
5463bfda
TZ
5236 "\t trigger in the output. The table displayed for a named\n"
5237 "\t trigger will be the same as any other instance having the\n"
5238 "\t same name. The default format used to display a given field\n"
5239 "\t can be modified by appending any of the following modifiers\n"
5240 "\t to the field name, as applicable:\n\n"
c6afad49
TZ
5241 "\t .hex display a number as a hex value\n"
5242 "\t .sym display an address as a symbol\n"
6b4827ad 5243 "\t .sym-offset display an address as a symbol and offset\n"
31696198 5244 "\t .execname display a common_pid as a program name\n"
860f9f6b
TZ
5245 "\t .syscall display a syscall id as a syscall name\n"
5246 "\t .log2 display log2 value rather than raw number\n"
5247 "\t .usecs display a common_timestamp in microseconds\n\n"
83e99914
TZ
5248 "\t The 'pause' parameter can be used to pause an existing hist\n"
5249 "\t trigger or to start a hist trigger but not log any events\n"
5250 "\t until told to do so. 'continue' can be used to start or\n"
5251 "\t restart a paused hist trigger.\n\n"
e86ae9ba
TZ
5252 "\t The 'clear' parameter will clear the contents of a running\n"
5253 "\t hist trigger and leave its current paused/active state\n"
5254 "\t unchanged.\n\n"
d0bad49b
TZ
5255 "\t The enable_hist and disable_hist triggers can be used to\n"
5256 "\t have one event conditionally start and stop another event's\n"
9e5a36a3 5257 "\t already-attached hist trigger. The syntax is analogous to\n"
c3e49506
TZ
5258 "\t the enable_event and disable_event triggers.\n\n"
5259 "\t Hist trigger handlers and actions are executed whenever a\n"
5260 "\t a histogram entry is added or updated. They take the form:\n\n"
5261 "\t <handler>.<action>\n\n"
5262 "\t The available handlers are:\n\n"
5263 "\t onmatch(matching.event) - invoke on addition or update\n"
dff81f55
TZ
5264 "\t onmax(var) - invoke if var exceeds current max\n"
5265 "\t onchange(var) - invoke action if var changes\n\n"
c3e49506 5266 "\t The available actions are:\n\n"
e91eefd7 5267 "\t trace(<synthetic_event>,param list) - generate synthetic event\n"
c3e49506 5268 "\t save(field,...) - save current event fields\n"
a3785b7e
TZ
5269#ifdef CONFIG_TRACER_SNAPSHOT
5270 "\t snapshot() - snapshot the trace buffer\n"
5271#endif
7ef224d1 5272#endif
7bd2f24c
IM
5273;
5274
5275static ssize_t
5276tracing_readme_read(struct file *filp, char __user *ubuf,
5277 size_t cnt, loff_t *ppos)
5278{
5279 return simple_read_from_buffer(ubuf, cnt, ppos,
5280 readme_msg, strlen(readme_msg));
5281}
5282
5e2336a0 5283static const struct file_operations tracing_readme_fops = {
c7078de1
IM
5284 .open = tracing_open_generic,
5285 .read = tracing_readme_read,
b444786f 5286 .llseek = generic_file_llseek,
7bd2f24c
IM
5287};
5288
99c621d7
MS
5289static void *saved_tgids_next(struct seq_file *m, void *v, loff_t *pos)
5290{
5291 int *ptr = v;
5292
5293 if (*pos || m->count)
5294 ptr++;
5295
5296 (*pos)++;
5297
5298 for (; ptr <= &tgid_map[PID_MAX_DEFAULT]; ptr++) {
5299 if (trace_find_tgid(*ptr))
5300 return ptr;
5301 }
5302
5303 return NULL;
5304}
5305
5306static void *saved_tgids_start(struct seq_file *m, loff_t *pos)
5307{
5308 void *v;
5309 loff_t l = 0;
5310
5311 if (!tgid_map)
5312 return NULL;
5313
5314 v = &tgid_map[0];
5315 while (l <= *pos) {
5316 v = saved_tgids_next(m, v, &l);
5317 if (!v)
5318 return NULL;
5319 }
5320
5321 return v;
5322}
5323
5324static void saved_tgids_stop(struct seq_file *m, void *v)
5325{
5326}
5327
5328static int saved_tgids_show(struct seq_file *m, void *v)
5329{
5330 int pid = (int *)v - tgid_map;
5331
5332 seq_printf(m, "%d %d\n", pid, trace_find_tgid(pid));
5333 return 0;
5334}
5335
5336static const struct seq_operations tracing_saved_tgids_seq_ops = {
5337 .start = saved_tgids_start,
5338 .stop = saved_tgids_stop,
5339 .next = saved_tgids_next,
5340 .show = saved_tgids_show,
5341};
5342
5343static int tracing_saved_tgids_open(struct inode *inode, struct file *filp)
5344{
8530dec6
SRV
5345 int ret;
5346
5347 ret = tracing_check_open_get_tr(NULL);
5348 if (ret)
5349 return ret;
99c621d7
MS
5350
5351 return seq_open(filp, &tracing_saved_tgids_seq_ops);
5352}
5353
5354
5355static const struct file_operations tracing_saved_tgids_fops = {
5356 .open = tracing_saved_tgids_open,
5357 .read = seq_read,
5358 .llseek = seq_lseek,
5359 .release = seq_release,
5360};
5361
42584c81
YY
5362static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
5363{
5364 unsigned int *ptr = v;
69abe6a5 5365
42584c81
YY
5366 if (*pos || m->count)
5367 ptr++;
69abe6a5 5368
42584c81 5369 (*pos)++;
69abe6a5 5370
939c7a4f
YY
5371 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
5372 ptr++) {
42584c81
YY
5373 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
5374 continue;
69abe6a5 5375
42584c81
YY
5376 return ptr;
5377 }
69abe6a5 5378
42584c81
YY
5379 return NULL;
5380}
5381
5382static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
5383{
5384 void *v;
5385 loff_t l = 0;
69abe6a5 5386
4c27e756
SRRH
5387 preempt_disable();
5388 arch_spin_lock(&trace_cmdline_lock);
5389
939c7a4f 5390 v = &savedcmd->map_cmdline_to_pid[0];
42584c81
YY
5391 while (l <= *pos) {
5392 v = saved_cmdlines_next(m, v, &l);
5393 if (!v)
5394 return NULL;
69abe6a5
AP
5395 }
5396
42584c81
YY
5397 return v;
5398}
5399
5400static void saved_cmdlines_stop(struct seq_file *m, void *v)
5401{
4c27e756
SRRH
5402 arch_spin_unlock(&trace_cmdline_lock);
5403 preempt_enable();
42584c81 5404}
69abe6a5 5405
42584c81
YY
5406static int saved_cmdlines_show(struct seq_file *m, void *v)
5407{
5408 char buf[TASK_COMM_LEN];
5409 unsigned int *pid = v;
69abe6a5 5410
4c27e756 5411 __trace_find_cmdline(*pid, buf);
42584c81
YY
5412 seq_printf(m, "%d %s\n", *pid, buf);
5413 return 0;
5414}
5415
5416static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
5417 .start = saved_cmdlines_start,
5418 .next = saved_cmdlines_next,
5419 .stop = saved_cmdlines_stop,
5420 .show = saved_cmdlines_show,
5421};
5422
5423static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
5424{
8530dec6
SRV
5425 int ret;
5426
5427 ret = tracing_check_open_get_tr(NULL);
5428 if (ret)
5429 return ret;
42584c81
YY
5430
5431 return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
69abe6a5
AP
5432}
5433
5434static const struct file_operations tracing_saved_cmdlines_fops = {
42584c81
YY
5435 .open = tracing_saved_cmdlines_open,
5436 .read = seq_read,
5437 .llseek = seq_lseek,
5438 .release = seq_release,
69abe6a5
AP
5439};
5440
939c7a4f
YY
5441static ssize_t
5442tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
5443 size_t cnt, loff_t *ppos)
5444{
5445 char buf[64];
5446 int r;
5447
5448 arch_spin_lock(&trace_cmdline_lock);
a6af8fbf 5449 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
939c7a4f
YY
5450 arch_spin_unlock(&trace_cmdline_lock);
5451
5452 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5453}
5454
5455static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
5456{
5457 kfree(s->saved_cmdlines);
5458 kfree(s->map_cmdline_to_pid);
5459 kfree(s);
5460}
5461
5462static int tracing_resize_saved_cmdlines(unsigned int val)
5463{
5464 struct saved_cmdlines_buffer *s, *savedcmd_temp;
5465
a6af8fbf 5466 s = kmalloc(sizeof(*s), GFP_KERNEL);
939c7a4f
YY
5467 if (!s)
5468 return -ENOMEM;
5469
5470 if (allocate_cmdlines_buffer(val, s) < 0) {
5471 kfree(s);
5472 return -ENOMEM;
5473 }
5474
5475 arch_spin_lock(&trace_cmdline_lock);
5476 savedcmd_temp = savedcmd;
5477 savedcmd = s;
5478 arch_spin_unlock(&trace_cmdline_lock);
5479 free_saved_cmdlines_buffer(savedcmd_temp);
5480
5481 return 0;
5482}
5483
5484static ssize_t
5485tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
5486 size_t cnt, loff_t *ppos)
5487{
5488 unsigned long val;
5489 int ret;
5490
5491 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5492 if (ret)
5493 return ret;
5494
5495 /* must have at least 1 entry or less than PID_MAX_DEFAULT */
5496 if (!val || val > PID_MAX_DEFAULT)
5497 return -EINVAL;
5498
5499 ret = tracing_resize_saved_cmdlines((unsigned int)val);
5500 if (ret < 0)
5501 return ret;
5502
5503 *ppos += cnt;
5504
5505 return cnt;
5506}
5507
5508static const struct file_operations tracing_saved_cmdlines_size_fops = {
5509 .open = tracing_open_generic,
5510 .read = tracing_saved_cmdlines_size_read,
5511 .write = tracing_saved_cmdlines_size_write,
5512};
5513
681bec03 5514#ifdef CONFIG_TRACE_EVAL_MAP_FILE
23bf8cb8 5515static union trace_eval_map_item *
f57a4143 5516update_eval_map(union trace_eval_map_item *ptr)
9828413d 5517{
00f4b652 5518 if (!ptr->map.eval_string) {
9828413d
SRRH
5519 if (ptr->tail.next) {
5520 ptr = ptr->tail.next;
5521 /* Set ptr to the next real item (skip head) */
5522 ptr++;
5523 } else
5524 return NULL;
5525 }
5526 return ptr;
5527}
5528
f57a4143 5529static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos)
9828413d 5530{
23bf8cb8 5531 union trace_eval_map_item *ptr = v;
9828413d
SRRH
5532
5533 /*
5534 * Paranoid! If ptr points to end, we don't want to increment past it.
5535 * This really should never happen.
5536 */
039958a5 5537 (*pos)++;
f57a4143 5538 ptr = update_eval_map(ptr);
9828413d
SRRH
5539 if (WARN_ON_ONCE(!ptr))
5540 return NULL;
5541
5542 ptr++;
f57a4143 5543 ptr = update_eval_map(ptr);
9828413d
SRRH
5544
5545 return ptr;
5546}
5547
f57a4143 5548static void *eval_map_start(struct seq_file *m, loff_t *pos)
9828413d 5549{
23bf8cb8 5550 union trace_eval_map_item *v;
9828413d
SRRH
5551 loff_t l = 0;
5552
1793ed93 5553 mutex_lock(&trace_eval_mutex);
9828413d 5554
23bf8cb8 5555 v = trace_eval_maps;
9828413d
SRRH
5556 if (v)
5557 v++;
5558
5559 while (v && l < *pos) {
f57a4143 5560 v = eval_map_next(m, v, &l);
9828413d
SRRH
5561 }
5562
5563 return v;
5564}
5565
f57a4143 5566static void eval_map_stop(struct seq_file *m, void *v)
9828413d 5567{
1793ed93 5568 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
5569}
5570
f57a4143 5571static int eval_map_show(struct seq_file *m, void *v)
9828413d 5572{
23bf8cb8 5573 union trace_eval_map_item *ptr = v;
9828413d
SRRH
5574
5575 seq_printf(m, "%s %ld (%s)\n",
00f4b652 5576 ptr->map.eval_string, ptr->map.eval_value,
9828413d
SRRH
5577 ptr->map.system);
5578
5579 return 0;
5580}
5581
f57a4143
JL
5582static const struct seq_operations tracing_eval_map_seq_ops = {
5583 .start = eval_map_start,
5584 .next = eval_map_next,
5585 .stop = eval_map_stop,
5586 .show = eval_map_show,
9828413d
SRRH
5587};
5588
f57a4143 5589static int tracing_eval_map_open(struct inode *inode, struct file *filp)
9828413d 5590{
8530dec6
SRV
5591 int ret;
5592
5593 ret = tracing_check_open_get_tr(NULL);
5594 if (ret)
5595 return ret;
9828413d 5596
f57a4143 5597 return seq_open(filp, &tracing_eval_map_seq_ops);
9828413d
SRRH
5598}
5599
f57a4143
JL
5600static const struct file_operations tracing_eval_map_fops = {
5601 .open = tracing_eval_map_open,
9828413d
SRRH
5602 .read = seq_read,
5603 .llseek = seq_lseek,
5604 .release = seq_release,
5605};
5606
23bf8cb8 5607static inline union trace_eval_map_item *
5f60b351 5608trace_eval_jmp_to_tail(union trace_eval_map_item *ptr)
9828413d
SRRH
5609{
5610 /* Return tail of array given the head */
5611 return ptr + ptr->head.length + 1;
5612}
5613
5614static void
f57a4143 5615trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,
9828413d
SRRH
5616 int len)
5617{
00f4b652
JL
5618 struct trace_eval_map **stop;
5619 struct trace_eval_map **map;
23bf8cb8
JL
5620 union trace_eval_map_item *map_array;
5621 union trace_eval_map_item *ptr;
9828413d
SRRH
5622
5623 stop = start + len;
5624
5625 /*
23bf8cb8 5626 * The trace_eval_maps contains the map plus a head and tail item,
9828413d
SRRH
5627 * where the head holds the module and length of array, and the
5628 * tail holds a pointer to the next list.
5629 */
6da2ec56 5630 map_array = kmalloc_array(len + 2, sizeof(*map_array), GFP_KERNEL);
9828413d 5631 if (!map_array) {
f57a4143 5632 pr_warn("Unable to allocate trace eval mapping\n");
9828413d
SRRH
5633 return;
5634 }
5635
1793ed93 5636 mutex_lock(&trace_eval_mutex);
9828413d 5637
23bf8cb8
JL
5638 if (!trace_eval_maps)
5639 trace_eval_maps = map_array;
9828413d 5640 else {
23bf8cb8 5641 ptr = trace_eval_maps;
9828413d 5642 for (;;) {
5f60b351 5643 ptr = trace_eval_jmp_to_tail(ptr);
9828413d
SRRH
5644 if (!ptr->tail.next)
5645 break;
5646 ptr = ptr->tail.next;
5647
5648 }
5649 ptr->tail.next = map_array;
5650 }
5651 map_array->head.mod = mod;
5652 map_array->head.length = len;
5653 map_array++;
5654
5655 for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
5656 map_array->map = **map;
5657 map_array++;
5658 }
5659 memset(map_array, 0, sizeof(*map_array));
5660
1793ed93 5661 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
5662}
5663
f57a4143 5664static void trace_create_eval_file(struct dentry *d_tracer)
9828413d 5665{
681bec03 5666 trace_create_file("eval_map", 0444, d_tracer,
f57a4143 5667 NULL, &tracing_eval_map_fops);
9828413d
SRRH
5668}
5669
681bec03 5670#else /* CONFIG_TRACE_EVAL_MAP_FILE */
f57a4143
JL
5671static inline void trace_create_eval_file(struct dentry *d_tracer) { }
5672static inline void trace_insert_eval_map_file(struct module *mod,
00f4b652 5673 struct trace_eval_map **start, int len) { }
681bec03 5674#endif /* !CONFIG_TRACE_EVAL_MAP_FILE */
9828413d 5675
f57a4143 5676static void trace_insert_eval_map(struct module *mod,
00f4b652 5677 struct trace_eval_map **start, int len)
0c564a53 5678{
00f4b652 5679 struct trace_eval_map **map;
0c564a53
SRRH
5680
5681 if (len <= 0)
5682 return;
5683
5684 map = start;
5685
f57a4143 5686 trace_event_eval_update(map, len);
9828413d 5687
f57a4143 5688 trace_insert_eval_map_file(mod, start, len);
0c564a53
SRRH
5689}
5690
bc0c38d1
SR
5691static ssize_t
5692tracing_set_trace_read(struct file *filp, char __user *ubuf,
5693 size_t cnt, loff_t *ppos)
5694{
2b6080f2 5695 struct trace_array *tr = filp->private_data;
ee6c2c1b 5696 char buf[MAX_TRACER_SIZE+2];
bc0c38d1
SR
5697 int r;
5698
5699 mutex_lock(&trace_types_lock);
2b6080f2 5700 r = sprintf(buf, "%s\n", tr->current_trace->name);
bc0c38d1
SR
5701 mutex_unlock(&trace_types_lock);
5702
4bf39a94 5703 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
bc0c38d1
SR
5704}
5705
b6f11df2
ACM
5706int tracer_init(struct tracer *t, struct trace_array *tr)
5707{
1c5eb448 5708 tracing_reset_online_cpus(&tr->array_buffer);
b6f11df2
ACM
5709 return t->init(tr);
5710}
5711
1c5eb448 5712static void set_buffer_entries(struct array_buffer *buf, unsigned long val)
438ced17
VN
5713{
5714 int cpu;
737223fb 5715
438ced17 5716 for_each_tracing_cpu(cpu)
12883efb 5717 per_cpu_ptr(buf->data, cpu)->entries = val;
438ced17
VN
5718}
5719
12883efb 5720#ifdef CONFIG_TRACER_MAX_TRACE
d60da506 5721/* resize @tr's buffer to the size of @size_tr's entries */
1c5eb448
SRV
5722static int resize_buffer_duplicate_size(struct array_buffer *trace_buf,
5723 struct array_buffer *size_buf, int cpu_id)
d60da506
HT
5724{
5725 int cpu, ret = 0;
5726
5727 if (cpu_id == RING_BUFFER_ALL_CPUS) {
5728 for_each_tracing_cpu(cpu) {
12883efb
SRRH
5729 ret = ring_buffer_resize(trace_buf->buffer,
5730 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
d60da506
HT
5731 if (ret < 0)
5732 break;
12883efb
SRRH
5733 per_cpu_ptr(trace_buf->data, cpu)->entries =
5734 per_cpu_ptr(size_buf->data, cpu)->entries;
d60da506
HT
5735 }
5736 } else {
12883efb
SRRH
5737 ret = ring_buffer_resize(trace_buf->buffer,
5738 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
d60da506 5739 if (ret == 0)
12883efb
SRRH
5740 per_cpu_ptr(trace_buf->data, cpu_id)->entries =
5741 per_cpu_ptr(size_buf->data, cpu_id)->entries;
d60da506
HT
5742 }
5743
5744 return ret;
5745}
12883efb 5746#endif /* CONFIG_TRACER_MAX_TRACE */
d60da506 5747
2b6080f2
SR
5748static int __tracing_resize_ring_buffer(struct trace_array *tr,
5749 unsigned long size, int cpu)
73c5162a
SR
5750{
5751 int ret;
5752
5753 /*
5754 * If kernel or user changes the size of the ring buffer
a123c52b
SR
5755 * we use the size that was given, and we can forget about
5756 * expanding it later.
73c5162a 5757 */
55034cd6 5758 ring_buffer_expanded = true;
73c5162a 5759
b382ede6 5760 /* May be called before buffers are initialized */
1c5eb448 5761 if (!tr->array_buffer.buffer)
b382ede6
SR
5762 return 0;
5763
1c5eb448 5764 ret = ring_buffer_resize(tr->array_buffer.buffer, size, cpu);
73c5162a
SR
5765 if (ret < 0)
5766 return ret;
5767
12883efb 5768#ifdef CONFIG_TRACER_MAX_TRACE
2b6080f2
SR
5769 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
5770 !tr->current_trace->use_max_tr)
ef710e10
KM
5771 goto out;
5772
12883efb 5773 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
73c5162a 5774 if (ret < 0) {
1c5eb448
SRV
5775 int r = resize_buffer_duplicate_size(&tr->array_buffer,
5776 &tr->array_buffer, cpu);
73c5162a 5777 if (r < 0) {
a123c52b
SR
5778 /*
5779 * AARGH! We are left with different
5780 * size max buffer!!!!
5781 * The max buffer is our "snapshot" buffer.
5782 * When a tracer needs a snapshot (one of the
5783 * latency tracers), it swaps the max buffer
5784 * with the saved snap shot. We succeeded to
5785 * update the size of the main buffer, but failed to
5786 * update the size of the max buffer. But when we tried
5787 * to reset the main buffer to the original size, we
5788 * failed there too. This is very unlikely to
5789 * happen, but if it does, warn and kill all
5790 * tracing.
5791 */
73c5162a
SR
5792 WARN_ON(1);
5793 tracing_disabled = 1;
5794 }
5795 return ret;
5796 }
5797
438ced17 5798 if (cpu == RING_BUFFER_ALL_CPUS)
12883efb 5799 set_buffer_entries(&tr->max_buffer, size);
438ced17 5800 else
12883efb 5801 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
438ced17 5802
ef710e10 5803 out:
12883efb
SRRH
5804#endif /* CONFIG_TRACER_MAX_TRACE */
5805
438ced17 5806 if (cpu == RING_BUFFER_ALL_CPUS)
1c5eb448 5807 set_buffer_entries(&tr->array_buffer, size);
438ced17 5808 else
1c5eb448 5809 per_cpu_ptr(tr->array_buffer.data, cpu)->entries = size;
73c5162a
SR
5810
5811 return ret;
5812}
5813
9c5b9d3d
MH
5814ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
5815 unsigned long size, int cpu_id)
4f271a2a 5816{
83f40318 5817 int ret = size;
4f271a2a
VN
5818
5819 mutex_lock(&trace_types_lock);
5820
438ced17
VN
5821 if (cpu_id != RING_BUFFER_ALL_CPUS) {
5822 /* make sure, this cpu is enabled in the mask */
5823 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
5824 ret = -EINVAL;
5825 goto out;
5826 }
5827 }
4f271a2a 5828
2b6080f2 5829 ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4f271a2a
VN
5830 if (ret < 0)
5831 ret = -ENOMEM;
5832
438ced17 5833out:
4f271a2a
VN
5834 mutex_unlock(&trace_types_lock);
5835
5836 return ret;
5837}
5838
ef710e10 5839
1852fcce
SR
5840/**
5841 * tracing_update_buffers - used by tracing facility to expand ring buffers
5842 *
5843 * To save on memory when the tracing is never used on a system with it
5844 * configured in. The ring buffers are set to a minimum size. But once
5845 * a user starts to use the tracing facility, then they need to grow
5846 * to their default size.
5847 *
5848 * This function is to be called when a tracer is about to be used.
5849 */
5850int tracing_update_buffers(void)
5851{
5852 int ret = 0;
5853
1027fcb2 5854 mutex_lock(&trace_types_lock);
1852fcce 5855 if (!ring_buffer_expanded)
2b6080f2 5856 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
438ced17 5857 RING_BUFFER_ALL_CPUS);
1027fcb2 5858 mutex_unlock(&trace_types_lock);
1852fcce
SR
5859
5860 return ret;
5861}
5862
577b785f
SR
5863struct trace_option_dentry;
5864
37aea98b 5865static void
2b6080f2 5866create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
577b785f 5867
6b450d25
SRRH
5868/*
5869 * Used to clear out the tracer before deletion of an instance.
5870 * Must have trace_types_lock held.
5871 */
5872static void tracing_set_nop(struct trace_array *tr)
5873{
5874 if (tr->current_trace == &nop_trace)
5875 return;
5876
50512ab5 5877 tr->current_trace->enabled--;
6b450d25
SRRH
5878
5879 if (tr->current_trace->reset)
5880 tr->current_trace->reset(tr);
5881
5882 tr->current_trace = &nop_trace;
5883}
5884
41d9c0be 5885static void add_tracer_options(struct trace_array *tr, struct tracer *t)
bc0c38d1 5886{
09d23a1d
SRRH
5887 /* Only enable if the directory has been created already. */
5888 if (!tr->dir)
5889 return;
5890
37aea98b 5891 create_trace_option_files(tr, t);
09d23a1d
SRRH
5892}
5893
9c5b9d3d 5894int tracing_set_tracer(struct trace_array *tr, const char *buf)
09d23a1d 5895{
bc0c38d1 5896 struct tracer *t;
12883efb 5897#ifdef CONFIG_TRACER_MAX_TRACE
34600f0e 5898 bool had_max_tr;
12883efb 5899#endif
d9e54076 5900 int ret = 0;
bc0c38d1 5901
1027fcb2
SR
5902 mutex_lock(&trace_types_lock);
5903
73c5162a 5904 if (!ring_buffer_expanded) {
2b6080f2 5905 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
438ced17 5906 RING_BUFFER_ALL_CPUS);
73c5162a 5907 if (ret < 0)
59f586db 5908 goto out;
73c5162a
SR
5909 ret = 0;
5910 }
5911
bc0c38d1
SR
5912 for (t = trace_types; t; t = t->next) {
5913 if (strcmp(t->name, buf) == 0)
5914 break;
5915 }
c2931e05
FW
5916 if (!t) {
5917 ret = -EINVAL;
5918 goto out;
5919 }
2b6080f2 5920 if (t == tr->current_trace)
bc0c38d1
SR
5921 goto out;
5922
a35873a0
TZ
5923#ifdef CONFIG_TRACER_SNAPSHOT
5924 if (t->use_max_tr) {
5925 arch_spin_lock(&tr->max_lock);
5926 if (tr->cond_snapshot)
5927 ret = -EBUSY;
5928 arch_spin_unlock(&tr->max_lock);
5929 if (ret)
5930 goto out;
5931 }
5932#endif
c7b3ae0b
ZSZ
5933 /* Some tracers won't work on kernel command line */
5934 if (system_state < SYSTEM_RUNNING && t->noboot) {
5935 pr_warn("Tracer '%s' is not allowed on command line, ignored\n",
5936 t->name);
5937 goto out;
5938 }
5939
607e2ea1
SRRH
5940 /* Some tracers are only allowed for the top level buffer */
5941 if (!trace_ok_for_array(t, tr)) {
5942 ret = -EINVAL;
5943 goto out;
5944 }
5945
cf6ab6d9 5946 /* If trace pipe files are being read, we can't change the tracer */
7ef282e0 5947 if (tr->trace_ref) {
cf6ab6d9
SRRH
5948 ret = -EBUSY;
5949 goto out;
5950 }
5951
9f029e83 5952 trace_branch_disable();
613f04a0 5953
50512ab5 5954 tr->current_trace->enabled--;
613f04a0 5955
2b6080f2
SR
5956 if (tr->current_trace->reset)
5957 tr->current_trace->reset(tr);
34600f0e 5958
74401729 5959 /* Current trace needs to be nop_trace before synchronize_rcu */
2b6080f2 5960 tr->current_trace = &nop_trace;
34600f0e 5961
45ad21ca
SRRH
5962#ifdef CONFIG_TRACER_MAX_TRACE
5963 had_max_tr = tr->allocated_snapshot;
34600f0e
SR
5964
5965 if (had_max_tr && !t->use_max_tr) {
5966 /*
5967 * We need to make sure that the update_max_tr sees that
5968 * current_trace changed to nop_trace to keep it from
5969 * swapping the buffers after we resize it.
5970 * The update_max_tr is called from interrupts disabled
5971 * so a synchronized_sched() is sufficient.
5972 */
74401729 5973 synchronize_rcu();
3209cff4 5974 free_snapshot(tr);
ef710e10 5975 }
12883efb 5976#endif
12883efb
SRRH
5977
5978#ifdef CONFIG_TRACER_MAX_TRACE
34600f0e 5979 if (t->use_max_tr && !had_max_tr) {
2824f503 5980 ret = tracing_alloc_snapshot_instance(tr);
d60da506
HT
5981 if (ret < 0)
5982 goto out;
ef710e10 5983 }
12883efb 5984#endif
577b785f 5985
1c80025a 5986 if (t->init) {
b6f11df2 5987 ret = tracer_init(t, tr);
1c80025a
FW
5988 if (ret)
5989 goto out;
5990 }
bc0c38d1 5991
2b6080f2 5992 tr->current_trace = t;
50512ab5 5993 tr->current_trace->enabled++;
9f029e83 5994 trace_branch_enable(tr);
bc0c38d1
SR
5995 out:
5996 mutex_unlock(&trace_types_lock);
5997
d9e54076
PZ
5998 return ret;
5999}
6000
6001static ssize_t
6002tracing_set_trace_write(struct file *filp, const char __user *ubuf,
6003 size_t cnt, loff_t *ppos)
6004{
607e2ea1 6005 struct trace_array *tr = filp->private_data;
ee6c2c1b 6006 char buf[MAX_TRACER_SIZE+1];
d9e54076
PZ
6007 int i;
6008 size_t ret;
e6e7a65a
FW
6009 int err;
6010
6011 ret = cnt;
d9e54076 6012
ee6c2c1b
LZ
6013 if (cnt > MAX_TRACER_SIZE)
6014 cnt = MAX_TRACER_SIZE;
d9e54076 6015
4afe6495 6016 if (copy_from_user(buf, ubuf, cnt))
d9e54076
PZ
6017 return -EFAULT;
6018
6019 buf[cnt] = 0;
6020
6021 /* strip ending whitespace. */
6022 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
6023 buf[i] = 0;
6024
607e2ea1 6025 err = tracing_set_tracer(tr, buf);
e6e7a65a
FW
6026 if (err)
6027 return err;
d9e54076 6028
cf8517cf 6029 *ppos += ret;
bc0c38d1 6030
c2931e05 6031 return ret;
bc0c38d1
SR
6032}
6033
6034static ssize_t
6508fa76
SF
6035tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
6036 size_t cnt, loff_t *ppos)
bc0c38d1 6037{
bc0c38d1
SR
6038 char buf[64];
6039 int r;
6040
cffae437 6041 r = snprintf(buf, sizeof(buf), "%ld\n",
bc0c38d1 6042 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
cffae437
SR
6043 if (r > sizeof(buf))
6044 r = sizeof(buf);
4bf39a94 6045 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
bc0c38d1
SR
6046}
6047
6048static ssize_t
6508fa76
SF
6049tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
6050 size_t cnt, loff_t *ppos)
bc0c38d1 6051{
5e39841c 6052 unsigned long val;
c6caeeb1 6053 int ret;
bc0c38d1 6054
22fe9b54
PH
6055 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6056 if (ret)
c6caeeb1 6057 return ret;
bc0c38d1
SR
6058
6059 *ptr = val * 1000;
6060
6061 return cnt;
6062}
6063
6508fa76
SF
6064static ssize_t
6065tracing_thresh_read(struct file *filp, char __user *ubuf,
6066 size_t cnt, loff_t *ppos)
6067{
6068 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
6069}
6070
6071static ssize_t
6072tracing_thresh_write(struct file *filp, const char __user *ubuf,
6073 size_t cnt, loff_t *ppos)
6074{
6075 struct trace_array *tr = filp->private_data;
6076 int ret;
6077
6078 mutex_lock(&trace_types_lock);
6079 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
6080 if (ret < 0)
6081 goto out;
6082
6083 if (tr->current_trace->update_thresh) {
6084 ret = tr->current_trace->update_thresh(tr);
6085 if (ret < 0)
6086 goto out;
6087 }
6088
6089 ret = cnt;
6090out:
6091 mutex_unlock(&trace_types_lock);
6092
6093 return ret;
6094}
6095
f971cc9a 6096#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
e428abbb 6097
6508fa76
SF
6098static ssize_t
6099tracing_max_lat_read(struct file *filp, char __user *ubuf,
6100 size_t cnt, loff_t *ppos)
6101{
6102 return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
6103}
6104
6105static ssize_t
6106tracing_max_lat_write(struct file *filp, const char __user *ubuf,
6107 size_t cnt, loff_t *ppos)
6108{
6109 return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
6110}
6111
e428abbb
CG
6112#endif
6113
b3806b43
SR
6114static int tracing_open_pipe(struct inode *inode, struct file *filp)
6115{
15544209 6116 struct trace_array *tr = inode->i_private;
b3806b43 6117 struct trace_iterator *iter;
8530dec6 6118 int ret;
b3806b43 6119
8530dec6
SRV
6120 ret = tracing_check_open_get_tr(tr);
6121 if (ret)
6122 return ret;
7b85af63 6123
b04cc6b1
FW
6124 mutex_lock(&trace_types_lock);
6125
b3806b43
SR
6126 /* create a buffer to store the information to pass to userspace */
6127 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
b04cc6b1
FW
6128 if (!iter) {
6129 ret = -ENOMEM;
f77d09a3 6130 __trace_array_put(tr);
b04cc6b1
FW
6131 goto out;
6132 }
b3806b43 6133
3a161d99 6134 trace_seq_init(&iter->seq);
d716ff71 6135 iter->trace = tr->current_trace;
d7350c3f 6136
4462344e 6137 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
b04cc6b1 6138 ret = -ENOMEM;
d7350c3f 6139 goto fail;
4462344e
RR
6140 }
6141
a309720c 6142 /* trace pipe does not show start of buffer */
4462344e 6143 cpumask_setall(iter->started);
a309720c 6144
983f938a 6145 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
112f38a7
SR
6146 iter->iter_flags |= TRACE_FILE_LAT_FMT;
6147
8be0709f 6148 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
58e8eedf 6149 if (trace_clocks[tr->clock_id].in_ns)
8be0709f
DS
6150 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
6151
15544209 6152 iter->tr = tr;
1c5eb448 6153 iter->array_buffer = &tr->array_buffer;
15544209 6154 iter->cpu_file = tracing_get_cpu(inode);
d7350c3f 6155 mutex_init(&iter->mutex);
b3806b43
SR
6156 filp->private_data = iter;
6157
107bad8b
SR
6158 if (iter->trace->pipe_open)
6159 iter->trace->pipe_open(iter);
107bad8b 6160
b444786f 6161 nonseekable_open(inode, filp);
cf6ab6d9 6162
7ef282e0 6163 tr->trace_ref++;
b04cc6b1
FW
6164out:
6165 mutex_unlock(&trace_types_lock);
6166 return ret;
d7350c3f
FW
6167
6168fail:
d7350c3f 6169 kfree(iter);
7b85af63 6170 __trace_array_put(tr);
d7350c3f
FW
6171 mutex_unlock(&trace_types_lock);
6172 return ret;
b3806b43
SR
6173}
6174
6175static int tracing_release_pipe(struct inode *inode, struct file *file)
6176{
6177 struct trace_iterator *iter = file->private_data;
15544209 6178 struct trace_array *tr = inode->i_private;
b3806b43 6179
b04cc6b1
FW
6180 mutex_lock(&trace_types_lock);
6181
7ef282e0 6182 tr->trace_ref--;
cf6ab6d9 6183
29bf4a5e 6184 if (iter->trace->pipe_close)
c521efd1
SR
6185 iter->trace->pipe_close(iter);
6186
b04cc6b1
FW
6187 mutex_unlock(&trace_types_lock);
6188
4462344e 6189 free_cpumask_var(iter->started);
d7350c3f 6190 mutex_destroy(&iter->mutex);
b3806b43 6191 kfree(iter);
b3806b43 6192
7b85af63
SRRH
6193 trace_array_put(tr);
6194
b3806b43
SR
6195 return 0;
6196}
6197
9dd95748 6198static __poll_t
cc60cdc9 6199trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
2a2cc8f7 6200{
983f938a
SRRH
6201 struct trace_array *tr = iter->tr;
6202
15693458
SRRH
6203 /* Iterators are static, they should be filled or empty */
6204 if (trace_buffer_iter(iter, iter->cpu_file))
a9a08845 6205 return EPOLLIN | EPOLLRDNORM;
2a2cc8f7 6206
983f938a 6207 if (tr->trace_flags & TRACE_ITER_BLOCK)
2a2cc8f7
SSP
6208 /*
6209 * Always select as readable when in blocking mode
6210 */
a9a08845 6211 return EPOLLIN | EPOLLRDNORM;
15693458 6212 else
1c5eb448 6213 return ring_buffer_poll_wait(iter->array_buffer->buffer, iter->cpu_file,
15693458 6214 filp, poll_table);
2a2cc8f7 6215}
2a2cc8f7 6216
9dd95748 6217static __poll_t
cc60cdc9
SR
6218tracing_poll_pipe(struct file *filp, poll_table *poll_table)
6219{
6220 struct trace_iterator *iter = filp->private_data;
6221
6222 return trace_poll(iter, filp, poll_table);
2a2cc8f7
SSP
6223}
6224
d716ff71 6225/* Must be called with iter->mutex held. */
ff98781b 6226static int tracing_wait_pipe(struct file *filp)
b3806b43
SR
6227{
6228 struct trace_iterator *iter = filp->private_data;
8b8b3683 6229 int ret;
b3806b43 6230
b3806b43 6231 while (trace_empty(iter)) {
2dc8f095 6232
107bad8b 6233 if ((filp->f_flags & O_NONBLOCK)) {
ff98781b 6234 return -EAGAIN;
107bad8b 6235 }
2dc8f095 6236
b3806b43 6237 /*
250bfd3d 6238 * We block until we read something and tracing is disabled.
b3806b43
SR
6239 * We still block if tracing is disabled, but we have never
6240 * read anything. This allows a user to cat this file, and
6241 * then enable tracing. But after we have read something,
6242 * we give an EOF when tracing is again disabled.
6243 *
6244 * iter->pos will be 0 if we haven't read anything.
6245 */
75df6e68 6246 if (!tracer_tracing_is_on(iter->tr) && iter->pos)
b3806b43 6247 break;
f4874261
SRRH
6248
6249 mutex_unlock(&iter->mutex);
6250
2c2b0a78 6251 ret = wait_on_pipe(iter, 0);
f4874261
SRRH
6252
6253 mutex_lock(&iter->mutex);
6254
8b8b3683
SRRH
6255 if (ret)
6256 return ret;
b3806b43
SR
6257 }
6258
ff98781b
EGM
6259 return 1;
6260}
6261
6262/*
6263 * Consumer reader.
6264 */
6265static ssize_t
6266tracing_read_pipe(struct file *filp, char __user *ubuf,
6267 size_t cnt, loff_t *ppos)
6268{
6269 struct trace_iterator *iter = filp->private_data;
6270 ssize_t sret;
6271
d7350c3f
FW
6272 /*
6273 * Avoid more than one consumer on a single file descriptor
6274 * This is just a matter of traces coherency, the ring buffer itself
6275 * is protected.
6276 */
6277 mutex_lock(&iter->mutex);
1245800c
SRRH
6278
6279 /* return any leftover data */
6280 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
6281 if (sret != -EBUSY)
6282 goto out;
6283
6284 trace_seq_init(&iter->seq);
6285
ff98781b
EGM
6286 if (iter->trace->read) {
6287 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
6288 if (sret)
6289 goto out;
6290 }
6291
6292waitagain:
6293 sret = tracing_wait_pipe(filp);
6294 if (sret <= 0)
6295 goto out;
6296
b3806b43 6297 /* stop when tracing is finished */
ff98781b
EGM
6298 if (trace_empty(iter)) {
6299 sret = 0;
107bad8b 6300 goto out;
ff98781b 6301 }
b3806b43
SR
6302
6303 if (cnt >= PAGE_SIZE)
6304 cnt = PAGE_SIZE - 1;
6305
53d0aa77 6306 /* reset all but tr, trace, and overruns */
53d0aa77
SR
6307 memset(&iter->seq, 0,
6308 sizeof(struct trace_iterator) -
6309 offsetof(struct trace_iterator, seq));
ed5467da 6310 cpumask_clear(iter->started);
d303de1f 6311 trace_seq_init(&iter->seq);
4823ed7e 6312 iter->pos = -1;
b3806b43 6313
4f535968 6314 trace_event_read_lock();
7e53bd42 6315 trace_access_lock(iter->cpu_file);
955b61e5 6316 while (trace_find_next_entry_inc(iter) != NULL) {
2c4f035f 6317 enum print_line_t ret;
5ac48378 6318 int save_len = iter->seq.seq.len;
088b1e42 6319
f9896bf3 6320 ret = print_trace_line(iter);
2c4f035f 6321 if (ret == TRACE_TYPE_PARTIAL_LINE) {
088b1e42 6322 /* don't print partial lines */
5ac48378 6323 iter->seq.seq.len = save_len;
b3806b43 6324 break;
088b1e42 6325 }
b91facc3
FW
6326 if (ret != TRACE_TYPE_NO_CONSUME)
6327 trace_consume(iter);
b3806b43 6328
5ac48378 6329 if (trace_seq_used(&iter->seq) >= cnt)
b3806b43 6330 break;
ee5e51f5
JO
6331
6332 /*
6333 * Setting the full flag means we reached the trace_seq buffer
6334 * size and we should leave by partial output condition above.
6335 * One of the trace_seq_* functions is not used properly.
6336 */
6337 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
6338 iter->ent->type);
b3806b43 6339 }
7e53bd42 6340 trace_access_unlock(iter->cpu_file);
4f535968 6341 trace_event_read_unlock();
b3806b43 6342
b3806b43 6343 /* Now copy what we have to the user */
6c6c2796 6344 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
5ac48378 6345 if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
f9520750 6346 trace_seq_init(&iter->seq);
9ff4b974
PP
6347
6348 /*
25985edc 6349 * If there was nothing to send to user, in spite of consuming trace
9ff4b974
PP
6350 * entries, go back to wait for more entries.
6351 */
6c6c2796 6352 if (sret == -EBUSY)
9ff4b974 6353 goto waitagain;
b3806b43 6354
107bad8b 6355out:
d7350c3f 6356 mutex_unlock(&iter->mutex);
107bad8b 6357
6c6c2796 6358 return sret;
b3806b43
SR
6359}
6360
3c56819b
EGM
6361static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
6362 unsigned int idx)
6363{
6364 __free_page(spd->pages[idx]);
6365}
6366
34cd4998 6367static size_t
fa7c7f6e 6368tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
34cd4998
SR
6369{
6370 size_t count;
74f06bb7 6371 int save_len;
34cd4998
SR
6372 int ret;
6373
6374 /* Seq buffer is page-sized, exactly what we need. */
6375 for (;;) {
74f06bb7 6376 save_len = iter->seq.seq.len;
34cd4998 6377 ret = print_trace_line(iter);
74f06bb7
SRRH
6378
6379 if (trace_seq_has_overflowed(&iter->seq)) {
6380 iter->seq.seq.len = save_len;
34cd4998
SR
6381 break;
6382 }
74f06bb7
SRRH
6383
6384 /*
6385 * This should not be hit, because it should only
6386 * be set if the iter->seq overflowed. But check it
6387 * anyway to be safe.
6388 */
34cd4998 6389 if (ret == TRACE_TYPE_PARTIAL_LINE) {
74f06bb7
SRRH
6390 iter->seq.seq.len = save_len;
6391 break;
6392 }
6393
5ac48378 6394 count = trace_seq_used(&iter->seq) - save_len;
74f06bb7
SRRH
6395 if (rem < count) {
6396 rem = 0;
6397 iter->seq.seq.len = save_len;
34cd4998
SR
6398 break;
6399 }
6400
74e7ff8c
LJ
6401 if (ret != TRACE_TYPE_NO_CONSUME)
6402 trace_consume(iter);
34cd4998 6403 rem -= count;
955b61e5 6404 if (!trace_find_next_entry_inc(iter)) {
34cd4998
SR
6405 rem = 0;
6406 iter->ent = NULL;
6407 break;
6408 }
6409 }
6410
6411 return rem;
6412}
6413
3c56819b
EGM
6414static ssize_t tracing_splice_read_pipe(struct file *filp,
6415 loff_t *ppos,
6416 struct pipe_inode_info *pipe,
6417 size_t len,
6418 unsigned int flags)
6419{
35f3d14d
JA
6420 struct page *pages_def[PIPE_DEF_BUFFERS];
6421 struct partial_page partial_def[PIPE_DEF_BUFFERS];
3c56819b
EGM
6422 struct trace_iterator *iter = filp->private_data;
6423 struct splice_pipe_desc spd = {
35f3d14d
JA
6424 .pages = pages_def,
6425 .partial = partial_def,
34cd4998 6426 .nr_pages = 0, /* This gets updated below. */
047fe360 6427 .nr_pages_max = PIPE_DEF_BUFFERS,
6797d97a 6428 .ops = &default_pipe_buf_ops,
34cd4998 6429 .spd_release = tracing_spd_release_pipe,
3c56819b
EGM
6430 };
6431 ssize_t ret;
34cd4998 6432 size_t rem;
3c56819b
EGM
6433 unsigned int i;
6434
35f3d14d
JA
6435 if (splice_grow_spd(pipe, &spd))
6436 return -ENOMEM;
6437
d7350c3f 6438 mutex_lock(&iter->mutex);
3c56819b
EGM
6439
6440 if (iter->trace->splice_read) {
6441 ret = iter->trace->splice_read(iter, filp,
6442 ppos, pipe, len, flags);
6443 if (ret)
34cd4998 6444 goto out_err;
3c56819b
EGM
6445 }
6446
6447 ret = tracing_wait_pipe(filp);
6448 if (ret <= 0)
34cd4998 6449 goto out_err;
3c56819b 6450
955b61e5 6451 if (!iter->ent && !trace_find_next_entry_inc(iter)) {
3c56819b 6452 ret = -EFAULT;
34cd4998 6453 goto out_err;
3c56819b
EGM
6454 }
6455
4f535968 6456 trace_event_read_lock();
7e53bd42 6457 trace_access_lock(iter->cpu_file);
4f535968 6458
3c56819b 6459 /* Fill as many pages as possible. */
a786c06d 6460 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
35f3d14d
JA
6461 spd.pages[i] = alloc_page(GFP_KERNEL);
6462 if (!spd.pages[i])
34cd4998 6463 break;
3c56819b 6464
fa7c7f6e 6465 rem = tracing_fill_pipe_page(rem, iter);
3c56819b
EGM
6466
6467 /* Copy the data into the page, so we can start over. */
6468 ret = trace_seq_to_buffer(&iter->seq,
35f3d14d 6469 page_address(spd.pages[i]),
5ac48378 6470 trace_seq_used(&iter->seq));
3c56819b 6471 if (ret < 0) {
35f3d14d 6472 __free_page(spd.pages[i]);
3c56819b
EGM
6473 break;
6474 }
35f3d14d 6475 spd.partial[i].offset = 0;
5ac48378 6476 spd.partial[i].len = trace_seq_used(&iter->seq);
3c56819b 6477
f9520750 6478 trace_seq_init(&iter->seq);
3c56819b
EGM
6479 }
6480
7e53bd42 6481 trace_access_unlock(iter->cpu_file);
4f535968 6482 trace_event_read_unlock();
d7350c3f 6483 mutex_unlock(&iter->mutex);
3c56819b
EGM
6484
6485 spd.nr_pages = i;
6486
a29054d9
SRRH
6487 if (i)
6488 ret = splice_to_pipe(pipe, &spd);
6489 else
6490 ret = 0;
35f3d14d 6491out:
047fe360 6492 splice_shrink_spd(&spd);
35f3d14d 6493 return ret;
3c56819b 6494
34cd4998 6495out_err:
d7350c3f 6496 mutex_unlock(&iter->mutex);
35f3d14d 6497 goto out;
3c56819b
EGM
6498}
6499
a98a3c3f
SR
6500static ssize_t
6501tracing_entries_read(struct file *filp, char __user *ubuf,
6502 size_t cnt, loff_t *ppos)
6503{
0bc392ee
ON
6504 struct inode *inode = file_inode(filp);
6505 struct trace_array *tr = inode->i_private;
6506 int cpu = tracing_get_cpu(inode);
438ced17
VN
6507 char buf[64];
6508 int r = 0;
6509 ssize_t ret;
a98a3c3f 6510
db526ca3 6511 mutex_lock(&trace_types_lock);
438ced17 6512
0bc392ee 6513 if (cpu == RING_BUFFER_ALL_CPUS) {
438ced17
VN
6514 int cpu, buf_size_same;
6515 unsigned long size;
6516
6517 size = 0;
6518 buf_size_same = 1;
6519 /* check if all cpu sizes are same */
6520 for_each_tracing_cpu(cpu) {
6521 /* fill in the size from first enabled cpu */
6522 if (size == 0)
1c5eb448
SRV
6523 size = per_cpu_ptr(tr->array_buffer.data, cpu)->entries;
6524 if (size != per_cpu_ptr(tr->array_buffer.data, cpu)->entries) {
438ced17
VN
6525 buf_size_same = 0;
6526 break;
6527 }
6528 }
6529
6530 if (buf_size_same) {
6531 if (!ring_buffer_expanded)
6532 r = sprintf(buf, "%lu (expanded: %lu)\n",
6533 size >> 10,
6534 trace_buf_size >> 10);
6535 else
6536 r = sprintf(buf, "%lu\n", size >> 10);
6537 } else
6538 r = sprintf(buf, "X\n");
6539 } else
1c5eb448 6540 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10);
438ced17 6541
db526ca3
SR
6542 mutex_unlock(&trace_types_lock);
6543
438ced17
VN
6544 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6545 return ret;
a98a3c3f
SR
6546}
6547
6548static ssize_t
6549tracing_entries_write(struct file *filp, const char __user *ubuf,
6550 size_t cnt, loff_t *ppos)
6551{
0bc392ee
ON
6552 struct inode *inode = file_inode(filp);
6553 struct trace_array *tr = inode->i_private;
a98a3c3f 6554 unsigned long val;
4f271a2a 6555 int ret;
a98a3c3f 6556
22fe9b54
PH
6557 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6558 if (ret)
c6caeeb1 6559 return ret;
a98a3c3f
SR
6560
6561 /* must have at least 1 entry */
6562 if (!val)
6563 return -EINVAL;
6564
1696b2b0
SR
6565 /* value is in KB */
6566 val <<= 10;
0bc392ee 6567 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
4f271a2a
VN
6568 if (ret < 0)
6569 return ret;
a98a3c3f 6570
cf8517cf 6571 *ppos += cnt;
a98a3c3f 6572
4f271a2a
VN
6573 return cnt;
6574}
bf5e6519 6575
f81ab074
VN
6576static ssize_t
6577tracing_total_entries_read(struct file *filp, char __user *ubuf,
6578 size_t cnt, loff_t *ppos)
6579{
6580 struct trace_array *tr = filp->private_data;
6581 char buf[64];
6582 int r, cpu;
6583 unsigned long size = 0, expanded_size = 0;
6584
6585 mutex_lock(&trace_types_lock);
6586 for_each_tracing_cpu(cpu) {
1c5eb448 6587 size += per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10;
f81ab074
VN
6588 if (!ring_buffer_expanded)
6589 expanded_size += trace_buf_size >> 10;
6590 }
6591 if (ring_buffer_expanded)
6592 r = sprintf(buf, "%lu\n", size);
6593 else
6594 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
6595 mutex_unlock(&trace_types_lock);
6596
6597 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6598}
6599
4f271a2a
VN
6600static ssize_t
6601tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
6602 size_t cnt, loff_t *ppos)
6603{
6604 /*
6605 * There is no need to read what the user has written, this function
6606 * is just to make sure that there is no error when "echo" is used
6607 */
6608
6609 *ppos += cnt;
a98a3c3f
SR
6610
6611 return cnt;
6612}
6613
4f271a2a
VN
6614static int
6615tracing_free_buffer_release(struct inode *inode, struct file *filp)
6616{
2b6080f2
SR
6617 struct trace_array *tr = inode->i_private;
6618
cf30cf67 6619 /* disable tracing ? */
983f938a 6620 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
711e1243 6621 tracer_tracing_off(tr);
4f271a2a 6622 /* resize the ring buffer to 0 */
2b6080f2 6623 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
4f271a2a 6624
7b85af63
SRRH
6625 trace_array_put(tr);
6626
4f271a2a
VN
6627 return 0;
6628}
6629
5bf9a1ee
PP
6630static ssize_t
6631tracing_mark_write(struct file *filp, const char __user *ubuf,
6632 size_t cnt, loff_t *fpos)
6633{
2d71619c 6634 struct trace_array *tr = filp->private_data;
d696b58c 6635 struct ring_buffer_event *event;
3dd80953 6636 enum event_trigger_type tt = ETT_NONE;
13292494 6637 struct trace_buffer *buffer;
d696b58c
SR
6638 struct print_entry *entry;
6639 unsigned long irq_flags;
d696b58c 6640 ssize_t written;
d696b58c
SR
6641 int size;
6642 int len;
fa32e855 6643
656c7f0d 6644/* Used in tracing_mark_raw_write() as well */
0f5e5a3a
RV
6645#define FAULTED_STR "<faulted>"
6646#define FAULTED_SIZE (sizeof(FAULTED_STR) - 1) /* '\0' is already accounted for */
5bf9a1ee 6647
c76f0694 6648 if (tracing_disabled)
5bf9a1ee
PP
6649 return -EINVAL;
6650
983f938a 6651 if (!(tr->trace_flags & TRACE_ITER_MARKERS))
5224c3a3
MSB
6652 return -EINVAL;
6653
5bf9a1ee
PP
6654 if (cnt > TRACE_BUF_SIZE)
6655 cnt = TRACE_BUF_SIZE;
6656
d696b58c 6657 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
5bf9a1ee 6658
d696b58c 6659 local_save_flags(irq_flags);
656c7f0d 6660 size = sizeof(*entry) + cnt + 2; /* add '\0' and possible '\n' */
d696b58c 6661
656c7f0d
SRRH
6662 /* If less than "<faulted>", then make sure we can still add that */
6663 if (cnt < FAULTED_SIZE)
6664 size += FAULTED_SIZE - cnt;
d696b58c 6665
1c5eb448 6666 buffer = tr->array_buffer.buffer;
3e9a8aad
SRRH
6667 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
6668 irq_flags, preempt_count());
656c7f0d 6669 if (unlikely(!event))
d696b58c 6670 /* Ring buffer disabled, return as if not open for write */
656c7f0d 6671 return -EBADF;
d696b58c
SR
6672
6673 entry = ring_buffer_event_data(event);
6674 entry->ip = _THIS_IP_;
6675
656c7f0d
SRRH
6676 len = __copy_from_user_inatomic(&entry->buf, ubuf, cnt);
6677 if (len) {
0f5e5a3a 6678 memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE);
656c7f0d
SRRH
6679 cnt = FAULTED_SIZE;
6680 written = -EFAULT;
c13d2f7c 6681 } else
656c7f0d
SRRH
6682 written = cnt;
6683 len = cnt;
5bf9a1ee 6684
3dd80953
SRV
6685 if (tr->trace_marker_file && !list_empty(&tr->trace_marker_file->triggers)) {
6686 /* do not add \n before testing triggers, but add \0 */
6687 entry->buf[cnt] = '\0';
6688 tt = event_triggers_call(tr->trace_marker_file, entry, event);
6689 }
6690
d696b58c
SR
6691 if (entry->buf[cnt - 1] != '\n') {
6692 entry->buf[cnt] = '\n';
6693 entry->buf[cnt + 1] = '\0';
6694 } else
6695 entry->buf[cnt] = '\0';
6696
458999c6
TZ
6697 if (static_branch_unlikely(&trace_marker_exports_enabled))
6698 ftrace_exports(event, TRACE_EXPORT_MARKER);
7ffbd48d 6699 __buffer_unlock_commit(buffer, event);
5bf9a1ee 6700
3dd80953
SRV
6701 if (tt)
6702 event_triggers_post_call(tr->trace_marker_file, tt);
6703
656c7f0d
SRRH
6704 if (written > 0)
6705 *fpos += written;
5bf9a1ee 6706
fa32e855
SR
6707 return written;
6708}
6709
6710/* Limit it for now to 3K (including tag) */
6711#define RAW_DATA_MAX_SIZE (1024*3)
6712
6713static ssize_t
6714tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
6715 size_t cnt, loff_t *fpos)
6716{
6717 struct trace_array *tr = filp->private_data;
6718 struct ring_buffer_event *event;
13292494 6719 struct trace_buffer *buffer;
fa32e855
SR
6720 struct raw_data_entry *entry;
6721 unsigned long irq_flags;
fa32e855 6722 ssize_t written;
fa32e855
SR
6723 int size;
6724 int len;
6725
656c7f0d
SRRH
6726#define FAULT_SIZE_ID (FAULTED_SIZE + sizeof(int))
6727
fa32e855
SR
6728 if (tracing_disabled)
6729 return -EINVAL;
6730
6731 if (!(tr->trace_flags & TRACE_ITER_MARKERS))
6732 return -EINVAL;
6733
6734 /* The marker must at least have a tag id */
6735 if (cnt < sizeof(unsigned int) || cnt > RAW_DATA_MAX_SIZE)
6736 return -EINVAL;
6737
6738 if (cnt > TRACE_BUF_SIZE)
6739 cnt = TRACE_BUF_SIZE;
6740
6741 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
6742
fa32e855
SR
6743 local_save_flags(irq_flags);
6744 size = sizeof(*entry) + cnt;
656c7f0d
SRRH
6745 if (cnt < FAULT_SIZE_ID)
6746 size += FAULT_SIZE_ID - cnt;
6747
1c5eb448 6748 buffer = tr->array_buffer.buffer;
3e9a8aad
SRRH
6749 event = __trace_buffer_lock_reserve(buffer, TRACE_RAW_DATA, size,
6750 irq_flags, preempt_count());
656c7f0d 6751 if (!event)
fa32e855 6752 /* Ring buffer disabled, return as if not open for write */
656c7f0d 6753 return -EBADF;
fa32e855
SR
6754
6755 entry = ring_buffer_event_data(event);
6756
656c7f0d
SRRH
6757 len = __copy_from_user_inatomic(&entry->id, ubuf, cnt);
6758 if (len) {
6759 entry->id = -1;
0f5e5a3a 6760 memcpy(&entry->buf, FAULTED_STR, FAULTED_SIZE);
656c7f0d 6761 written = -EFAULT;
fa32e855 6762 } else
656c7f0d 6763 written = cnt;
fa32e855
SR
6764
6765 __buffer_unlock_commit(buffer, event);
6766
656c7f0d
SRRH
6767 if (written > 0)
6768 *fpos += written;
1aa54bca
MS
6769
6770 return written;
5bf9a1ee
PP
6771}
6772
13f16d20 6773static int tracing_clock_show(struct seq_file *m, void *v)
5079f326 6774{
2b6080f2 6775 struct trace_array *tr = m->private;
5079f326
Z
6776 int i;
6777
6778 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
13f16d20 6779 seq_printf(m,
5079f326 6780 "%s%s%s%s", i ? " " : "",
2b6080f2
SR
6781 i == tr->clock_id ? "[" : "", trace_clocks[i].name,
6782 i == tr->clock_id ? "]" : "");
13f16d20 6783 seq_putc(m, '\n');
5079f326 6784
13f16d20 6785 return 0;
5079f326
Z
6786}
6787
d71bd34d 6788int tracing_set_clock(struct trace_array *tr, const char *clockstr)
5079f326 6789{
5079f326
Z
6790 int i;
6791
5079f326
Z
6792 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
6793 if (strcmp(trace_clocks[i].name, clockstr) == 0)
6794 break;
6795 }
6796 if (i == ARRAY_SIZE(trace_clocks))
6797 return -EINVAL;
6798
5079f326
Z
6799 mutex_lock(&trace_types_lock);
6800
2b6080f2
SR
6801 tr->clock_id = i;
6802
1c5eb448 6803 ring_buffer_set_clock(tr->array_buffer.buffer, trace_clocks[i].func);
5079f326 6804
60303ed3
DS
6805 /*
6806 * New clock may not be consistent with the previous clock.
6807 * Reset the buffer so that it doesn't have incomparable timestamps.
6808 */
1c5eb448 6809 tracing_reset_online_cpus(&tr->array_buffer);
12883efb
SRRH
6810
6811#ifdef CONFIG_TRACER_MAX_TRACE
170b3b10 6812 if (tr->max_buffer.buffer)
12883efb 6813 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
9457158b 6814 tracing_reset_online_cpus(&tr->max_buffer);
12883efb 6815#endif
60303ed3 6816
5079f326
Z
6817 mutex_unlock(&trace_types_lock);
6818
e1e232ca
SR
6819 return 0;
6820}
6821
6822static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
6823 size_t cnt, loff_t *fpos)
6824{
6825 struct seq_file *m = filp->private_data;
6826 struct trace_array *tr = m->private;
6827 char buf[64];
6828 const char *clockstr;
6829 int ret;
6830
6831 if (cnt >= sizeof(buf))
6832 return -EINVAL;
6833
4afe6495 6834 if (copy_from_user(buf, ubuf, cnt))
e1e232ca
SR
6835 return -EFAULT;
6836
6837 buf[cnt] = 0;
6838
6839 clockstr = strstrip(buf);
6840
6841 ret = tracing_set_clock(tr, clockstr);
6842 if (ret)
6843 return ret;
6844
5079f326
Z
6845 *fpos += cnt;
6846
6847 return cnt;
6848}
6849
13f16d20
LZ
6850static int tracing_clock_open(struct inode *inode, struct file *file)
6851{
7b85af63
SRRH
6852 struct trace_array *tr = inode->i_private;
6853 int ret;
6854
8530dec6
SRV
6855 ret = tracing_check_open_get_tr(tr);
6856 if (ret)
6857 return ret;
7b85af63
SRRH
6858
6859 ret = single_open(file, tracing_clock_show, inode->i_private);
6860 if (ret < 0)
6861 trace_array_put(tr);
6862
6863 return ret;
13f16d20
LZ
6864}
6865
2c1ea60b
TZ
6866static int tracing_time_stamp_mode_show(struct seq_file *m, void *v)
6867{
6868 struct trace_array *tr = m->private;
6869
6870 mutex_lock(&trace_types_lock);
6871
1c5eb448 6872 if (ring_buffer_time_stamp_abs(tr->array_buffer.buffer))
2c1ea60b
TZ
6873 seq_puts(m, "delta [absolute]\n");
6874 else
6875 seq_puts(m, "[delta] absolute\n");
6876
6877 mutex_unlock(&trace_types_lock);
6878
6879 return 0;
6880}
6881
6882static int tracing_time_stamp_mode_open(struct inode *inode, struct file *file)
6883{
6884 struct trace_array *tr = inode->i_private;
6885 int ret;
6886
8530dec6
SRV
6887 ret = tracing_check_open_get_tr(tr);
6888 if (ret)
6889 return ret;
2c1ea60b
TZ
6890
6891 ret = single_open(file, tracing_time_stamp_mode_show, inode->i_private);
6892 if (ret < 0)
6893 trace_array_put(tr);
6894
6895 return ret;
6896}
6897
00b41452
TZ
6898int tracing_set_time_stamp_abs(struct trace_array *tr, bool abs)
6899{
6900 int ret = 0;
6901
6902 mutex_lock(&trace_types_lock);
6903
6904 if (abs && tr->time_stamp_abs_ref++)
6905 goto out;
6906
6907 if (!abs) {
6908 if (WARN_ON_ONCE(!tr->time_stamp_abs_ref)) {
6909 ret = -EINVAL;
6910 goto out;
6911 }
6912
6913 if (--tr->time_stamp_abs_ref)
6914 goto out;
6915 }
6916
1c5eb448 6917 ring_buffer_set_time_stamp_abs(tr->array_buffer.buffer, abs);
00b41452
TZ
6918
6919#ifdef CONFIG_TRACER_MAX_TRACE
6920 if (tr->max_buffer.buffer)
6921 ring_buffer_set_time_stamp_abs(tr->max_buffer.buffer, abs);
6922#endif
6923 out:
6924 mutex_unlock(&trace_types_lock);
6925
6926 return ret;
6927}
6928
6de58e62
SRRH
6929struct ftrace_buffer_info {
6930 struct trace_iterator iter;
6931 void *spare;
73a757e6 6932 unsigned int spare_cpu;
6de58e62
SRRH
6933 unsigned int read;
6934};
6935
debdd57f
HT
6936#ifdef CONFIG_TRACER_SNAPSHOT
6937static int tracing_snapshot_open(struct inode *inode, struct file *file)
6938{
6484c71c 6939 struct trace_array *tr = inode->i_private;
debdd57f 6940 struct trace_iterator *iter;
2b6080f2 6941 struct seq_file *m;
8530dec6 6942 int ret;
debdd57f 6943
8530dec6
SRV
6944 ret = tracing_check_open_get_tr(tr);
6945 if (ret)
6946 return ret;
ff451961 6947
debdd57f 6948 if (file->f_mode & FMODE_READ) {
6484c71c 6949 iter = __tracing_open(inode, file, true);
debdd57f
HT
6950 if (IS_ERR(iter))
6951 ret = PTR_ERR(iter);
2b6080f2
SR
6952 } else {
6953 /* Writes still need the seq_file to hold the private data */
f77d09a3 6954 ret = -ENOMEM;
2b6080f2
SR
6955 m = kzalloc(sizeof(*m), GFP_KERNEL);
6956 if (!m)
f77d09a3 6957 goto out;
2b6080f2
SR
6958 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
6959 if (!iter) {
6960 kfree(m);
f77d09a3 6961 goto out;
2b6080f2 6962 }
f77d09a3
AL
6963 ret = 0;
6964
ff451961 6965 iter->tr = tr;
1c5eb448 6966 iter->array_buffer = &tr->max_buffer;
6484c71c 6967 iter->cpu_file = tracing_get_cpu(inode);
2b6080f2
SR
6968 m->private = iter;
6969 file->private_data = m;
debdd57f 6970 }
f77d09a3 6971out:
ff451961
SRRH
6972 if (ret < 0)
6973 trace_array_put(tr);
6974
debdd57f
HT
6975 return ret;
6976}
6977
6978static ssize_t
6979tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
6980 loff_t *ppos)
6981{
2b6080f2
SR
6982 struct seq_file *m = filp->private_data;
6983 struct trace_iterator *iter = m->private;
6984 struct trace_array *tr = iter->tr;
debdd57f
HT
6985 unsigned long val;
6986 int ret;
6987
6988 ret = tracing_update_buffers();
6989 if (ret < 0)
6990 return ret;
6991
6992 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6993 if (ret)
6994 return ret;
6995
6996 mutex_lock(&trace_types_lock);
6997
2b6080f2 6998 if (tr->current_trace->use_max_tr) {
debdd57f
HT
6999 ret = -EBUSY;
7000 goto out;
7001 }
7002
a35873a0
TZ
7003 arch_spin_lock(&tr->max_lock);
7004 if (tr->cond_snapshot)
7005 ret = -EBUSY;
7006 arch_spin_unlock(&tr->max_lock);
7007 if (ret)
7008 goto out;
7009
debdd57f
HT
7010 switch (val) {
7011 case 0:
f1affcaa
SRRH
7012 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
7013 ret = -EINVAL;
7014 break;
debdd57f 7015 }
3209cff4
SRRH
7016 if (tr->allocated_snapshot)
7017 free_snapshot(tr);
debdd57f
HT
7018 break;
7019 case 1:
f1affcaa
SRRH
7020/* Only allow per-cpu swap if the ring buffer supports it */
7021#ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
7022 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
7023 ret = -EINVAL;
7024 break;
7025 }
7026#endif
46cc0b44
ET
7027 if (tr->allocated_snapshot)
7028 ret = resize_buffer_duplicate_size(&tr->max_buffer,
1c5eb448 7029 &tr->array_buffer, iter->cpu_file);
46cc0b44 7030 else
2824f503 7031 ret = tracing_alloc_snapshot_instance(tr);
46cc0b44
ET
7032 if (ret < 0)
7033 break;
debdd57f
HT
7034 local_irq_disable();
7035 /* Now, we're going to swap */
f1affcaa 7036 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
a35873a0 7037 update_max_tr(tr, current, smp_processor_id(), NULL);
f1affcaa 7038 else
ce9bae55 7039 update_max_tr_single(tr, current, iter->cpu_file);
debdd57f
HT
7040 local_irq_enable();
7041 break;
7042 default:
45ad21ca 7043 if (tr->allocated_snapshot) {
f1affcaa
SRRH
7044 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
7045 tracing_reset_online_cpus(&tr->max_buffer);
7046 else
a47b53e9 7047 tracing_reset_cpu(&tr->max_buffer, iter->cpu_file);
f1affcaa 7048 }
debdd57f
HT
7049 break;
7050 }
7051
7052 if (ret >= 0) {
7053 *ppos += cnt;
7054 ret = cnt;
7055 }
7056out:
7057 mutex_unlock(&trace_types_lock);
7058 return ret;
7059}
2b6080f2
SR
7060
7061static int tracing_snapshot_release(struct inode *inode, struct file *file)
7062{
7063 struct seq_file *m = file->private_data;
ff451961
SRRH
7064 int ret;
7065
7066 ret = tracing_release(inode, file);
2b6080f2
SR
7067
7068 if (file->f_mode & FMODE_READ)
ff451961 7069 return ret;
2b6080f2
SR
7070
7071 /* If write only, the seq_file is just a stub */
7072 if (m)
7073 kfree(m->private);
7074 kfree(m);
7075
7076 return 0;
7077}
7078
6de58e62
SRRH
7079static int tracing_buffers_open(struct inode *inode, struct file *filp);
7080static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
7081 size_t count, loff_t *ppos);
7082static int tracing_buffers_release(struct inode *inode, struct file *file);
7083static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
7084 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
7085
7086static int snapshot_raw_open(struct inode *inode, struct file *filp)
7087{
7088 struct ftrace_buffer_info *info;
7089 int ret;
7090
17911ff3 7091 /* The following checks for tracefs lockdown */
6de58e62
SRRH
7092 ret = tracing_buffers_open(inode, filp);
7093 if (ret < 0)
7094 return ret;
7095
7096 info = filp->private_data;
7097
7098 if (info->iter.trace->use_max_tr) {
7099 tracing_buffers_release(inode, filp);
7100 return -EBUSY;
7101 }
7102
7103 info->iter.snapshot = true;
1c5eb448 7104 info->iter.array_buffer = &info->iter.tr->max_buffer;
6de58e62
SRRH
7105
7106 return ret;
7107}
7108
debdd57f
HT
7109#endif /* CONFIG_TRACER_SNAPSHOT */
7110
7111
6508fa76
SF
7112static const struct file_operations tracing_thresh_fops = {
7113 .open = tracing_open_generic,
7114 .read = tracing_thresh_read,
7115 .write = tracing_thresh_write,
7116 .llseek = generic_file_llseek,
7117};
7118
f971cc9a 7119#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
5e2336a0 7120static const struct file_operations tracing_max_lat_fops = {
4bf39a94
IM
7121 .open = tracing_open_generic,
7122 .read = tracing_max_lat_read,
7123 .write = tracing_max_lat_write,
b444786f 7124 .llseek = generic_file_llseek,
bc0c38d1 7125};
e428abbb 7126#endif
bc0c38d1 7127
5e2336a0 7128static const struct file_operations set_tracer_fops = {
4bf39a94
IM
7129 .open = tracing_open_generic,
7130 .read = tracing_set_trace_read,
7131 .write = tracing_set_trace_write,
b444786f 7132 .llseek = generic_file_llseek,
bc0c38d1
SR
7133};
7134
5e2336a0 7135static const struct file_operations tracing_pipe_fops = {
4bf39a94 7136 .open = tracing_open_pipe,
2a2cc8f7 7137 .poll = tracing_poll_pipe,
4bf39a94 7138 .read = tracing_read_pipe,
3c56819b 7139 .splice_read = tracing_splice_read_pipe,
4bf39a94 7140 .release = tracing_release_pipe,
b444786f 7141 .llseek = no_llseek,
b3806b43
SR
7142};
7143
5e2336a0 7144static const struct file_operations tracing_entries_fops = {
0bc392ee 7145 .open = tracing_open_generic_tr,
a98a3c3f
SR
7146 .read = tracing_entries_read,
7147 .write = tracing_entries_write,
b444786f 7148 .llseek = generic_file_llseek,
0bc392ee 7149 .release = tracing_release_generic_tr,
a98a3c3f
SR
7150};
7151
f81ab074 7152static const struct file_operations tracing_total_entries_fops = {
7b85af63 7153 .open = tracing_open_generic_tr,
f81ab074
VN
7154 .read = tracing_total_entries_read,
7155 .llseek = generic_file_llseek,
7b85af63 7156 .release = tracing_release_generic_tr,
f81ab074
VN
7157};
7158
4f271a2a 7159static const struct file_operations tracing_free_buffer_fops = {
7b85af63 7160 .open = tracing_open_generic_tr,
4f271a2a
VN
7161 .write = tracing_free_buffer_write,
7162 .release = tracing_free_buffer_release,
7163};
7164
5e2336a0 7165static const struct file_operations tracing_mark_fops = {
7b85af63 7166 .open = tracing_open_generic_tr,
5bf9a1ee 7167 .write = tracing_mark_write,
b444786f 7168 .llseek = generic_file_llseek,
7b85af63 7169 .release = tracing_release_generic_tr,
5bf9a1ee
PP
7170};
7171
fa32e855
SR
7172static const struct file_operations tracing_mark_raw_fops = {
7173 .open = tracing_open_generic_tr,
7174 .write = tracing_mark_raw_write,
7175 .llseek = generic_file_llseek,
7176 .release = tracing_release_generic_tr,
7177};
7178
5079f326 7179static const struct file_operations trace_clock_fops = {
13f16d20
LZ
7180 .open = tracing_clock_open,
7181 .read = seq_read,
7182 .llseek = seq_lseek,
7b85af63 7183 .release = tracing_single_release_tr,
5079f326
Z
7184 .write = tracing_clock_write,
7185};
7186
2c1ea60b
TZ
7187static const struct file_operations trace_time_stamp_mode_fops = {
7188 .open = tracing_time_stamp_mode_open,
7189 .read = seq_read,
7190 .llseek = seq_lseek,
7191 .release = tracing_single_release_tr,
7192};
7193
debdd57f
HT
7194#ifdef CONFIG_TRACER_SNAPSHOT
7195static const struct file_operations snapshot_fops = {
7196 .open = tracing_snapshot_open,
7197 .read = seq_read,
7198 .write = tracing_snapshot_write,
098c879e 7199 .llseek = tracing_lseek,
2b6080f2 7200 .release = tracing_snapshot_release,
debdd57f 7201};
debdd57f 7202
6de58e62
SRRH
7203static const struct file_operations snapshot_raw_fops = {
7204 .open = snapshot_raw_open,
7205 .read = tracing_buffers_read,
7206 .release = tracing_buffers_release,
7207 .splice_read = tracing_buffers_splice_read,
7208 .llseek = no_llseek,
2cadf913
SR
7209};
7210
6de58e62
SRRH
7211#endif /* CONFIG_TRACER_SNAPSHOT */
7212
8a062902
TZ
7213#define TRACING_LOG_ERRS_MAX 8
7214#define TRACING_LOG_LOC_MAX 128
7215
7216#define CMD_PREFIX " Command: "
7217
7218struct err_info {
7219 const char **errs; /* ptr to loc-specific array of err strings */
7220 u8 type; /* index into errs -> specific err string */
7221 u8 pos; /* MAX_FILTER_STR_VAL = 256 */
7222 u64 ts;
7223};
7224
7225struct tracing_log_err {
7226 struct list_head list;
7227 struct err_info info;
7228 char loc[TRACING_LOG_LOC_MAX]; /* err location */
7229 char cmd[MAX_FILTER_STR_VAL]; /* what caused err */
7230};
7231
8a062902
TZ
7232static DEFINE_MUTEX(tracing_err_log_lock);
7233
ff585c5b 7234static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr)
8a062902
TZ
7235{
7236 struct tracing_log_err *err;
7237
2f754e77 7238 if (tr->n_err_log_entries < TRACING_LOG_ERRS_MAX) {
8a062902
TZ
7239 err = kzalloc(sizeof(*err), GFP_KERNEL);
7240 if (!err)
7241 err = ERR_PTR(-ENOMEM);
2f754e77 7242 tr->n_err_log_entries++;
8a062902
TZ
7243
7244 return err;
7245 }
7246
2f754e77 7247 err = list_first_entry(&tr->err_log, struct tracing_log_err, list);
8a062902
TZ
7248 list_del(&err->list);
7249
7250 return err;
7251}
7252
7253/**
7254 * err_pos - find the position of a string within a command for error careting
7255 * @cmd: The tracing command that caused the error
7256 * @str: The string to position the caret at within @cmd
7257 *
7258 * Finds the position of the first occurence of @str within @cmd. The
7259 * return value can be passed to tracing_log_err() for caret placement
7260 * within @cmd.
7261 *
7262 * Returns the index within @cmd of the first occurence of @str or 0
7263 * if @str was not found.
7264 */
7265unsigned int err_pos(char *cmd, const char *str)
7266{
7267 char *found;
7268
7269 if (WARN_ON(!strlen(cmd)))
7270 return 0;
7271
7272 found = strstr(cmd, str);
7273 if (found)
7274 return found - cmd;
7275
7276 return 0;
7277}
7278
7279/**
7280 * tracing_log_err - write an error to the tracing error log
2f754e77 7281 * @tr: The associated trace array for the error (NULL for top level array)
8a062902
TZ
7282 * @loc: A string describing where the error occurred
7283 * @cmd: The tracing command that caused the error
7284 * @errs: The array of loc-specific static error strings
7285 * @type: The index into errs[], which produces the specific static err string
7286 * @pos: The position the caret should be placed in the cmd
7287 *
7288 * Writes an error into tracing/error_log of the form:
7289 *
7290 * <loc>: error: <text>
7291 * Command: <cmd>
7292 * ^
7293 *
7294 * tracing/error_log is a small log file containing the last
7295 * TRACING_LOG_ERRS_MAX errors (8). Memory for errors isn't allocated
7296 * unless there has been a tracing error, and the error log can be
7297 * cleared and have its memory freed by writing the empty string in
7298 * truncation mode to it i.e. echo > tracing/error_log.
7299 *
7300 * NOTE: the @errs array along with the @type param are used to
7301 * produce a static error string - this string is not copied and saved
7302 * when the error is logged - only a pointer to it is saved. See
7303 * existing callers for examples of how static strings are typically
7304 * defined for use with tracing_log_err().
7305 */
2f754e77
SRV
7306void tracing_log_err(struct trace_array *tr,
7307 const char *loc, const char *cmd,
8a062902
TZ
7308 const char **errs, u8 type, u8 pos)
7309{
7310 struct tracing_log_err *err;
7311
2f754e77
SRV
7312 if (!tr)
7313 tr = &global_trace;
7314
8a062902 7315 mutex_lock(&tracing_err_log_lock);
2f754e77 7316 err = get_tracing_log_err(tr);
8a062902
TZ
7317 if (PTR_ERR(err) == -ENOMEM) {
7318 mutex_unlock(&tracing_err_log_lock);
7319 return;
7320 }
7321
7322 snprintf(err->loc, TRACING_LOG_LOC_MAX, "%s: error: ", loc);
7323 snprintf(err->cmd, MAX_FILTER_STR_VAL,"\n" CMD_PREFIX "%s\n", cmd);
7324
7325 err->info.errs = errs;
7326 err->info.type = type;
7327 err->info.pos = pos;
7328 err->info.ts = local_clock();
7329
2f754e77 7330 list_add_tail(&err->list, &tr->err_log);
8a062902
TZ
7331 mutex_unlock(&tracing_err_log_lock);
7332}
7333
2f754e77 7334static void clear_tracing_err_log(struct trace_array *tr)
8a062902
TZ
7335{
7336 struct tracing_log_err *err, *next;
7337
7338 mutex_lock(&tracing_err_log_lock);
2f754e77 7339 list_for_each_entry_safe(err, next, &tr->err_log, list) {
8a062902
TZ
7340 list_del(&err->list);
7341 kfree(err);
7342 }
7343
2f754e77 7344 tr->n_err_log_entries = 0;
8a062902
TZ
7345 mutex_unlock(&tracing_err_log_lock);
7346}
7347
7348static void *tracing_err_log_seq_start(struct seq_file *m, loff_t *pos)
7349{
2f754e77
SRV
7350 struct trace_array *tr = m->private;
7351
8a062902
TZ
7352 mutex_lock(&tracing_err_log_lock);
7353
2f754e77 7354 return seq_list_start(&tr->err_log, *pos);
8a062902
TZ
7355}
7356
7357static void *tracing_err_log_seq_next(struct seq_file *m, void *v, loff_t *pos)
7358{
2f754e77
SRV
7359 struct trace_array *tr = m->private;
7360
7361 return seq_list_next(v, &tr->err_log, pos);
8a062902
TZ
7362}
7363
7364static void tracing_err_log_seq_stop(struct seq_file *m, void *v)
7365{
7366 mutex_unlock(&tracing_err_log_lock);
7367}
7368
7369static void tracing_err_log_show_pos(struct seq_file *m, u8 pos)
7370{
7371 u8 i;
7372
7373 for (i = 0; i < sizeof(CMD_PREFIX) - 1; i++)
7374 seq_putc(m, ' ');
7375 for (i = 0; i < pos; i++)
7376 seq_putc(m, ' ');
7377 seq_puts(m, "^\n");
7378}
7379
7380static int tracing_err_log_seq_show(struct seq_file *m, void *v)
7381{
7382 struct tracing_log_err *err = v;
7383
7384 if (err) {
7385 const char *err_text = err->info.errs[err->info.type];
7386 u64 sec = err->info.ts;
7387 u32 nsec;
7388
7389 nsec = do_div(sec, NSEC_PER_SEC);
7390 seq_printf(m, "[%5llu.%06u] %s%s", sec, nsec / 1000,
7391 err->loc, err_text);
7392 seq_printf(m, "%s", err->cmd);
7393 tracing_err_log_show_pos(m, err->info.pos);
7394 }
7395
7396 return 0;
7397}
7398
7399static const struct seq_operations tracing_err_log_seq_ops = {
7400 .start = tracing_err_log_seq_start,
7401 .next = tracing_err_log_seq_next,
7402 .stop = tracing_err_log_seq_stop,
7403 .show = tracing_err_log_seq_show
7404};
7405
7406static int tracing_err_log_open(struct inode *inode, struct file *file)
7407{
2f754e77 7408 struct trace_array *tr = inode->i_private;
8a062902
TZ
7409 int ret = 0;
7410
8530dec6
SRV
7411 ret = tracing_check_open_get_tr(tr);
7412 if (ret)
7413 return ret;
2f754e77 7414
8a062902
TZ
7415 /* If this file was opened for write, then erase contents */
7416 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC))
2f754e77 7417 clear_tracing_err_log(tr);
8a062902 7418
2f754e77 7419 if (file->f_mode & FMODE_READ) {
8a062902 7420 ret = seq_open(file, &tracing_err_log_seq_ops);
2f754e77
SRV
7421 if (!ret) {
7422 struct seq_file *m = file->private_data;
7423 m->private = tr;
7424 } else {
7425 trace_array_put(tr);
7426 }
7427 }
8a062902
TZ
7428 return ret;
7429}
7430
7431static ssize_t tracing_err_log_write(struct file *file,
7432 const char __user *buffer,
7433 size_t count, loff_t *ppos)
7434{
7435 return count;
7436}
7437
d122ed62
TM
7438static int tracing_err_log_release(struct inode *inode, struct file *file)
7439{
7440 struct trace_array *tr = inode->i_private;
7441
7442 trace_array_put(tr);
7443
7444 if (file->f_mode & FMODE_READ)
7445 seq_release(inode, file);
7446
7447 return 0;
7448}
7449
8a062902
TZ
7450static const struct file_operations tracing_err_log_fops = {
7451 .open = tracing_err_log_open,
7452 .write = tracing_err_log_write,
7453 .read = seq_read,
7454 .llseek = seq_lseek,
d122ed62 7455 .release = tracing_err_log_release,
8a062902
TZ
7456};
7457
2cadf913
SR
7458static int tracing_buffers_open(struct inode *inode, struct file *filp)
7459{
46ef2be0 7460 struct trace_array *tr = inode->i_private;
2cadf913 7461 struct ftrace_buffer_info *info;
7b85af63 7462 int ret;
2cadf913 7463
8530dec6
SRV
7464 ret = tracing_check_open_get_tr(tr);
7465 if (ret)
7466 return ret;
7b85af63 7467
0f69dae4 7468 info = kvzalloc(sizeof(*info), GFP_KERNEL);
7b85af63
SRRH
7469 if (!info) {
7470 trace_array_put(tr);
2cadf913 7471 return -ENOMEM;
7b85af63 7472 }
2cadf913 7473
a695cb58
SRRH
7474 mutex_lock(&trace_types_lock);
7475
cc60cdc9 7476 info->iter.tr = tr;
46ef2be0 7477 info->iter.cpu_file = tracing_get_cpu(inode);
b627344f 7478 info->iter.trace = tr->current_trace;
1c5eb448 7479 info->iter.array_buffer = &tr->array_buffer;
cc60cdc9 7480 info->spare = NULL;
2cadf913 7481 /* Force reading ring buffer for first read */
cc60cdc9 7482 info->read = (unsigned int)-1;
2cadf913
SR
7483
7484 filp->private_data = info;
7485
7ef282e0 7486 tr->trace_ref++;
cf6ab6d9 7487
a695cb58
SRRH
7488 mutex_unlock(&trace_types_lock);
7489
7b85af63
SRRH
7490 ret = nonseekable_open(inode, filp);
7491 if (ret < 0)
7492 trace_array_put(tr);
7493
7494 return ret;
2cadf913
SR
7495}
7496
9dd95748 7497static __poll_t
cc60cdc9
SR
7498tracing_buffers_poll(struct file *filp, poll_table *poll_table)
7499{
7500 struct ftrace_buffer_info *info = filp->private_data;
7501 struct trace_iterator *iter = &info->iter;
7502
7503 return trace_poll(iter, filp, poll_table);
7504}
7505
2cadf913
SR
7506static ssize_t
7507tracing_buffers_read(struct file *filp, char __user *ubuf,
7508 size_t count, loff_t *ppos)
7509{
7510 struct ftrace_buffer_info *info = filp->private_data;
cc60cdc9 7511 struct trace_iterator *iter = &info->iter;
a7e52ad7 7512 ssize_t ret = 0;
6de58e62 7513 ssize_t size;
2cadf913 7514
2dc5d12b
SR
7515 if (!count)
7516 return 0;
7517
6de58e62 7518#ifdef CONFIG_TRACER_MAX_TRACE
d716ff71
SRRH
7519 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
7520 return -EBUSY;
6de58e62
SRRH
7521#endif
7522
73a757e6 7523 if (!info->spare) {
1c5eb448 7524 info->spare = ring_buffer_alloc_read_page(iter->array_buffer->buffer,
12883efb 7525 iter->cpu_file);
a7e52ad7
SRV
7526 if (IS_ERR(info->spare)) {
7527 ret = PTR_ERR(info->spare);
7528 info->spare = NULL;
7529 } else {
7530 info->spare_cpu = iter->cpu_file;
7531 }
73a757e6 7532 }
ddd538f3 7533 if (!info->spare)
a7e52ad7 7534 return ret;
ddd538f3 7535
2cadf913
SR
7536 /* Do we have previous read data to read? */
7537 if (info->read < PAGE_SIZE)
7538 goto read;
7539
b627344f 7540 again:
cc60cdc9 7541 trace_access_lock(iter->cpu_file);
1c5eb448 7542 ret = ring_buffer_read_page(iter->array_buffer->buffer,
2cadf913
SR
7543 &info->spare,
7544 count,
cc60cdc9
SR
7545 iter->cpu_file, 0);
7546 trace_access_unlock(iter->cpu_file);
2cadf913 7547
b627344f
SR
7548 if (ret < 0) {
7549 if (trace_empty(iter)) {
d716ff71
SRRH
7550 if ((filp->f_flags & O_NONBLOCK))
7551 return -EAGAIN;
7552
2c2b0a78 7553 ret = wait_on_pipe(iter, 0);
d716ff71
SRRH
7554 if (ret)
7555 return ret;
7556
b627344f
SR
7557 goto again;
7558 }
d716ff71 7559 return 0;
b627344f 7560 }
436fc280 7561
436fc280 7562 info->read = 0;
b627344f 7563 read:
2cadf913
SR
7564 size = PAGE_SIZE - info->read;
7565 if (size > count)
7566 size = count;
7567
7568 ret = copy_to_user(ubuf, info->spare + info->read, size);
d716ff71
SRRH
7569 if (ret == size)
7570 return -EFAULT;
7571
2dc5d12b
SR
7572 size -= ret;
7573
2cadf913
SR
7574 *ppos += size;
7575 info->read += size;
7576
7577 return size;
7578}
7579
7580static int tracing_buffers_release(struct inode *inode, struct file *file)
7581{
7582 struct ftrace_buffer_info *info = file->private_data;
cc60cdc9 7583 struct trace_iterator *iter = &info->iter;
2cadf913 7584
a695cb58
SRRH
7585 mutex_lock(&trace_types_lock);
7586
7ef282e0 7587 iter->tr->trace_ref--;
cf6ab6d9 7588
ff451961 7589 __trace_array_put(iter->tr);
2cadf913 7590
ddd538f3 7591 if (info->spare)
1c5eb448 7592 ring_buffer_free_read_page(iter->array_buffer->buffer,
73a757e6 7593 info->spare_cpu, info->spare);
0f69dae4 7594 kvfree(info);
2cadf913 7595
a695cb58
SRRH
7596 mutex_unlock(&trace_types_lock);
7597
2cadf913
SR
7598 return 0;
7599}
7600
7601struct buffer_ref {
13292494 7602 struct trace_buffer *buffer;
2cadf913 7603 void *page;
73a757e6 7604 int cpu;
b9872226 7605 refcount_t refcount;
2cadf913
SR
7606};
7607
b9872226
JH
7608static void buffer_ref_release(struct buffer_ref *ref)
7609{
7610 if (!refcount_dec_and_test(&ref->refcount))
7611 return;
7612 ring_buffer_free_read_page(ref->buffer, ref->cpu, ref->page);
7613 kfree(ref);
7614}
7615
2cadf913
SR
7616static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
7617 struct pipe_buffer *buf)
7618{
7619 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
7620
b9872226 7621 buffer_ref_release(ref);
2cadf913
SR
7622 buf->private = 0;
7623}
7624
15fab63e 7625static bool buffer_pipe_buf_get(struct pipe_inode_info *pipe,
2cadf913
SR
7626 struct pipe_buffer *buf)
7627{
7628 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
7629
e9e1a2e7 7630 if (refcount_read(&ref->refcount) > INT_MAX/2)
15fab63e
MW
7631 return false;
7632
b9872226 7633 refcount_inc(&ref->refcount);
15fab63e 7634 return true;
2cadf913
SR
7635}
7636
7637/* Pipe buffer operations for a buffer. */
28dfef8f 7638static const struct pipe_buf_operations buffer_pipe_buf_ops = {
2cadf913 7639 .release = buffer_pipe_buf_release,
2cadf913
SR
7640 .get = buffer_pipe_buf_get,
7641};
7642
7643/*
7644 * Callback from splice_to_pipe(), if we need to release some pages
7645 * at the end of the spd in case we error'ed out in filling the pipe.
7646 */
7647static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
7648{
7649 struct buffer_ref *ref =
7650 (struct buffer_ref *)spd->partial[i].private;
7651
b9872226 7652 buffer_ref_release(ref);
2cadf913
SR
7653 spd->partial[i].private = 0;
7654}
7655
7656static ssize_t
7657tracing_buffers_splice_read(struct file *file, loff_t *ppos,
7658 struct pipe_inode_info *pipe, size_t len,
7659 unsigned int flags)
7660{
7661 struct ftrace_buffer_info *info = file->private_data;
cc60cdc9 7662 struct trace_iterator *iter = &info->iter;
35f3d14d
JA
7663 struct partial_page partial_def[PIPE_DEF_BUFFERS];
7664 struct page *pages_def[PIPE_DEF_BUFFERS];
2cadf913 7665 struct splice_pipe_desc spd = {
35f3d14d
JA
7666 .pages = pages_def,
7667 .partial = partial_def,
047fe360 7668 .nr_pages_max = PIPE_DEF_BUFFERS,
2cadf913
SR
7669 .ops = &buffer_pipe_buf_ops,
7670 .spd_release = buffer_spd_release,
7671 };
7672 struct buffer_ref *ref;
6b7e633f 7673 int entries, i;
07906da7 7674 ssize_t ret = 0;
2cadf913 7675
6de58e62 7676#ifdef CONFIG_TRACER_MAX_TRACE
d716ff71
SRRH
7677 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
7678 return -EBUSY;
6de58e62
SRRH
7679#endif
7680
d716ff71
SRRH
7681 if (*ppos & (PAGE_SIZE - 1))
7682 return -EINVAL;
93cfb3c9
LJ
7683
7684 if (len & (PAGE_SIZE - 1)) {
d716ff71
SRRH
7685 if (len < PAGE_SIZE)
7686 return -EINVAL;
93cfb3c9
LJ
7687 len &= PAGE_MASK;
7688 }
7689
1ae2293d
AV
7690 if (splice_grow_spd(pipe, &spd))
7691 return -ENOMEM;
7692
cc60cdc9
SR
7693 again:
7694 trace_access_lock(iter->cpu_file);
1c5eb448 7695 entries = ring_buffer_entries_cpu(iter->array_buffer->buffer, iter->cpu_file);
93459c6c 7696
a786c06d 7697 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
2cadf913
SR
7698 struct page *page;
7699 int r;
7700
7701 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
07906da7
RV
7702 if (!ref) {
7703 ret = -ENOMEM;
2cadf913 7704 break;
07906da7 7705 }
2cadf913 7706
b9872226 7707 refcount_set(&ref->refcount, 1);
1c5eb448 7708 ref->buffer = iter->array_buffer->buffer;
cc60cdc9 7709 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
a7e52ad7
SRV
7710 if (IS_ERR(ref->page)) {
7711 ret = PTR_ERR(ref->page);
7712 ref->page = NULL;
2cadf913
SR
7713 kfree(ref);
7714 break;
7715 }
73a757e6 7716 ref->cpu = iter->cpu_file;
2cadf913
SR
7717
7718 r = ring_buffer_read_page(ref->buffer, &ref->page,
cc60cdc9 7719 len, iter->cpu_file, 1);
2cadf913 7720 if (r < 0) {
73a757e6
SRV
7721 ring_buffer_free_read_page(ref->buffer, ref->cpu,
7722 ref->page);
2cadf913
SR
7723 kfree(ref);
7724 break;
7725 }
7726
2cadf913
SR
7727 page = virt_to_page(ref->page);
7728
7729 spd.pages[i] = page;
7730 spd.partial[i].len = PAGE_SIZE;
7731 spd.partial[i].offset = 0;
7732 spd.partial[i].private = (unsigned long)ref;
7733 spd.nr_pages++;
93cfb3c9 7734 *ppos += PAGE_SIZE;
93459c6c 7735
1c5eb448 7736 entries = ring_buffer_entries_cpu(iter->array_buffer->buffer, iter->cpu_file);
2cadf913
SR
7737 }
7738
cc60cdc9 7739 trace_access_unlock(iter->cpu_file);
2cadf913
SR
7740 spd.nr_pages = i;
7741
7742 /* did we read anything? */
7743 if (!spd.nr_pages) {
07906da7 7744 if (ret)
1ae2293d 7745 goto out;
d716ff71 7746
1ae2293d 7747 ret = -EAGAIN;
d716ff71 7748 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
1ae2293d 7749 goto out;
07906da7 7750
03329f99 7751 ret = wait_on_pipe(iter, iter->tr->buffer_percent);
8b8b3683 7752 if (ret)
1ae2293d 7753 goto out;
e30f53aa 7754
cc60cdc9 7755 goto again;
2cadf913
SR
7756 }
7757
7758 ret = splice_to_pipe(pipe, &spd);
1ae2293d 7759out:
047fe360 7760 splice_shrink_spd(&spd);
6de58e62 7761
2cadf913
SR
7762 return ret;
7763}
7764
7765static const struct file_operations tracing_buffers_fops = {
7766 .open = tracing_buffers_open,
7767 .read = tracing_buffers_read,
cc60cdc9 7768 .poll = tracing_buffers_poll,
2cadf913
SR
7769 .release = tracing_buffers_release,
7770 .splice_read = tracing_buffers_splice_read,
7771 .llseek = no_llseek,
7772};
7773
c8d77183
SR
7774static ssize_t
7775tracing_stats_read(struct file *filp, char __user *ubuf,
7776 size_t count, loff_t *ppos)
7777{
4d3435b8
ON
7778 struct inode *inode = file_inode(filp);
7779 struct trace_array *tr = inode->i_private;
1c5eb448 7780 struct array_buffer *trace_buf = &tr->array_buffer;
4d3435b8 7781 int cpu = tracing_get_cpu(inode);
c8d77183
SR
7782 struct trace_seq *s;
7783 unsigned long cnt;
c64e148a
VN
7784 unsigned long long t;
7785 unsigned long usec_rem;
c8d77183 7786
e4f2d10f 7787 s = kmalloc(sizeof(*s), GFP_KERNEL);
c8d77183 7788 if (!s)
a646365c 7789 return -ENOMEM;
c8d77183
SR
7790
7791 trace_seq_init(s);
7792
12883efb 7793 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
c8d77183
SR
7794 trace_seq_printf(s, "entries: %ld\n", cnt);
7795
12883efb 7796 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
c8d77183
SR
7797 trace_seq_printf(s, "overrun: %ld\n", cnt);
7798
12883efb 7799 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
c8d77183
SR
7800 trace_seq_printf(s, "commit overrun: %ld\n", cnt);
7801
12883efb 7802 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
c64e148a
VN
7803 trace_seq_printf(s, "bytes: %ld\n", cnt);
7804
58e8eedf 7805 if (trace_clocks[tr->clock_id].in_ns) {
11043d8b 7806 /* local or global for trace_clock */
12883efb 7807 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
11043d8b
YY
7808 usec_rem = do_div(t, USEC_PER_SEC);
7809 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
7810 t, usec_rem);
7811
12883efb 7812 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
11043d8b
YY
7813 usec_rem = do_div(t, USEC_PER_SEC);
7814 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
7815 } else {
7816 /* counter or tsc mode for trace_clock */
7817 trace_seq_printf(s, "oldest event ts: %llu\n",
12883efb 7818 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
c64e148a 7819
11043d8b 7820 trace_seq_printf(s, "now ts: %llu\n",
12883efb 7821 ring_buffer_time_stamp(trace_buf->buffer, cpu));
11043d8b 7822 }
c64e148a 7823
12883efb 7824 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
884bfe89
SP
7825 trace_seq_printf(s, "dropped events: %ld\n", cnt);
7826
12883efb 7827 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
ad964704
SRRH
7828 trace_seq_printf(s, "read events: %ld\n", cnt);
7829
5ac48378
SRRH
7830 count = simple_read_from_buffer(ubuf, count, ppos,
7831 s->buffer, trace_seq_used(s));
c8d77183
SR
7832
7833 kfree(s);
7834
7835 return count;
7836}
7837
7838static const struct file_operations tracing_stats_fops = {
4d3435b8 7839 .open = tracing_open_generic_tr,
c8d77183 7840 .read = tracing_stats_read,
b444786f 7841 .llseek = generic_file_llseek,
4d3435b8 7842 .release = tracing_release_generic_tr,
c8d77183
SR
7843};
7844
bc0c38d1
SR
7845#ifdef CONFIG_DYNAMIC_FTRACE
7846
7847static ssize_t
b807c3d0 7848tracing_read_dyn_info(struct file *filp, char __user *ubuf,
bc0c38d1
SR
7849 size_t cnt, loff_t *ppos)
7850{
da537f0a
SRV
7851 ssize_t ret;
7852 char *buf;
bc0c38d1
SR
7853 int r;
7854
da537f0a
SRV
7855 /* 256 should be plenty to hold the amount needed */
7856 buf = kmalloc(256, GFP_KERNEL);
7857 if (!buf)
7858 return -ENOMEM;
b807c3d0 7859
da537f0a
SRV
7860 r = scnprintf(buf, 256, "%ld pages:%ld groups: %ld\n",
7861 ftrace_update_tot_cnt,
7862 ftrace_number_of_pages,
7863 ftrace_number_of_groups);
7864
7865 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
7866 kfree(buf);
7867 return ret;
bc0c38d1
SR
7868}
7869
5e2336a0 7870static const struct file_operations tracing_dyn_info_fops = {
4bf39a94 7871 .open = tracing_open_generic,
b807c3d0 7872 .read = tracing_read_dyn_info,
b444786f 7873 .llseek = generic_file_llseek,
bc0c38d1 7874};
77fd5c15 7875#endif /* CONFIG_DYNAMIC_FTRACE */
bc0c38d1 7876
77fd5c15
SRRH
7877#if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
7878static void
bca6c8d0 7879ftrace_snapshot(unsigned long ip, unsigned long parent_ip,
b5f081b5 7880 struct trace_array *tr, struct ftrace_probe_ops *ops,
6e444319 7881 void *data)
77fd5c15 7882{
cab50379 7883 tracing_snapshot_instance(tr);
77fd5c15 7884}
bc0c38d1 7885
77fd5c15 7886static void
bca6c8d0 7887ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip,
b5f081b5 7888 struct trace_array *tr, struct ftrace_probe_ops *ops,
6e444319 7889 void *data)
bc0c38d1 7890{
6e444319 7891 struct ftrace_func_mapper *mapper = data;
1a93f8bd 7892 long *count = NULL;
77fd5c15 7893
1a93f8bd
SRV
7894 if (mapper)
7895 count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
7896
7897 if (count) {
7898
7899 if (*count <= 0)
7900 return;
bc0c38d1 7901
77fd5c15 7902 (*count)--;
1a93f8bd 7903 }
77fd5c15 7904
cab50379 7905 tracing_snapshot_instance(tr);
77fd5c15
SRRH
7906}
7907
7908static int
7909ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
7910 struct ftrace_probe_ops *ops, void *data)
7911{
6e444319 7912 struct ftrace_func_mapper *mapper = data;
1a93f8bd 7913 long *count = NULL;
77fd5c15
SRRH
7914
7915 seq_printf(m, "%ps:", (void *)ip);
7916
fa6f0cc7 7917 seq_puts(m, "snapshot");
77fd5c15 7918
1a93f8bd
SRV
7919 if (mapper)
7920 count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
7921
7922 if (count)
7923 seq_printf(m, ":count=%ld\n", *count);
77fd5c15 7924 else
1a93f8bd 7925 seq_puts(m, ":unlimited\n");
77fd5c15
SRRH
7926
7927 return 0;
7928}
7929
1a93f8bd 7930static int
b5f081b5 7931ftrace_snapshot_init(struct ftrace_probe_ops *ops, struct trace_array *tr,
6e444319 7932 unsigned long ip, void *init_data, void **data)
1a93f8bd 7933{
6e444319
SRV
7934 struct ftrace_func_mapper *mapper = *data;
7935
7936 if (!mapper) {
7937 mapper = allocate_ftrace_func_mapper();
7938 if (!mapper)
7939 return -ENOMEM;
7940 *data = mapper;
7941 }
1a93f8bd 7942
6e444319 7943 return ftrace_func_mapper_add_ip(mapper, ip, init_data);
1a93f8bd
SRV
7944}
7945
7946static void
b5f081b5 7947ftrace_snapshot_free(struct ftrace_probe_ops *ops, struct trace_array *tr,
6e444319 7948 unsigned long ip, void *data)
1a93f8bd 7949{
6e444319
SRV
7950 struct ftrace_func_mapper *mapper = data;
7951
7952 if (!ip) {
7953 if (!mapper)
7954 return;
7955 free_ftrace_func_mapper(mapper, NULL);
7956 return;
7957 }
1a93f8bd
SRV
7958
7959 ftrace_func_mapper_remove_ip(mapper, ip);
7960}
7961
77fd5c15
SRRH
7962static struct ftrace_probe_ops snapshot_probe_ops = {
7963 .func = ftrace_snapshot,
7964 .print = ftrace_snapshot_print,
7965};
7966
7967static struct ftrace_probe_ops snapshot_count_probe_ops = {
7968 .func = ftrace_count_snapshot,
7969 .print = ftrace_snapshot_print,
1a93f8bd
SRV
7970 .init = ftrace_snapshot_init,
7971 .free = ftrace_snapshot_free,
77fd5c15
SRRH
7972};
7973
7974static int
04ec7bb6 7975ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash,
77fd5c15
SRRH
7976 char *glob, char *cmd, char *param, int enable)
7977{
7978 struct ftrace_probe_ops *ops;
7979 void *count = (void *)-1;
7980 char *number;
7981 int ret;
7982
0f179765
SRV
7983 if (!tr)
7984 return -ENODEV;
7985
77fd5c15
SRRH
7986 /* hash funcs only work with set_ftrace_filter */
7987 if (!enable)
7988 return -EINVAL;
7989
7990 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops;
7991
d3d532d7 7992 if (glob[0] == '!')
7b60f3d8 7993 return unregister_ftrace_function_probe_func(glob+1, tr, ops);
77fd5c15
SRRH
7994
7995 if (!param)
7996 goto out_reg;
7997
7998 number = strsep(&param, ":");
7999
8000 if (!strlen(number))
8001 goto out_reg;
8002
8003 /*
8004 * We use the callback data field (which is a pointer)
8005 * as our counter.
8006 */
8007 ret = kstrtoul(number, 0, (unsigned long *)&count);
8008 if (ret)
8009 return ret;
8010
8011 out_reg:
2824f503 8012 ret = tracing_alloc_snapshot_instance(tr);
df62db5b
SRV
8013 if (ret < 0)
8014 goto out;
77fd5c15 8015
4c174688 8016 ret = register_ftrace_function_probe(glob, tr, ops, count);
77fd5c15 8017
df62db5b 8018 out:
77fd5c15
SRRH
8019 return ret < 0 ? ret : 0;
8020}
8021
8022static struct ftrace_func_command ftrace_snapshot_cmd = {
8023 .name = "snapshot",
8024 .func = ftrace_trace_snapshot_callback,
8025};
8026
38de93ab 8027static __init int register_snapshot_cmd(void)
77fd5c15
SRRH
8028{
8029 return register_ftrace_command(&ftrace_snapshot_cmd);
8030}
8031#else
38de93ab 8032static inline __init int register_snapshot_cmd(void) { return 0; }
77fd5c15 8033#endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
bc0c38d1 8034
7eeafbca 8035static struct dentry *tracing_get_dentry(struct trace_array *tr)
bc0c38d1 8036{
8434dc93
SRRH
8037 if (WARN_ON(!tr->dir))
8038 return ERR_PTR(-ENODEV);
8039
8040 /* Top directory uses NULL as the parent */
8041 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
8042 return NULL;
8043
8044 /* All sub buffers have a descriptor */
2b6080f2 8045 return tr->dir;
bc0c38d1
SR
8046}
8047
2b6080f2 8048static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
b04cc6b1 8049{
b04cc6b1
FW
8050 struct dentry *d_tracer;
8051
2b6080f2
SR
8052 if (tr->percpu_dir)
8053 return tr->percpu_dir;
b04cc6b1 8054
7eeafbca 8055 d_tracer = tracing_get_dentry(tr);
14a5ae40 8056 if (IS_ERR(d_tracer))
b04cc6b1
FW
8057 return NULL;
8058
8434dc93 8059 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
b04cc6b1 8060
24589e3a 8061 MEM_FAIL(!tr->percpu_dir,
8434dc93 8062 "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
b04cc6b1 8063
2b6080f2 8064 return tr->percpu_dir;
b04cc6b1
FW
8065}
8066
649e9c70
ON
8067static struct dentry *
8068trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
8069 void *data, long cpu, const struct file_operations *fops)
8070{
8071 struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
8072
8073 if (ret) /* See tracing_get_cpu() */
7682c918 8074 d_inode(ret)->i_cdev = (void *)(cpu + 1);
649e9c70
ON
8075 return ret;
8076}
8077
2b6080f2 8078static void
8434dc93 8079tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
b04cc6b1 8080{
2b6080f2 8081 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
5452af66 8082 struct dentry *d_cpu;
dd49a38c 8083 char cpu_dir[30]; /* 30 characters should be more than enough */
b04cc6b1 8084
0a3d7ce7
NK
8085 if (!d_percpu)
8086 return;
8087
dd49a38c 8088 snprintf(cpu_dir, 30, "cpu%ld", cpu);
8434dc93 8089 d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
8656e7a2 8090 if (!d_cpu) {
a395d6a7 8091 pr_warn("Could not create tracefs '%s' entry\n", cpu_dir);
8656e7a2
FW
8092 return;
8093 }
b04cc6b1 8094
8656e7a2 8095 /* per cpu trace_pipe */
649e9c70 8096 trace_create_cpu_file("trace_pipe", 0444, d_cpu,
15544209 8097 tr, cpu, &tracing_pipe_fops);
b04cc6b1
FW
8098
8099 /* per cpu trace */
649e9c70 8100 trace_create_cpu_file("trace", 0644, d_cpu,
6484c71c 8101 tr, cpu, &tracing_fops);
7f96f93f 8102
649e9c70 8103 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
46ef2be0 8104 tr, cpu, &tracing_buffers_fops);
7f96f93f 8105
649e9c70 8106 trace_create_cpu_file("stats", 0444, d_cpu,
4d3435b8 8107 tr, cpu, &tracing_stats_fops);
438ced17 8108
649e9c70 8109 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
0bc392ee 8110 tr, cpu, &tracing_entries_fops);
f1affcaa
SRRH
8111
8112#ifdef CONFIG_TRACER_SNAPSHOT
649e9c70 8113 trace_create_cpu_file("snapshot", 0644, d_cpu,
6484c71c 8114 tr, cpu, &snapshot_fops);
6de58e62 8115
649e9c70 8116 trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
46ef2be0 8117 tr, cpu, &snapshot_raw_fops);
f1affcaa 8118#endif
b04cc6b1
FW
8119}
8120
60a11774
SR
8121#ifdef CONFIG_FTRACE_SELFTEST
8122/* Let selftest have access to static functions in this file */
8123#include "trace_selftest.c"
8124#endif
8125
577b785f
SR
8126static ssize_t
8127trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
8128 loff_t *ppos)
8129{
8130 struct trace_option_dentry *topt = filp->private_data;
8131 char *buf;
8132
8133 if (topt->flags->val & topt->opt->bit)
8134 buf = "1\n";
8135 else
8136 buf = "0\n";
8137
8138 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
8139}
8140
8141static ssize_t
8142trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
8143 loff_t *ppos)
8144{
8145 struct trace_option_dentry *topt = filp->private_data;
8146 unsigned long val;
577b785f
SR
8147 int ret;
8148
22fe9b54
PH
8149 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8150 if (ret)
577b785f
SR
8151 return ret;
8152
8d18eaaf
LZ
8153 if (val != 0 && val != 1)
8154 return -EINVAL;
577b785f 8155
8d18eaaf 8156 if (!!(topt->flags->val & topt->opt->bit) != val) {
577b785f 8157 mutex_lock(&trace_types_lock);
8c1a49ae 8158 ret = __set_tracer_option(topt->tr, topt->flags,
c757bea9 8159 topt->opt, !val);
577b785f
SR
8160 mutex_unlock(&trace_types_lock);
8161 if (ret)
8162 return ret;
577b785f
SR
8163 }
8164
8165 *ppos += cnt;
8166
8167 return cnt;
8168}
8169
8170
8171static const struct file_operations trace_options_fops = {
8172 .open = tracing_open_generic,
8173 .read = trace_options_read,
8174 .write = trace_options_write,
b444786f 8175 .llseek = generic_file_llseek,
577b785f
SR
8176};
8177
9a38a885
SRRH
8178/*
8179 * In order to pass in both the trace_array descriptor as well as the index
8180 * to the flag that the trace option file represents, the trace_array
8181 * has a character array of trace_flags_index[], which holds the index
8182 * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
8183 * The address of this character array is passed to the flag option file
8184 * read/write callbacks.
8185 *
8186 * In order to extract both the index and the trace_array descriptor,
8187 * get_tr_index() uses the following algorithm.
8188 *
8189 * idx = *ptr;
8190 *
8191 * As the pointer itself contains the address of the index (remember
8192 * index[1] == 1).
8193 *
8194 * Then to get the trace_array descriptor, by subtracting that index
8195 * from the ptr, we get to the start of the index itself.
8196 *
8197 * ptr - idx == &index[0]
8198 *
8199 * Then a simple container_of() from that pointer gets us to the
8200 * trace_array descriptor.
8201 */
8202static void get_tr_index(void *data, struct trace_array **ptr,
8203 unsigned int *pindex)
8204{
8205 *pindex = *(unsigned char *)data;
8206
8207 *ptr = container_of(data - *pindex, struct trace_array,
8208 trace_flags_index);
8209}
8210
a8259075
SR
8211static ssize_t
8212trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
8213 loff_t *ppos)
8214{
9a38a885
SRRH
8215 void *tr_index = filp->private_data;
8216 struct trace_array *tr;
8217 unsigned int index;
a8259075
SR
8218 char *buf;
8219
9a38a885
SRRH
8220 get_tr_index(tr_index, &tr, &index);
8221
8222 if (tr->trace_flags & (1 << index))
a8259075
SR
8223 buf = "1\n";
8224 else
8225 buf = "0\n";
8226
8227 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
8228}
8229
8230static ssize_t
8231trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
8232 loff_t *ppos)
8233{
9a38a885
SRRH
8234 void *tr_index = filp->private_data;
8235 struct trace_array *tr;
8236 unsigned int index;
a8259075
SR
8237 unsigned long val;
8238 int ret;
8239
9a38a885
SRRH
8240 get_tr_index(tr_index, &tr, &index);
8241
22fe9b54
PH
8242 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8243 if (ret)
a8259075
SR
8244 return ret;
8245
f2d84b65 8246 if (val != 0 && val != 1)
a8259075 8247 return -EINVAL;
69d34da2 8248
3a53acf1 8249 mutex_lock(&event_mutex);
69d34da2 8250 mutex_lock(&trace_types_lock);
2b6080f2 8251 ret = set_tracer_flag(tr, 1 << index, val);
69d34da2 8252 mutex_unlock(&trace_types_lock);
3a53acf1 8253 mutex_unlock(&event_mutex);
a8259075 8254
613f04a0
SRRH
8255 if (ret < 0)
8256 return ret;
8257
a8259075
SR
8258 *ppos += cnt;
8259
8260 return cnt;
8261}
8262
a8259075
SR
8263static const struct file_operations trace_options_core_fops = {
8264 .open = tracing_open_generic,
8265 .read = trace_options_core_read,
8266 .write = trace_options_core_write,
b444786f 8267 .llseek = generic_file_llseek,
a8259075
SR
8268};
8269
5452af66 8270struct dentry *trace_create_file(const char *name,
f4ae40a6 8271 umode_t mode,
5452af66
FW
8272 struct dentry *parent,
8273 void *data,
8274 const struct file_operations *fops)
8275{
8276 struct dentry *ret;
8277
8434dc93 8278 ret = tracefs_create_file(name, mode, parent, data, fops);
5452af66 8279 if (!ret)
a395d6a7 8280 pr_warn("Could not create tracefs '%s' entry\n", name);
5452af66
FW
8281
8282 return ret;
8283}
8284
8285
2b6080f2 8286static struct dentry *trace_options_init_dentry(struct trace_array *tr)
a8259075
SR
8287{
8288 struct dentry *d_tracer;
a8259075 8289
2b6080f2
SR
8290 if (tr->options)
8291 return tr->options;
a8259075 8292
7eeafbca 8293 d_tracer = tracing_get_dentry(tr);
14a5ae40 8294 if (IS_ERR(d_tracer))
a8259075
SR
8295 return NULL;
8296
8434dc93 8297 tr->options = tracefs_create_dir("options", d_tracer);
2b6080f2 8298 if (!tr->options) {
a395d6a7 8299 pr_warn("Could not create tracefs directory 'options'\n");
a8259075
SR
8300 return NULL;
8301 }
8302
2b6080f2 8303 return tr->options;
a8259075
SR
8304}
8305
577b785f 8306static void
2b6080f2
SR
8307create_trace_option_file(struct trace_array *tr,
8308 struct trace_option_dentry *topt,
577b785f
SR
8309 struct tracer_flags *flags,
8310 struct tracer_opt *opt)
8311{
8312 struct dentry *t_options;
577b785f 8313
2b6080f2 8314 t_options = trace_options_init_dentry(tr);
577b785f
SR
8315 if (!t_options)
8316 return;
8317
8318 topt->flags = flags;
8319 topt->opt = opt;
2b6080f2 8320 topt->tr = tr;
577b785f 8321
5452af66 8322 topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
577b785f
SR
8323 &trace_options_fops);
8324
577b785f
SR
8325}
8326
37aea98b 8327static void
2b6080f2 8328create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
577b785f
SR
8329{
8330 struct trace_option_dentry *topts;
37aea98b 8331 struct trace_options *tr_topts;
577b785f
SR
8332 struct tracer_flags *flags;
8333 struct tracer_opt *opts;
8334 int cnt;
37aea98b 8335 int i;
577b785f
SR
8336
8337 if (!tracer)
37aea98b 8338 return;
577b785f
SR
8339
8340 flags = tracer->flags;
8341
8342 if (!flags || !flags->opts)
37aea98b
SRRH
8343 return;
8344
8345 /*
8346 * If this is an instance, only create flags for tracers
8347 * the instance may have.
8348 */
8349 if (!trace_ok_for_array(tracer, tr))
8350 return;
8351
8352 for (i = 0; i < tr->nr_topts; i++) {
d39cdd20
CH
8353 /* Make sure there's no duplicate flags. */
8354 if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags))
37aea98b
SRRH
8355 return;
8356 }
577b785f
SR
8357
8358 opts = flags->opts;
8359
8360 for (cnt = 0; opts[cnt].name; cnt++)
8361 ;
8362
0cfe8245 8363 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
577b785f 8364 if (!topts)
37aea98b
SRRH
8365 return;
8366
8367 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
8368 GFP_KERNEL);
8369 if (!tr_topts) {
8370 kfree(topts);
8371 return;
8372 }
8373
8374 tr->topts = tr_topts;
8375 tr->topts[tr->nr_topts].tracer = tracer;
8376 tr->topts[tr->nr_topts].topts = topts;
8377 tr->nr_topts++;
577b785f 8378
41d9c0be 8379 for (cnt = 0; opts[cnt].name; cnt++) {
2b6080f2 8380 create_trace_option_file(tr, &topts[cnt], flags,
577b785f 8381 &opts[cnt]);
24589e3a 8382 MEM_FAIL(topts[cnt].entry == NULL,
41d9c0be
SRRH
8383 "Failed to create trace option: %s",
8384 opts[cnt].name);
8385 }
577b785f
SR
8386}
8387
a8259075 8388static struct dentry *
2b6080f2
SR
8389create_trace_option_core_file(struct trace_array *tr,
8390 const char *option, long index)
a8259075
SR
8391{
8392 struct dentry *t_options;
a8259075 8393
2b6080f2 8394 t_options = trace_options_init_dentry(tr);
a8259075
SR
8395 if (!t_options)
8396 return NULL;
8397
9a38a885
SRRH
8398 return trace_create_file(option, 0644, t_options,
8399 (void *)&tr->trace_flags_index[index],
8400 &trace_options_core_fops);
a8259075
SR
8401}
8402
16270145 8403static void create_trace_options_dir(struct trace_array *tr)
a8259075
SR
8404{
8405 struct dentry *t_options;
16270145 8406 bool top_level = tr == &global_trace;
a8259075
SR
8407 int i;
8408
2b6080f2 8409 t_options = trace_options_init_dentry(tr);
a8259075
SR
8410 if (!t_options)
8411 return;
8412
16270145
SRRH
8413 for (i = 0; trace_options[i]; i++) {
8414 if (top_level ||
8415 !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
8416 create_trace_option_core_file(tr, trace_options[i], i);
8417 }
a8259075
SR
8418}
8419
499e5470
SR
8420static ssize_t
8421rb_simple_read(struct file *filp, char __user *ubuf,
8422 size_t cnt, loff_t *ppos)
8423{
348f0fc2 8424 struct trace_array *tr = filp->private_data;
499e5470
SR
8425 char buf[64];
8426 int r;
8427
10246fa3 8428 r = tracer_tracing_is_on(tr);
499e5470
SR
8429 r = sprintf(buf, "%d\n", r);
8430
8431 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
8432}
8433
8434static ssize_t
8435rb_simple_write(struct file *filp, const char __user *ubuf,
8436 size_t cnt, loff_t *ppos)
8437{
348f0fc2 8438 struct trace_array *tr = filp->private_data;
13292494 8439 struct trace_buffer *buffer = tr->array_buffer.buffer;
499e5470
SR
8440 unsigned long val;
8441 int ret;
8442
8443 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8444 if (ret)
8445 return ret;
8446
8447 if (buffer) {
2df8f8a6 8448 mutex_lock(&trace_types_lock);
f143641b
SRV
8449 if (!!val == tracer_tracing_is_on(tr)) {
8450 val = 0; /* do nothing */
8451 } else if (val) {
10246fa3 8452 tracer_tracing_on(tr);
2b6080f2
SR
8453 if (tr->current_trace->start)
8454 tr->current_trace->start(tr);
2df8f8a6 8455 } else {
10246fa3 8456 tracer_tracing_off(tr);
2b6080f2
SR
8457 if (tr->current_trace->stop)
8458 tr->current_trace->stop(tr);
2df8f8a6
SR
8459 }
8460 mutex_unlock(&trace_types_lock);
499e5470
SR
8461 }
8462
8463 (*ppos)++;
8464
8465 return cnt;
8466}
8467
8468static const struct file_operations rb_simple_fops = {
7b85af63 8469 .open = tracing_open_generic_tr,
499e5470
SR
8470 .read = rb_simple_read,
8471 .write = rb_simple_write,
7b85af63 8472 .release = tracing_release_generic_tr,
499e5470
SR
8473 .llseek = default_llseek,
8474};
8475
03329f99
SRV
8476static ssize_t
8477buffer_percent_read(struct file *filp, char __user *ubuf,
8478 size_t cnt, loff_t *ppos)
8479{
8480 struct trace_array *tr = filp->private_data;
8481 char buf[64];
8482 int r;
8483
8484 r = tr->buffer_percent;
8485 r = sprintf(buf, "%d\n", r);
8486
8487 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
8488}
8489
8490static ssize_t
8491buffer_percent_write(struct file *filp, const char __user *ubuf,
8492 size_t cnt, loff_t *ppos)
8493{
8494 struct trace_array *tr = filp->private_data;
8495 unsigned long val;
8496 int ret;
8497
8498 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
8499 if (ret)
8500 return ret;
8501
8502 if (val > 100)
8503 return -EINVAL;
8504
8505 if (!val)
8506 val = 1;
8507
8508 tr->buffer_percent = val;
8509
8510 (*ppos)++;
8511
8512 return cnt;
8513}
8514
8515static const struct file_operations buffer_percent_fops = {
8516 .open = tracing_open_generic_tr,
8517 .read = buffer_percent_read,
8518 .write = buffer_percent_write,
8519 .release = tracing_release_generic_tr,
8520 .llseek = default_llseek,
8521};
8522
ff585c5b 8523static struct dentry *trace_instance_dir;
277ba044
SR
8524
8525static void
8434dc93 8526init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
277ba044 8527
55034cd6 8528static int
1c5eb448 8529allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, int size)
277ba044
SR
8530{
8531 enum ring_buffer_flags rb_flags;
737223fb 8532
983f938a 8533 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
737223fb 8534
dced341b
SRRH
8535 buf->tr = tr;
8536
55034cd6
SRRH
8537 buf->buffer = ring_buffer_alloc(size, rb_flags);
8538 if (!buf->buffer)
8539 return -ENOMEM;
737223fb 8540
55034cd6
SRRH
8541 buf->data = alloc_percpu(struct trace_array_cpu);
8542 if (!buf->data) {
8543 ring_buffer_free(buf->buffer);
4397f045 8544 buf->buffer = NULL;
55034cd6
SRRH
8545 return -ENOMEM;
8546 }
737223fb 8547
737223fb 8548 /* Allocate the first page for all buffers */
1c5eb448
SRV
8549 set_buffer_entries(&tr->array_buffer,
8550 ring_buffer_size(tr->array_buffer.buffer, 0));
737223fb 8551
55034cd6
SRRH
8552 return 0;
8553}
737223fb 8554
55034cd6
SRRH
8555static int allocate_trace_buffers(struct trace_array *tr, int size)
8556{
8557 int ret;
737223fb 8558
1c5eb448 8559 ret = allocate_trace_buffer(tr, &tr->array_buffer, size);
55034cd6
SRRH
8560 if (ret)
8561 return ret;
737223fb 8562
55034cd6
SRRH
8563#ifdef CONFIG_TRACER_MAX_TRACE
8564 ret = allocate_trace_buffer(tr, &tr->max_buffer,
8565 allocate_snapshot ? size : 1);
24589e3a 8566 if (MEM_FAIL(ret, "Failed to allocate trace buffer\n")) {
1c5eb448
SRV
8567 ring_buffer_free(tr->array_buffer.buffer);
8568 tr->array_buffer.buffer = NULL;
8569 free_percpu(tr->array_buffer.data);
8570 tr->array_buffer.data = NULL;
55034cd6
SRRH
8571 return -ENOMEM;
8572 }
8573 tr->allocated_snapshot = allocate_snapshot;
737223fb 8574
55034cd6
SRRH
8575 /*
8576 * Only the top level trace array gets its snapshot allocated
8577 * from the kernel command line.
8578 */
8579 allocate_snapshot = false;
737223fb 8580#endif
11f5efc3 8581
55034cd6 8582 return 0;
737223fb
SRRH
8583}
8584
1c5eb448 8585static void free_trace_buffer(struct array_buffer *buf)
f0b70cc4
SRRH
8586{
8587 if (buf->buffer) {
8588 ring_buffer_free(buf->buffer);
8589 buf->buffer = NULL;
8590 free_percpu(buf->data);
8591 buf->data = NULL;
8592 }
8593}
8594
23aaa3c1
SRRH
8595static void free_trace_buffers(struct trace_array *tr)
8596{
8597 if (!tr)
8598 return;
8599
1c5eb448 8600 free_trace_buffer(&tr->array_buffer);
23aaa3c1
SRRH
8601
8602#ifdef CONFIG_TRACER_MAX_TRACE
f0b70cc4 8603 free_trace_buffer(&tr->max_buffer);
23aaa3c1
SRRH
8604#endif
8605}
8606
9a38a885
SRRH
8607static void init_trace_flags_index(struct trace_array *tr)
8608{
8609 int i;
8610
8611 /* Used by the trace options files */
8612 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
8613 tr->trace_flags_index[i] = i;
8614}
8615
37aea98b
SRRH
8616static void __update_tracer_options(struct trace_array *tr)
8617{
8618 struct tracer *t;
8619
8620 for (t = trace_types; t; t = t->next)
8621 add_tracer_options(tr, t);
8622}
8623
8624static void update_tracer_options(struct trace_array *tr)
8625{
8626 mutex_lock(&trace_types_lock);
8627 __update_tracer_options(tr);
8628 mutex_unlock(&trace_types_lock);
8629}
8630
89c95fce
TZ
8631/* Must have trace_types_lock held */
8632struct trace_array *trace_array_find(const char *instance)
8633{
8634 struct trace_array *tr, *found = NULL;
8635
8636 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
8637 if (tr->name && strcmp(tr->name, instance) == 0) {
8638 found = tr;
8639 break;
8640 }
8641 }
8642
8643 return found;
8644}
8645
8646struct trace_array *trace_array_find_get(const char *instance)
8647{
8648 struct trace_array *tr;
8649
8650 mutex_lock(&trace_types_lock);
8651 tr = trace_array_find(instance);
8652 if (tr)
8653 tr->ref++;
8654 mutex_unlock(&trace_types_lock);
8655
8656 return tr;
8657}
8658
28879787 8659static struct trace_array *trace_array_create(const char *name)
737223fb 8660{
277ba044
SR
8661 struct trace_array *tr;
8662 int ret;
277ba044 8663
277ba044
SR
8664 ret = -ENOMEM;
8665 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
8666 if (!tr)
28879787 8667 return ERR_PTR(ret);
277ba044
SR
8668
8669 tr->name = kstrdup(name, GFP_KERNEL);
8670 if (!tr->name)
8671 goto out_free_tr;
8672
ccfe9e42
AL
8673 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
8674 goto out_free_tr;
8675
20550622 8676 tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS;
983f938a 8677
ccfe9e42
AL
8678 cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
8679
277ba044
SR
8680 raw_spin_lock_init(&tr->start_lock);
8681
0b9b12c1
SRRH
8682 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
8683
277ba044
SR
8684 tr->current_trace = &nop_trace;
8685
8686 INIT_LIST_HEAD(&tr->systems);
8687 INIT_LIST_HEAD(&tr->events);
067fe038 8688 INIT_LIST_HEAD(&tr->hist_vars);
2f754e77 8689 INIT_LIST_HEAD(&tr->err_log);
277ba044 8690
737223fb 8691 if (allocate_trace_buffers(tr, trace_buf_size) < 0)
277ba044
SR
8692 goto out_free_tr;
8693
8434dc93 8694 tr->dir = tracefs_create_dir(name, trace_instance_dir);
277ba044
SR
8695 if (!tr->dir)
8696 goto out_free_tr;
8697
8698 ret = event_trace_add_tracer(tr->dir, tr);
609e85a7 8699 if (ret) {
a3d1e7eb 8700 tracefs_remove(tr->dir);
277ba044 8701 goto out_free_tr;
609e85a7 8702 }
277ba044 8703
04ec7bb6
SRV
8704 ftrace_init_trace_array(tr);
8705
8434dc93 8706 init_tracer_tracefs(tr, tr->dir);
9a38a885 8707 init_trace_flags_index(tr);
37aea98b 8708 __update_tracer_options(tr);
277ba044
SR
8709
8710 list_add(&tr->list, &ftrace_trace_arrays);
8711
28879787
DI
8712 tr->ref++;
8713
277ba044 8714
f45d1225 8715 return tr;
277ba044
SR
8716
8717 out_free_tr:
23aaa3c1 8718 free_trace_buffers(tr);
ccfe9e42 8719 free_cpumask_var(tr->tracing_cpumask);
277ba044
SR
8720 kfree(tr->name);
8721 kfree(tr);
8722
f45d1225
DI
8723 return ERR_PTR(ret);
8724}
277ba044 8725
f45d1225
DI
8726static int instance_mkdir(const char *name)
8727{
28879787
DI
8728 struct trace_array *tr;
8729 int ret;
8730
8731 mutex_lock(&event_mutex);
8732 mutex_lock(&trace_types_lock);
8733
8734 ret = -EEXIST;
89c95fce
TZ
8735 if (trace_array_find(name))
8736 goto out_unlock;
28879787
DI
8737
8738 tr = trace_array_create(name);
8739
8740 ret = PTR_ERR_OR_ZERO(tr);
8741
8742out_unlock:
8743 mutex_unlock(&trace_types_lock);
8744 mutex_unlock(&event_mutex);
8745 return ret;
8746}
8747
8748/**
8749 * trace_array_get_by_name - Create/Lookup a trace array, given its name.
8750 * @name: The name of the trace array to be looked up/created.
8751 *
8752 * Returns pointer to trace array with given name.
8753 * NULL, if it cannot be created.
8754 *
8755 * NOTE: This function increments the reference counter associated with the
8756 * trace array returned. This makes sure it cannot be freed while in use.
8757 * Use trace_array_put() once the trace array is no longer needed.
28394da2
SRV
8758 * If the trace_array is to be freed, trace_array_destroy() needs to
8759 * be called after the trace_array_put(), or simply let user space delete
8760 * it from the tracefs instances directory. But until the
8761 * trace_array_put() is called, user space can not delete it.
28879787
DI
8762 *
8763 */
8764struct trace_array *trace_array_get_by_name(const char *name)
8765{
8766 struct trace_array *tr;
8767
8768 mutex_lock(&event_mutex);
8769 mutex_lock(&trace_types_lock);
8770
8771 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
8772 if (tr->name && strcmp(tr->name, name) == 0)
8773 goto out_unlock;
8774 }
8775
8776 tr = trace_array_create(name);
8777
8778 if (IS_ERR(tr))
8779 tr = NULL;
8780out_unlock:
8781 if (tr)
8782 tr->ref++;
8783
8784 mutex_unlock(&trace_types_lock);
8785 mutex_unlock(&event_mutex);
8786 return tr;
277ba044 8787}
28879787 8788EXPORT_SYMBOL_GPL(trace_array_get_by_name);
277ba044 8789
f45d1225 8790static int __remove_instance(struct trace_array *tr)
0c8916c3 8791{
37aea98b 8792 int i;
0c8916c3 8793
28879787 8794 /* Reference counter for a newly created trace array = 1. */
7ef282e0 8795 if (tr->ref > 1 || (tr->current_trace && tr->trace_ref))
f45d1225 8796 return -EBUSY;
a695cb58 8797
0c8916c3
SR
8798 list_del(&tr->list);
8799
20550622
SRRH
8800 /* Disable all the flags that were enabled coming in */
8801 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) {
8802 if ((1 << i) & ZEROED_TRACE_FLAGS)
8803 set_tracer_flag(tr, 1 << i, 0);
8804 }
8805
6b450d25 8806 tracing_set_nop(tr);
a0e6369e 8807 clear_ftrace_function_probes(tr);
0c8916c3 8808 event_trace_del_tracer(tr);
d879d0b8 8809 ftrace_clear_pids(tr);
591dffda 8810 ftrace_destroy_function_files(tr);
a3d1e7eb 8811 tracefs_remove(tr->dir);
a9fcaaac 8812 free_trace_buffers(tr);
0c8916c3 8813
37aea98b
SRRH
8814 for (i = 0; i < tr->nr_topts; i++) {
8815 kfree(tr->topts[i].topts);
8816 }
8817 kfree(tr->topts);
8818
db9108e0 8819 free_cpumask_var(tr->tracing_cpumask);
0c8916c3
SR
8820 kfree(tr->name);
8821 kfree(tr);
f45d1225 8822 tr = NULL;
0c8916c3 8823
f45d1225
DI
8824 return 0;
8825}
8826
e585e646 8827int trace_array_destroy(struct trace_array *this_tr)
f45d1225 8828{
e585e646 8829 struct trace_array *tr;
f45d1225
DI
8830 int ret;
8831
e585e646 8832 if (!this_tr)
f45d1225
DI
8833 return -EINVAL;
8834
8835 mutex_lock(&event_mutex);
8836 mutex_lock(&trace_types_lock);
8837
e585e646
DI
8838 ret = -ENODEV;
8839
8840 /* Making sure trace array exists before destroying it. */
8841 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
8842 if (tr == this_tr) {
8843 ret = __remove_instance(tr);
8844 break;
8845 }
8846 }
f45d1225
DI
8847
8848 mutex_unlock(&trace_types_lock);
8849 mutex_unlock(&event_mutex);
8850
8851 return ret;
8852}
8853EXPORT_SYMBOL_GPL(trace_array_destroy);
8854
8855static int instance_rmdir(const char *name)
8856{
8857 struct trace_array *tr;
8858 int ret;
8859
8860 mutex_lock(&event_mutex);
8861 mutex_lock(&trace_types_lock);
8862
8863 ret = -ENODEV;
89c95fce
TZ
8864 tr = trace_array_find(name);
8865 if (tr)
8866 ret = __remove_instance(tr);
0c8916c3 8867
0c8916c3 8868 mutex_unlock(&trace_types_lock);
12ecef0c 8869 mutex_unlock(&event_mutex);
0c8916c3
SR
8870
8871 return ret;
8872}
8873
277ba044
SR
8874static __init void create_trace_instances(struct dentry *d_tracer)
8875{
eae47358
SRRH
8876 trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
8877 instance_mkdir,
8878 instance_rmdir);
24589e3a 8879 if (MEM_FAIL(!trace_instance_dir, "Failed to create instances directory\n"))
277ba044 8880 return;
277ba044
SR
8881}
8882
2b6080f2 8883static void
8434dc93 8884init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
2b6080f2 8885{
3dd80953 8886 struct trace_event_file *file;
121aaee7 8887 int cpu;
2b6080f2 8888
607e2ea1
SRRH
8889 trace_create_file("available_tracers", 0444, d_tracer,
8890 tr, &show_traces_fops);
8891
8892 trace_create_file("current_tracer", 0644, d_tracer,
8893 tr, &set_tracer_fops);
8894
ccfe9e42
AL
8895 trace_create_file("tracing_cpumask", 0644, d_tracer,
8896 tr, &tracing_cpumask_fops);
8897
2b6080f2
SR
8898 trace_create_file("trace_options", 0644, d_tracer,
8899 tr, &tracing_iter_fops);
8900
8901 trace_create_file("trace", 0644, d_tracer,
6484c71c 8902 tr, &tracing_fops);
2b6080f2
SR
8903
8904 trace_create_file("trace_pipe", 0444, d_tracer,
15544209 8905 tr, &tracing_pipe_fops);
2b6080f2
SR
8906
8907 trace_create_file("buffer_size_kb", 0644, d_tracer,
0bc392ee 8908 tr, &tracing_entries_fops);
2b6080f2
SR
8909
8910 trace_create_file("buffer_total_size_kb", 0444, d_tracer,
8911 tr, &tracing_total_entries_fops);
8912
238ae93d 8913 trace_create_file("free_buffer", 0200, d_tracer,
2b6080f2
SR
8914 tr, &tracing_free_buffer_fops);
8915
8916 trace_create_file("trace_marker", 0220, d_tracer,
8917 tr, &tracing_mark_fops);
8918
3dd80953
SRV
8919 file = __find_event_file(tr, "ftrace", "print");
8920 if (file && file->dir)
8921 trace_create_file("trigger", 0644, file->dir, file,
8922 &event_trigger_fops);
8923 tr->trace_marker_file = file;
8924
fa32e855
SR
8925 trace_create_file("trace_marker_raw", 0220, d_tracer,
8926 tr, &tracing_mark_raw_fops);
8927
2b6080f2
SR
8928 trace_create_file("trace_clock", 0644, d_tracer, tr,
8929 &trace_clock_fops);
8930
8931 trace_create_file("tracing_on", 0644, d_tracer,
6484c71c 8932 tr, &rb_simple_fops);
ce9bae55 8933
2c1ea60b
TZ
8934 trace_create_file("timestamp_mode", 0444, d_tracer, tr,
8935 &trace_time_stamp_mode_fops);
8936
a7b1d74e 8937 tr->buffer_percent = 50;
03329f99
SRV
8938
8939 trace_create_file("buffer_percent", 0444, d_tracer,
8940 tr, &buffer_percent_fops);
8941
16270145
SRRH
8942 create_trace_options_dir(tr);
8943
f971cc9a 8944#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
91edde2e 8945 trace_create_maxlat_file(tr, d_tracer);
6d9b3fa5
SRRH
8946#endif
8947
591dffda 8948 if (ftrace_create_function_files(tr, d_tracer))
24589e3a 8949 MEM_FAIL(1, "Could not allocate function filter files");
591dffda 8950
ce9bae55
SRRH
8951#ifdef CONFIG_TRACER_SNAPSHOT
8952 trace_create_file("snapshot", 0644, d_tracer,
6484c71c 8953 tr, &snapshot_fops);
ce9bae55 8954#endif
121aaee7 8955
8a062902
TZ
8956 trace_create_file("error_log", 0644, d_tracer,
8957 tr, &tracing_err_log_fops);
8958
121aaee7 8959 for_each_tracing_cpu(cpu)
8434dc93 8960 tracing_init_tracefs_percpu(tr, cpu);
121aaee7 8961
345ddcc8 8962 ftrace_init_tracefs(tr, d_tracer);
2b6080f2
SR
8963}
8964
93faccbb 8965static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore)
f76180bc
SRRH
8966{
8967 struct vfsmount *mnt;
8968 struct file_system_type *type;
8969
8970 /*
8971 * To maintain backward compatibility for tools that mount
8972 * debugfs to get to the tracing facility, tracefs is automatically
8973 * mounted to the debugfs/tracing directory.
8974 */
8975 type = get_fs_type("tracefs");
8976 if (!type)
8977 return NULL;
93faccbb 8978 mnt = vfs_submount(mntpt, type, "tracefs", NULL);
f76180bc
SRRH
8979 put_filesystem(type);
8980 if (IS_ERR(mnt))
8981 return NULL;
8982 mntget(mnt);
8983
8984 return mnt;
8985}
8986
7eeafbca
SRRH
8987/**
8988 * tracing_init_dentry - initialize top level trace array
8989 *
8990 * This is called when creating files or directories in the tracing
8991 * directory. It is called via fs_initcall() by any of the boot up code
8992 * and expects to return the dentry of the top level tracing directory.
8993 */
8994struct dentry *tracing_init_dentry(void)
8995{
8996 struct trace_array *tr = &global_trace;
8997
a356646a 8998 if (security_locked_down(LOCKDOWN_TRACEFS)) {
ee195452 8999 pr_warn("Tracing disabled due to lockdown\n");
a356646a
SRV
9000 return ERR_PTR(-EPERM);
9001 }
9002
f76180bc 9003 /* The top level trace array uses NULL as parent */
7eeafbca 9004 if (tr->dir)
f76180bc 9005 return NULL;
7eeafbca 9006
072e133d 9007 if (WARN_ON(!tracefs_initialized()))
7eeafbca
SRRH
9008 return ERR_PTR(-ENODEV);
9009
f76180bc
SRRH
9010 /*
9011 * As there may still be users that expect the tracing
9012 * files to exist in debugfs/tracing, we must automount
9013 * the tracefs file system there, so older tools still
9014 * work with the newer kerenl.
9015 */
9016 tr->dir = debugfs_create_automount("tracing", NULL,
9017 trace_automount, NULL);
7eeafbca 9018
8434dc93 9019 return NULL;
7eeafbca
SRRH
9020}
9021
00f4b652
JL
9022extern struct trace_eval_map *__start_ftrace_eval_maps[];
9023extern struct trace_eval_map *__stop_ftrace_eval_maps[];
0c564a53 9024
5f60b351 9025static void __init trace_eval_init(void)
0c564a53 9026{
3673b8e4
SRRH
9027 int len;
9028
02fd7f68 9029 len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps;
f57a4143 9030 trace_insert_eval_map(NULL, __start_ftrace_eval_maps, len);
3673b8e4
SRRH
9031}
9032
9033#ifdef CONFIG_MODULES
f57a4143 9034static void trace_module_add_evals(struct module *mod)
3673b8e4 9035{
99be647c 9036 if (!mod->num_trace_evals)
3673b8e4
SRRH
9037 return;
9038
9039 /*
9040 * Modules with bad taint do not have events created, do
9041 * not bother with enums either.
9042 */
9043 if (trace_module_has_bad_taint(mod))
9044 return;
9045
f57a4143 9046 trace_insert_eval_map(mod, mod->trace_evals, mod->num_trace_evals);
3673b8e4
SRRH
9047}
9048
681bec03 9049#ifdef CONFIG_TRACE_EVAL_MAP_FILE
f57a4143 9050static void trace_module_remove_evals(struct module *mod)
9828413d 9051{
23bf8cb8
JL
9052 union trace_eval_map_item *map;
9053 union trace_eval_map_item **last = &trace_eval_maps;
9828413d 9054
99be647c 9055 if (!mod->num_trace_evals)
9828413d
SRRH
9056 return;
9057
1793ed93 9058 mutex_lock(&trace_eval_mutex);
9828413d 9059
23bf8cb8 9060 map = trace_eval_maps;
9828413d
SRRH
9061
9062 while (map) {
9063 if (map->head.mod == mod)
9064 break;
5f60b351 9065 map = trace_eval_jmp_to_tail(map);
9828413d
SRRH
9066 last = &map->tail.next;
9067 map = map->tail.next;
9068 }
9069 if (!map)
9070 goto out;
9071
5f60b351 9072 *last = trace_eval_jmp_to_tail(map)->tail.next;
9828413d
SRRH
9073 kfree(map);
9074 out:
1793ed93 9075 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
9076}
9077#else
f57a4143 9078static inline void trace_module_remove_evals(struct module *mod) { }
681bec03 9079#endif /* CONFIG_TRACE_EVAL_MAP_FILE */
9828413d 9080
3673b8e4
SRRH
9081static int trace_module_notify(struct notifier_block *self,
9082 unsigned long val, void *data)
9083{
9084 struct module *mod = data;
9085
9086 switch (val) {
9087 case MODULE_STATE_COMING:
f57a4143 9088 trace_module_add_evals(mod);
3673b8e4 9089 break;
9828413d 9090 case MODULE_STATE_GOING:
f57a4143 9091 trace_module_remove_evals(mod);
9828413d 9092 break;
3673b8e4
SRRH
9093 }
9094
9095 return 0;
0c564a53
SRRH
9096}
9097
3673b8e4
SRRH
9098static struct notifier_block trace_module_nb = {
9099 .notifier_call = trace_module_notify,
9100 .priority = 0,
9101};
9828413d 9102#endif /* CONFIG_MODULES */
3673b8e4 9103
8434dc93 9104static __init int tracer_init_tracefs(void)
bc0c38d1
SR
9105{
9106 struct dentry *d_tracer;
bc0c38d1 9107
7e53bd42
LJ
9108 trace_access_lock_init();
9109
bc0c38d1 9110 d_tracer = tracing_init_dentry();
14a5ae40 9111 if (IS_ERR(d_tracer))
ed6f1c99 9112 return 0;
bc0c38d1 9113
58b92547
SRV
9114 event_trace_init();
9115
8434dc93 9116 init_tracer_tracefs(&global_trace, d_tracer);
501c2375 9117 ftrace_init_tracefs_toplevel(&global_trace, d_tracer);
bc0c38d1 9118
5452af66 9119 trace_create_file("tracing_thresh", 0644, d_tracer,
6508fa76 9120 &global_trace, &tracing_thresh_fops);
a8259075 9121
339ae5d3 9122 trace_create_file("README", 0444, d_tracer,
5452af66
FW
9123 NULL, &tracing_readme_fops);
9124
69abe6a5
AP
9125 trace_create_file("saved_cmdlines", 0444, d_tracer,
9126 NULL, &tracing_saved_cmdlines_fops);
5bf9a1ee 9127
939c7a4f
YY
9128 trace_create_file("saved_cmdlines_size", 0644, d_tracer,
9129 NULL, &tracing_saved_cmdlines_size_fops);
9130
99c621d7
MS
9131 trace_create_file("saved_tgids", 0444, d_tracer,
9132 NULL, &tracing_saved_tgids_fops);
9133
5f60b351 9134 trace_eval_init();
0c564a53 9135
f57a4143 9136 trace_create_eval_file(d_tracer);
9828413d 9137
3673b8e4
SRRH
9138#ifdef CONFIG_MODULES
9139 register_module_notifier(&trace_module_nb);
9140#endif
9141
bc0c38d1 9142#ifdef CONFIG_DYNAMIC_FTRACE
5452af66 9143 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
da537f0a 9144 NULL, &tracing_dyn_info_fops);
bc0c38d1 9145#endif
b04cc6b1 9146
277ba044 9147 create_trace_instances(d_tracer);
5452af66 9148
37aea98b 9149 update_tracer_options(&global_trace);
09d23a1d 9150
b5ad384e 9151 return 0;
bc0c38d1
SR
9152}
9153
3f5a54e3
SR
9154static int trace_panic_handler(struct notifier_block *this,
9155 unsigned long event, void *unused)
9156{
944ac425 9157 if (ftrace_dump_on_oops)
cecbca96 9158 ftrace_dump(ftrace_dump_on_oops);
3f5a54e3
SR
9159 return NOTIFY_OK;
9160}
9161
9162static struct notifier_block trace_panic_notifier = {
9163 .notifier_call = trace_panic_handler,
9164 .next = NULL,
9165 .priority = 150 /* priority: INT_MAX >= x >= 0 */
9166};
9167
9168static int trace_die_handler(struct notifier_block *self,
9169 unsigned long val,
9170 void *data)
9171{
9172 switch (val) {
9173 case DIE_OOPS:
944ac425 9174 if (ftrace_dump_on_oops)
cecbca96 9175 ftrace_dump(ftrace_dump_on_oops);
3f5a54e3
SR
9176 break;
9177 default:
9178 break;
9179 }
9180 return NOTIFY_OK;
9181}
9182
9183static struct notifier_block trace_die_notifier = {
9184 .notifier_call = trace_die_handler,
9185 .priority = 200
9186};
9187
9188/*
9189 * printk is set to max of 1024, we really don't need it that big.
9190 * Nothing should be printing 1000 characters anyway.
9191 */
9192#define TRACE_MAX_PRINT 1000
9193
9194/*
9195 * Define here KERN_TRACE so that we have one place to modify
9196 * it if we decide to change what log level the ftrace dump
9197 * should be at.
9198 */
428aee14 9199#define KERN_TRACE KERN_EMERG
3f5a54e3 9200
955b61e5 9201void
3f5a54e3
SR
9202trace_printk_seq(struct trace_seq *s)
9203{
9204 /* Probably should print a warning here. */
3a161d99
SRRH
9205 if (s->seq.len >= TRACE_MAX_PRINT)
9206 s->seq.len = TRACE_MAX_PRINT;
3f5a54e3 9207
820b75f6
SRRH
9208 /*
9209 * More paranoid code. Although the buffer size is set to
9210 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
9211 * an extra layer of protection.
9212 */
9213 if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
9214 s->seq.len = s->seq.size - 1;
3f5a54e3
SR
9215
9216 /* should be zero ended, but we are paranoid. */
3a161d99 9217 s->buffer[s->seq.len] = 0;
3f5a54e3
SR
9218
9219 printk(KERN_TRACE "%s", s->buffer);
9220
f9520750 9221 trace_seq_init(s);
3f5a54e3
SR
9222}
9223
955b61e5
JW
9224void trace_init_global_iter(struct trace_iterator *iter)
9225{
9226 iter->tr = &global_trace;
2b6080f2 9227 iter->trace = iter->tr->current_trace;
ae3b5093 9228 iter->cpu_file = RING_BUFFER_ALL_CPUS;
1c5eb448 9229 iter->array_buffer = &global_trace.array_buffer;
b2f974d6
CS
9230
9231 if (iter->trace && iter->trace->open)
9232 iter->trace->open(iter);
9233
9234 /* Annotate start of buffers if we had overruns */
1c5eb448 9235 if (ring_buffer_overruns(iter->array_buffer->buffer))
b2f974d6
CS
9236 iter->iter_flags |= TRACE_FILE_ANNOTATE;
9237
9238 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
9239 if (trace_clocks[iter->tr->clock_id].in_ns)
9240 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
955b61e5
JW
9241}
9242
7fe70b57 9243void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
3f5a54e3 9244{
3f5a54e3
SR
9245 /* use static because iter can be a bit big for the stack */
9246 static struct trace_iterator iter;
7fe70b57 9247 static atomic_t dump_running;
983f938a 9248 struct trace_array *tr = &global_trace;
cf586b61 9249 unsigned int old_userobj;
d769041f
SR
9250 unsigned long flags;
9251 int cnt = 0, cpu;
3f5a54e3 9252
7fe70b57
SRRH
9253 /* Only allow one dump user at a time. */
9254 if (atomic_inc_return(&dump_running) != 1) {
9255 atomic_dec(&dump_running);
9256 return;
9257 }
3f5a54e3 9258
7fe70b57
SRRH
9259 /*
9260 * Always turn off tracing when we dump.
9261 * We don't need to show trace output of what happens
9262 * between multiple crashes.
9263 *
9264 * If the user does a sysrq-z, then they can re-enable
9265 * tracing with echo 1 > tracing_on.
9266 */
0ee6b6cf 9267 tracing_off();
cf586b61 9268
7fe70b57 9269 local_irq_save(flags);
03fc7f9c 9270 printk_nmi_direct_enter();
3f5a54e3 9271
38dbe0b1 9272 /* Simulate the iterator */
955b61e5 9273 trace_init_global_iter(&iter);
8e99cf91
SRV
9274 /* Can not use kmalloc for iter.temp */
9275 iter.temp = static_temp_buf;
9276 iter.temp_size = STATIC_TEMP_BUF_SIZE;
955b61e5 9277
d769041f 9278 for_each_tracing_cpu(cpu) {
1c5eb448 9279 atomic_inc(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled);
d769041f
SR
9280 }
9281
983f938a 9282 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
cf586b61 9283
b54d3de9 9284 /* don't look at user memory in panic mode */
983f938a 9285 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
b54d3de9 9286
cecbca96
FW
9287 switch (oops_dump_mode) {
9288 case DUMP_ALL:
ae3b5093 9289 iter.cpu_file = RING_BUFFER_ALL_CPUS;
cecbca96
FW
9290 break;
9291 case DUMP_ORIG:
9292 iter.cpu_file = raw_smp_processor_id();
9293 break;
9294 case DUMP_NONE:
9295 goto out_enable;
9296 default:
9297 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
ae3b5093 9298 iter.cpu_file = RING_BUFFER_ALL_CPUS;
cecbca96
FW
9299 }
9300
9301 printk(KERN_TRACE "Dumping ftrace buffer:\n");
3f5a54e3 9302
7fe70b57
SRRH
9303 /* Did function tracer already get disabled? */
9304 if (ftrace_is_dead()) {
9305 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
9306 printk("# MAY BE MISSING FUNCTION EVENTS\n");
9307 }
9308
3f5a54e3
SR
9309 /*
9310 * We need to stop all tracing on all CPUS to read the
9311 * the next buffer. This is a bit expensive, but is
9312 * not done often. We fill all what we can read,
9313 * and then release the locks again.
9314 */
9315
3f5a54e3
SR
9316 while (!trace_empty(&iter)) {
9317
9318 if (!cnt)
9319 printk(KERN_TRACE "---------------------------------\n");
9320
9321 cnt++;
9322
0c97bf86 9323 trace_iterator_reset(&iter);
3f5a54e3 9324 iter.iter_flags |= TRACE_FILE_LAT_FMT;
3f5a54e3 9325
955b61e5 9326 if (trace_find_next_entry_inc(&iter) != NULL) {
74e7ff8c
LJ
9327 int ret;
9328
9329 ret = print_trace_line(&iter);
9330 if (ret != TRACE_TYPE_NO_CONSUME)
9331 trace_consume(&iter);
3f5a54e3 9332 }
b892e5c8 9333 touch_nmi_watchdog();
3f5a54e3
SR
9334
9335 trace_printk_seq(&iter.seq);
9336 }
9337
9338 if (!cnt)
9339 printk(KERN_TRACE " (ftrace buffer empty)\n");
9340 else
9341 printk(KERN_TRACE "---------------------------------\n");
9342
cecbca96 9343 out_enable:
983f938a 9344 tr->trace_flags |= old_userobj;
cf586b61 9345
7fe70b57 9346 for_each_tracing_cpu(cpu) {
1c5eb448 9347 atomic_dec(&per_cpu_ptr(iter.array_buffer->data, cpu)->disabled);
cf586b61 9348 }
03fc7f9c
PM
9349 atomic_dec(&dump_running);
9350 printk_nmi_direct_exit();
cd891ae0 9351 local_irq_restore(flags);
3f5a54e3 9352}
a8eecf22 9353EXPORT_SYMBOL_GPL(ftrace_dump);
cf586b61 9354
7e465baa
TZ
9355int trace_run_command(const char *buf, int (*createfn)(int, char **))
9356{
9357 char **argv;
9358 int argc, ret;
9359
9360 argc = 0;
9361 ret = 0;
9362 argv = argv_split(GFP_KERNEL, buf, &argc);
9363 if (!argv)
9364 return -ENOMEM;
9365
9366 if (argc)
9367 ret = createfn(argc, argv);
9368
9369 argv_free(argv);
9370
9371 return ret;
9372}
9373
9374#define WRITE_BUFSIZE 4096
9375
9376ssize_t trace_parse_run_command(struct file *file, const char __user *buffer,
9377 size_t count, loff_t *ppos,
9378 int (*createfn)(int, char **))
9379{
9380 char *kbuf, *buf, *tmp;
9381 int ret = 0;
9382 size_t done = 0;
9383 size_t size;
9384
9385 kbuf = kmalloc(WRITE_BUFSIZE, GFP_KERNEL);
9386 if (!kbuf)
9387 return -ENOMEM;
9388
9389 while (done < count) {
9390 size = count - done;
9391
9392 if (size >= WRITE_BUFSIZE)
9393 size = WRITE_BUFSIZE - 1;
9394
9395 if (copy_from_user(kbuf, buffer + done, size)) {
9396 ret = -EFAULT;
9397 goto out;
9398 }
9399 kbuf[size] = '\0';
9400 buf = kbuf;
9401 do {
9402 tmp = strchr(buf, '\n');
9403 if (tmp) {
9404 *tmp = '\0';
9405 size = tmp - buf + 1;
9406 } else {
9407 size = strlen(buf);
9408 if (done + size < count) {
9409 if (buf != kbuf)
9410 break;
9411 /* This can accept WRITE_BUFSIZE - 2 ('\n' + '\0') */
9412 pr_warn("Line length is too long: Should be less than %d\n",
9413 WRITE_BUFSIZE - 2);
9414 ret = -EINVAL;
9415 goto out;
9416 }
9417 }
9418 done += size;
9419
9420 /* Remove comments */
9421 tmp = strchr(buf, '#');
9422
9423 if (tmp)
9424 *tmp = '\0';
9425
9426 ret = trace_run_command(buf, createfn);
9427 if (ret)
9428 goto out;
9429 buf += size;
9430
9431 } while (done < count);
9432 }
9433 ret = done;
9434
9435out:
9436 kfree(kbuf);
9437
9438 return ret;
9439}
9440
3928a8a2 9441__init static int tracer_alloc_buffers(void)
bc0c38d1 9442{
73c5162a 9443 int ring_buf_size;
9e01c1b7 9444 int ret = -ENOMEM;
4c11d7ae 9445
a356646a
SRV
9446
9447 if (security_locked_down(LOCKDOWN_TRACEFS)) {
ee195452 9448 pr_warn("Tracing disabled due to lockdown\n");
a356646a
SRV
9449 return -EPERM;
9450 }
9451
b5e87c05
SRRH
9452 /*
9453 * Make sure we don't accidently add more trace options
9454 * than we have bits for.
9455 */
9a38a885 9456 BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
b5e87c05 9457
9e01c1b7
RR
9458 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
9459 goto out;
9460
ccfe9e42 9461 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
9e01c1b7 9462 goto out_free_buffer_mask;
4c11d7ae 9463
07d777fe 9464 /* Only allocate trace_printk buffers if a trace_printk exists */
bf2cbe04 9465 if (&__stop___trace_bprintk_fmt != &__start___trace_bprintk_fmt)
81698831 9466 /* Must be called before global_trace.buffer is allocated */
07d777fe
SR
9467 trace_printk_init_buffers();
9468
73c5162a
SR
9469 /* To save memory, keep the ring buffer size to its minimum */
9470 if (ring_buffer_expanded)
9471 ring_buf_size = trace_buf_size;
9472 else
9473 ring_buf_size = 1;
9474
9e01c1b7 9475 cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
ccfe9e42 9476 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
9e01c1b7 9477
2b6080f2
SR
9478 raw_spin_lock_init(&global_trace.start_lock);
9479
b32614c0
SAS
9480 /*
9481 * The prepare callbacks allocates some memory for the ring buffer. We
9482 * don't free the buffer if the if the CPU goes down. If we were to free
9483 * the buffer, then the user would lose any trace that was in the
9484 * buffer. The memory will be removed once the "instance" is removed.
9485 */
9486 ret = cpuhp_setup_state_multi(CPUHP_TRACE_RB_PREPARE,
9487 "trace/RB:preapre", trace_rb_cpu_prepare,
9488 NULL);
9489 if (ret < 0)
9490 goto out_free_cpumask;
2c4a33ab 9491 /* Used for event triggers */
147d88e0 9492 ret = -ENOMEM;
2c4a33ab
SRRH
9493 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
9494 if (!temp_buffer)
b32614c0 9495 goto out_rm_hp_state;
2c4a33ab 9496
939c7a4f
YY
9497 if (trace_create_savedcmd() < 0)
9498 goto out_free_temp_buffer;
9499
9e01c1b7 9500 /* TODO: make the number of buffers hot pluggable with CPUS */
737223fb 9501 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
24589e3a 9502 MEM_FAIL(1, "tracer: failed to allocate ring buffer!\n");
939c7a4f 9503 goto out_free_savedcmd;
4c11d7ae 9504 }
a7603ff4 9505
499e5470
SR
9506 if (global_trace.buffer_disabled)
9507 tracing_off();
4c11d7ae 9508
e1e232ca
SR
9509 if (trace_boot_clock) {
9510 ret = tracing_set_clock(&global_trace, trace_boot_clock);
9511 if (ret < 0)
a395d6a7
JP
9512 pr_warn("Trace clock %s not defined, going back to default\n",
9513 trace_boot_clock);
e1e232ca
SR
9514 }
9515
ca164318
SRRH
9516 /*
9517 * register_tracer() might reference current_trace, so it
9518 * needs to be set before we register anything. This is
9519 * just a bootstrap of current_trace anyway.
9520 */
2b6080f2
SR
9521 global_trace.current_trace = &nop_trace;
9522
0b9b12c1
SRRH
9523 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
9524
4104d326
SRRH
9525 ftrace_init_global_array_ops(&global_trace);
9526
9a38a885
SRRH
9527 init_trace_flags_index(&global_trace);
9528
ca164318
SRRH
9529 register_tracer(&nop_trace);
9530
dbeafd0d
SRV
9531 /* Function tracing may start here (via kernel command line) */
9532 init_function_trace();
9533
60a11774
SR
9534 /* All seems OK, enable tracing */
9535 tracing_disabled = 0;
3928a8a2 9536
3f5a54e3
SR
9537 atomic_notifier_chain_register(&panic_notifier_list,
9538 &trace_panic_notifier);
9539
9540 register_die_notifier(&trace_die_notifier);
2fc1dfbe 9541
ae63b31e
SR
9542 global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
9543
9544 INIT_LIST_HEAD(&global_trace.systems);
9545 INIT_LIST_HEAD(&global_trace.events);
067fe038 9546 INIT_LIST_HEAD(&global_trace.hist_vars);
2f754e77 9547 INIT_LIST_HEAD(&global_trace.err_log);
ae63b31e
SR
9548 list_add(&global_trace.list, &ftrace_trace_arrays);
9549
a4d1e688 9550 apply_trace_boot_options();
7bcfaf54 9551
77fd5c15
SRRH
9552 register_snapshot_cmd();
9553
2fc1dfbe 9554 return 0;
3f5a54e3 9555
939c7a4f
YY
9556out_free_savedcmd:
9557 free_saved_cmdlines_buffer(savedcmd);
2c4a33ab
SRRH
9558out_free_temp_buffer:
9559 ring_buffer_free(temp_buffer);
b32614c0
SAS
9560out_rm_hp_state:
9561 cpuhp_remove_multi_state(CPUHP_TRACE_RB_PREPARE);
9e01c1b7 9562out_free_cpumask:
ccfe9e42 9563 free_cpumask_var(global_trace.tracing_cpumask);
9e01c1b7
RR
9564out_free_buffer_mask:
9565 free_cpumask_var(tracing_buffer_mask);
9566out:
9567 return ret;
bc0c38d1 9568}
b2821ae6 9569
e725c731 9570void __init early_trace_init(void)
5f893b26 9571{
0daa2302
SRRH
9572 if (tracepoint_printk) {
9573 tracepoint_print_iter =
9574 kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
24589e3a
SRV
9575 if (MEM_FAIL(!tracepoint_print_iter,
9576 "Failed to allocate trace iterator\n"))
0daa2302 9577 tracepoint_printk = 0;
42391745
SRRH
9578 else
9579 static_key_enable(&tracepoint_printk_key.key);
0daa2302 9580 }
5f893b26 9581 tracer_alloc_buffers();
e725c731
SRV
9582}
9583
9584void __init trace_init(void)
9585{
0c564a53 9586 trace_event_init();
5f893b26
SRRH
9587}
9588
b2821ae6
SR
9589__init static int clear_boot_tracer(void)
9590{
9591 /*
9592 * The default tracer at boot buffer is an init section.
9593 * This function is called in lateinit. If we did not
9594 * find the boot tracer, then clear it out, to prevent
9595 * later registration from accessing the buffer that is
9596 * about to be freed.
9597 */
9598 if (!default_bootup_tracer)
9599 return 0;
9600
9601 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
9602 default_bootup_tracer);
9603 default_bootup_tracer = NULL;
9604
9605 return 0;
9606}
9607
8434dc93 9608fs_initcall(tracer_init_tracefs);
4bb0f0e7 9609late_initcall_sync(clear_boot_tracer);
3fd49c9e
CW
9610
9611#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
9612__init static int tracing_set_default_clock(void)
9613{
9614 /* sched_clock_stable() is determined in late_initcall */
5125eee4 9615 if (!trace_boot_clock && !sched_clock_stable()) {
bf24daac
MI
9616 if (security_locked_down(LOCKDOWN_TRACEFS)) {
9617 pr_warn("Can not set tracing clock due to lockdown\n");
9618 return -EPERM;
9619 }
9620
3fd49c9e
CW
9621 printk(KERN_WARNING
9622 "Unstable clock detected, switching default tracing clock to \"global\"\n"
9623 "If you want to keep using the local clock, then add:\n"
9624 " \"trace_clock=local\"\n"
9625 "on the kernel command line\n");
9626 tracing_set_clock(&global_trace, "global");
9627 }
9628
9629 return 0;
9630}
9631late_initcall_sync(tracing_set_default_clock);
9632#endif