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