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