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