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