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