1 /* 2 * ring buffer based function tracer 3 * 4 * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com> 5 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com> 6 * 7 * Originally taken from the RT patch by: 8 * Arnaldo Carvalho de Melo <acme@redhat.com> 9 * 10 * Based on code from the latency_tracer, that is: 11 * Copyright (C) 2004-2006 Ingo Molnar 12 * Copyright (C) 2004 Nadia Yvette Chambers 13 */ 14 #include <linux/ring_buffer.h> 15 #include <generated/utsrelease.h> 16 #include <linux/stacktrace.h> 17 #include <linux/writeback.h> 18 #include <linux/kallsyms.h> 19 #include <linux/seq_file.h> 20 #include <linux/notifier.h> 21 #include <linux/irqflags.h> 22 #include <linux/debugfs.h> 23 #include <linux/pagemap.h> 24 #include <linux/hardirq.h> 25 #include <linux/linkage.h> 26 #include <linux/uaccess.h> 27 #include <linux/kprobes.h> 28 #include <linux/ftrace.h> 29 #include <linux/module.h> 30 #include <linux/percpu.h> 31 #include <linux/splice.h> 32 #include <linux/kdebug.h> 33 #include <linux/string.h> 34 #include <linux/rwsem.h> 35 #include <linux/slab.h> 36 #include <linux/ctype.h> 37 #include <linux/init.h> 38 #include <linux/poll.h> 39 #include <linux/nmi.h> 40 #include <linux/fs.h> 41 #include <linux/sched/rt.h> 42 43 #include "trace.h" 44 #include "trace_output.h" 45 46 /* 47 * On boot up, the ring buffer is set to the minimum size, so that 48 * we do not waste memory on systems that are not using tracing. 49 */ 50 bool ring_buffer_expanded; 51 52 /* 53 * We need to change this state when a selftest is running. 54 * A selftest will lurk into the ring-buffer to count the 55 * entries inserted during the selftest although some concurrent 56 * insertions into the ring-buffer such as trace_printk could occurred 57 * at the same time, giving false positive or negative results. 58 */ 59 static bool __read_mostly tracing_selftest_running; 60 61 /* 62 * If a tracer is running, we do not want to run SELFTEST. 63 */ 64 bool __read_mostly tracing_selftest_disabled; 65 66 /* For tracers that don't implement custom flags */ 67 static struct tracer_opt dummy_tracer_opt[] = { 68 { } 69 }; 70 71 static struct tracer_flags dummy_tracer_flags = { 72 .val = 0, 73 .opts = dummy_tracer_opt 74 }; 75 76 static int 77 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) 78 { 79 return 0; 80 } 81 82 /* 83 * To prevent the comm cache from being overwritten when no 84 * tracing is active, only save the comm when a trace event 85 * occurred. 86 */ 87 static DEFINE_PER_CPU(bool, trace_cmdline_save); 88 89 /* 90 * Kill all tracing for good (never come back). 91 * It is initialized to 1 but will turn to zero if the initialization 92 * of the tracer is successful. But that is the only place that sets 93 * this back to zero. 94 */ 95 static int tracing_disabled = 1; 96 97 DEFINE_PER_CPU(int, ftrace_cpu_disabled); 98 99 cpumask_var_t __read_mostly tracing_buffer_mask; 100 101 /* 102 * ftrace_dump_on_oops - variable to dump ftrace buffer on oops 103 * 104 * If there is an oops (or kernel panic) and the ftrace_dump_on_oops 105 * is set, then ftrace_dump is called. This will output the contents 106 * of the ftrace buffers to the console. This is very useful for 107 * capturing traces that lead to crashes and outputing it to a 108 * serial console. 109 * 110 * It is default off, but you can enable it with either specifying 111 * "ftrace_dump_on_oops" in the kernel command line, or setting 112 * /proc/sys/kernel/ftrace_dump_on_oops 113 * Set 1 if you want to dump buffers of all CPUs 114 * Set 2 if you want to dump the buffer of the CPU that triggered oops 115 */ 116 117 enum ftrace_dump_mode ftrace_dump_on_oops; 118 119 /* When set, tracing will stop when a WARN*() is hit */ 120 int __disable_trace_on_warning; 121 122 static int tracing_set_tracer(struct trace_array *tr, const char *buf); 123 124 #define MAX_TRACER_SIZE 100 125 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata; 126 static char *default_bootup_tracer; 127 128 static bool allocate_snapshot; 129 130 static int __init set_cmdline_ftrace(char *str) 131 { 132 strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE); 133 default_bootup_tracer = bootup_tracer_buf; 134 /* We are using ftrace early, expand it */ 135 ring_buffer_expanded = true; 136 return 1; 137 } 138 __setup("ftrace=", set_cmdline_ftrace); 139 140 static int __init set_ftrace_dump_on_oops(char *str) 141 { 142 if (*str++ != '=' || !*str) { 143 ftrace_dump_on_oops = DUMP_ALL; 144 return 1; 145 } 146 147 if (!strcmp("orig_cpu", str)) { 148 ftrace_dump_on_oops = DUMP_ORIG; 149 return 1; 150 } 151 152 return 0; 153 } 154 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops); 155 156 static int __init stop_trace_on_warning(char *str) 157 { 158 __disable_trace_on_warning = 1; 159 return 1; 160 } 161 __setup("traceoff_on_warning=", stop_trace_on_warning); 162 163 static int __init boot_alloc_snapshot(char *str) 164 { 165 allocate_snapshot = true; 166 /* We also need the main ring buffer expanded */ 167 ring_buffer_expanded = true; 168 return 1; 169 } 170 __setup("alloc_snapshot", boot_alloc_snapshot); 171 172 173 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata; 174 static char *trace_boot_options __initdata; 175 176 static int __init set_trace_boot_options(char *str) 177 { 178 strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE); 179 trace_boot_options = trace_boot_options_buf; 180 return 0; 181 } 182 __setup("trace_options=", set_trace_boot_options); 183 184 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata; 185 static char *trace_boot_clock __initdata; 186 187 static int __init set_trace_boot_clock(char *str) 188 { 189 strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE); 190 trace_boot_clock = trace_boot_clock_buf; 191 return 0; 192 } 193 __setup("trace_clock=", set_trace_boot_clock); 194 195 196 unsigned long long ns2usecs(cycle_t nsec) 197 { 198 nsec += 500; 199 do_div(nsec, 1000); 200 return nsec; 201 } 202 203 /* 204 * The global_trace is the descriptor that holds the tracing 205 * buffers for the live tracing. For each CPU, it contains 206 * a link list of pages that will store trace entries. The 207 * page descriptor of the pages in the memory is used to hold 208 * the link list by linking the lru item in the page descriptor 209 * to each of the pages in the buffer per CPU. 210 * 211 * For each active CPU there is a data field that holds the 212 * pages for the buffer for that CPU. Each CPU has the same number 213 * of pages allocated for its buffer. 214 */ 215 static struct trace_array global_trace; 216 217 LIST_HEAD(ftrace_trace_arrays); 218 219 int trace_array_get(struct trace_array *this_tr) 220 { 221 struct trace_array *tr; 222 int ret = -ENODEV; 223 224 mutex_lock(&trace_types_lock); 225 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 226 if (tr == this_tr) { 227 tr->ref++; 228 ret = 0; 229 break; 230 } 231 } 232 mutex_unlock(&trace_types_lock); 233 234 return ret; 235 } 236 237 static void __trace_array_put(struct trace_array *this_tr) 238 { 239 WARN_ON(!this_tr->ref); 240 this_tr->ref--; 241 } 242 243 void trace_array_put(struct trace_array *this_tr) 244 { 245 mutex_lock(&trace_types_lock); 246 __trace_array_put(this_tr); 247 mutex_unlock(&trace_types_lock); 248 } 249 250 int filter_check_discard(struct ftrace_event_file *file, void *rec, 251 struct ring_buffer *buffer, 252 struct ring_buffer_event *event) 253 { 254 if (unlikely(file->flags & FTRACE_EVENT_FL_FILTERED) && 255 !filter_match_preds(file->filter, rec)) { 256 ring_buffer_discard_commit(buffer, event); 257 return 1; 258 } 259 260 return 0; 261 } 262 EXPORT_SYMBOL_GPL(filter_check_discard); 263 264 int call_filter_check_discard(struct ftrace_event_call *call, void *rec, 265 struct ring_buffer *buffer, 266 struct ring_buffer_event *event) 267 { 268 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) && 269 !filter_match_preds(call->filter, rec)) { 270 ring_buffer_discard_commit(buffer, event); 271 return 1; 272 } 273 274 return 0; 275 } 276 EXPORT_SYMBOL_GPL(call_filter_check_discard); 277 278 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu) 279 { 280 u64 ts; 281 282 /* Early boot up does not have a buffer yet */ 283 if (!buf->buffer) 284 return trace_clock_local(); 285 286 ts = ring_buffer_time_stamp(buf->buffer, cpu); 287 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts); 288 289 return ts; 290 } 291 292 cycle_t ftrace_now(int cpu) 293 { 294 return buffer_ftrace_now(&global_trace.trace_buffer, cpu); 295 } 296 297 /** 298 * tracing_is_enabled - Show if global_trace has been disabled 299 * 300 * Shows if the global trace has been enabled or not. It uses the 301 * mirror flag "buffer_disabled" to be used in fast paths such as for 302 * the irqsoff tracer. But it may be inaccurate due to races. If you 303 * need to know the accurate state, use tracing_is_on() which is a little 304 * slower, but accurate. 305 */ 306 int tracing_is_enabled(void) 307 { 308 /* 309 * For quick access (irqsoff uses this in fast path), just 310 * return the mirror variable of the state of the ring buffer. 311 * It's a little racy, but we don't really care. 312 */ 313 smp_rmb(); 314 return !global_trace.buffer_disabled; 315 } 316 317 /* 318 * trace_buf_size is the size in bytes that is allocated 319 * for a buffer. Note, the number of bytes is always rounded 320 * to page size. 321 * 322 * This number is purposely set to a low number of 16384. 323 * If the dump on oops happens, it will be much appreciated 324 * to not have to wait for all that output. Anyway this can be 325 * boot time and run time configurable. 326 */ 327 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */ 328 329 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT; 330 331 /* trace_types holds a link list of available tracers. */ 332 static struct tracer *trace_types __read_mostly; 333 334 /* 335 * trace_types_lock is used to protect the trace_types list. 336 */ 337 DEFINE_MUTEX(trace_types_lock); 338 339 /* 340 * serialize the access of the ring buffer 341 * 342 * ring buffer serializes readers, but it is low level protection. 343 * The validity of the events (which returns by ring_buffer_peek() ..etc) 344 * are not protected by ring buffer. 345 * 346 * The content of events may become garbage if we allow other process consumes 347 * these events concurrently: 348 * A) the page of the consumed events may become a normal page 349 * (not reader page) in ring buffer, and this page will be rewrited 350 * by events producer. 351 * B) The page of the consumed events may become a page for splice_read, 352 * and this page will be returned to system. 353 * 354 * These primitives allow multi process access to different cpu ring buffer 355 * concurrently. 356 * 357 * These primitives don't distinguish read-only and read-consume access. 358 * Multi read-only access are also serialized. 359 */ 360 361 #ifdef CONFIG_SMP 362 static DECLARE_RWSEM(all_cpu_access_lock); 363 static DEFINE_PER_CPU(struct mutex, cpu_access_lock); 364 365 static inline void trace_access_lock(int cpu) 366 { 367 if (cpu == RING_BUFFER_ALL_CPUS) { 368 /* gain it for accessing the whole ring buffer. */ 369 down_write(&all_cpu_access_lock); 370 } else { 371 /* gain it for accessing a cpu ring buffer. */ 372 373 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */ 374 down_read(&all_cpu_access_lock); 375 376 /* Secondly block other access to this @cpu ring buffer. */ 377 mutex_lock(&per_cpu(cpu_access_lock, cpu)); 378 } 379 } 380 381 static inline void trace_access_unlock(int cpu) 382 { 383 if (cpu == RING_BUFFER_ALL_CPUS) { 384 up_write(&all_cpu_access_lock); 385 } else { 386 mutex_unlock(&per_cpu(cpu_access_lock, cpu)); 387 up_read(&all_cpu_access_lock); 388 } 389 } 390 391 static inline void trace_access_lock_init(void) 392 { 393 int cpu; 394 395 for_each_possible_cpu(cpu) 396 mutex_init(&per_cpu(cpu_access_lock, cpu)); 397 } 398 399 #else 400 401 static DEFINE_MUTEX(access_lock); 402 403 static inline void trace_access_lock(int cpu) 404 { 405 (void)cpu; 406 mutex_lock(&access_lock); 407 } 408 409 static inline void trace_access_unlock(int cpu) 410 { 411 (void)cpu; 412 mutex_unlock(&access_lock); 413 } 414 415 static inline void trace_access_lock_init(void) 416 { 417 } 418 419 #endif 420 421 /* trace_flags holds trace_options default values */ 422 unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | 423 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME | 424 TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | 425 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION; 426 427 static void tracer_tracing_on(struct trace_array *tr) 428 { 429 if (tr->trace_buffer.buffer) 430 ring_buffer_record_on(tr->trace_buffer.buffer); 431 /* 432 * This flag is looked at when buffers haven't been allocated 433 * yet, or by some tracers (like irqsoff), that just want to 434 * know if the ring buffer has been disabled, but it can handle 435 * races of where it gets disabled but we still do a record. 436 * As the check is in the fast path of the tracers, it is more 437 * important to be fast than accurate. 438 */ 439 tr->buffer_disabled = 0; 440 /* Make the flag seen by readers */ 441 smp_wmb(); 442 } 443 444 /** 445 * tracing_on - enable tracing buffers 446 * 447 * This function enables tracing buffers that may have been 448 * disabled with tracing_off. 449 */ 450 void tracing_on(void) 451 { 452 tracer_tracing_on(&global_trace); 453 } 454 EXPORT_SYMBOL_GPL(tracing_on); 455 456 /** 457 * __trace_puts - write a constant string into the trace buffer. 458 * @ip: The address of the caller 459 * @str: The constant string to write 460 * @size: The size of the string. 461 */ 462 int __trace_puts(unsigned long ip, const char *str, int size) 463 { 464 struct ring_buffer_event *event; 465 struct ring_buffer *buffer; 466 struct print_entry *entry; 467 unsigned long irq_flags; 468 int alloc; 469 470 if (unlikely(tracing_selftest_running || tracing_disabled)) 471 return 0; 472 473 alloc = sizeof(*entry) + size + 2; /* possible \n added */ 474 475 local_save_flags(irq_flags); 476 buffer = global_trace.trace_buffer.buffer; 477 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, 478 irq_flags, preempt_count()); 479 if (!event) 480 return 0; 481 482 entry = ring_buffer_event_data(event); 483 entry->ip = ip; 484 485 memcpy(&entry->buf, str, size); 486 487 /* Add a newline if necessary */ 488 if (entry->buf[size - 1] != '\n') { 489 entry->buf[size] = '\n'; 490 entry->buf[size + 1] = '\0'; 491 } else 492 entry->buf[size] = '\0'; 493 494 __buffer_unlock_commit(buffer, event); 495 496 return size; 497 } 498 EXPORT_SYMBOL_GPL(__trace_puts); 499 500 /** 501 * __trace_bputs - write the pointer to a constant string into trace buffer 502 * @ip: The address of the caller 503 * @str: The constant string to write to the buffer to 504 */ 505 int __trace_bputs(unsigned long ip, const char *str) 506 { 507 struct ring_buffer_event *event; 508 struct ring_buffer *buffer; 509 struct bputs_entry *entry; 510 unsigned long irq_flags; 511 int size = sizeof(struct bputs_entry); 512 513 if (unlikely(tracing_selftest_running || tracing_disabled)) 514 return 0; 515 516 local_save_flags(irq_flags); 517 buffer = global_trace.trace_buffer.buffer; 518 event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, 519 irq_flags, preempt_count()); 520 if (!event) 521 return 0; 522 523 entry = ring_buffer_event_data(event); 524 entry->ip = ip; 525 entry->str = str; 526 527 __buffer_unlock_commit(buffer, event); 528 529 return 1; 530 } 531 EXPORT_SYMBOL_GPL(__trace_bputs); 532 533 #ifdef CONFIG_TRACER_SNAPSHOT 534 /** 535 * trace_snapshot - take a snapshot of the current buffer. 536 * 537 * This causes a swap between the snapshot buffer and the current live 538 * tracing buffer. You can use this to take snapshots of the live 539 * trace when some condition is triggered, but continue to trace. 540 * 541 * Note, make sure to allocate the snapshot with either 542 * a tracing_snapshot_alloc(), or by doing it manually 543 * with: echo 1 > /sys/kernel/debug/tracing/snapshot 544 * 545 * If the snapshot buffer is not allocated, it will stop tracing. 546 * Basically making a permanent snapshot. 547 */ 548 void tracing_snapshot(void) 549 { 550 struct trace_array *tr = &global_trace; 551 struct tracer *tracer = tr->current_trace; 552 unsigned long flags; 553 554 if (in_nmi()) { 555 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n"); 556 internal_trace_puts("*** snapshot is being ignored ***\n"); 557 return; 558 } 559 560 if (!tr->allocated_snapshot) { 561 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n"); 562 internal_trace_puts("*** stopping trace here! ***\n"); 563 tracing_off(); 564 return; 565 } 566 567 /* Note, snapshot can not be used when the tracer uses it */ 568 if (tracer->use_max_tr) { 569 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n"); 570 internal_trace_puts("*** Can not use snapshot (sorry) ***\n"); 571 return; 572 } 573 574 local_irq_save(flags); 575 update_max_tr(tr, current, smp_processor_id()); 576 local_irq_restore(flags); 577 } 578 EXPORT_SYMBOL_GPL(tracing_snapshot); 579 580 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf, 581 struct trace_buffer *size_buf, int cpu_id); 582 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val); 583 584 static int alloc_snapshot(struct trace_array *tr) 585 { 586 int ret; 587 588 if (!tr->allocated_snapshot) { 589 590 /* allocate spare buffer */ 591 ret = resize_buffer_duplicate_size(&tr->max_buffer, 592 &tr->trace_buffer, RING_BUFFER_ALL_CPUS); 593 if (ret < 0) 594 return ret; 595 596 tr->allocated_snapshot = true; 597 } 598 599 return 0; 600 } 601 602 static void free_snapshot(struct trace_array *tr) 603 { 604 /* 605 * We don't free the ring buffer. instead, resize it because 606 * The max_tr ring buffer has some state (e.g. ring->clock) and 607 * we want preserve it. 608 */ 609 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS); 610 set_buffer_entries(&tr->max_buffer, 1); 611 tracing_reset_online_cpus(&tr->max_buffer); 612 tr->allocated_snapshot = false; 613 } 614 615 /** 616 * tracing_alloc_snapshot - allocate snapshot buffer. 617 * 618 * This only allocates the snapshot buffer if it isn't already 619 * allocated - it doesn't also take a snapshot. 620 * 621 * This is meant to be used in cases where the snapshot buffer needs 622 * to be set up for events that can't sleep but need to be able to 623 * trigger a snapshot. 624 */ 625 int tracing_alloc_snapshot(void) 626 { 627 struct trace_array *tr = &global_trace; 628 int ret; 629 630 ret = alloc_snapshot(tr); 631 WARN_ON(ret < 0); 632 633 return ret; 634 } 635 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 636 637 /** 638 * trace_snapshot_alloc - allocate and take a snapshot of the current buffer. 639 * 640 * This is similar to trace_snapshot(), but it will allocate the 641 * snapshot buffer if it isn't already allocated. Use this only 642 * where it is safe to sleep, as the allocation may sleep. 643 * 644 * This causes a swap between the snapshot buffer and the current live 645 * tracing buffer. You can use this to take snapshots of the live 646 * trace when some condition is triggered, but continue to trace. 647 */ 648 void tracing_snapshot_alloc(void) 649 { 650 int ret; 651 652 ret = tracing_alloc_snapshot(); 653 if (ret < 0) 654 return; 655 656 tracing_snapshot(); 657 } 658 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 659 #else 660 void tracing_snapshot(void) 661 { 662 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used"); 663 } 664 EXPORT_SYMBOL_GPL(tracing_snapshot); 665 int tracing_alloc_snapshot(void) 666 { 667 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used"); 668 return -ENODEV; 669 } 670 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot); 671 void tracing_snapshot_alloc(void) 672 { 673 /* Give warning */ 674 tracing_snapshot(); 675 } 676 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc); 677 #endif /* CONFIG_TRACER_SNAPSHOT */ 678 679 static void tracer_tracing_off(struct trace_array *tr) 680 { 681 if (tr->trace_buffer.buffer) 682 ring_buffer_record_off(tr->trace_buffer.buffer); 683 /* 684 * This flag is looked at when buffers haven't been allocated 685 * yet, or by some tracers (like irqsoff), that just want to 686 * know if the ring buffer has been disabled, but it can handle 687 * races of where it gets disabled but we still do a record. 688 * As the check is in the fast path of the tracers, it is more 689 * important to be fast than accurate. 690 */ 691 tr->buffer_disabled = 1; 692 /* Make the flag seen by readers */ 693 smp_wmb(); 694 } 695 696 /** 697 * tracing_off - turn off tracing buffers 698 * 699 * This function stops the tracing buffers from recording data. 700 * It does not disable any overhead the tracers themselves may 701 * be causing. This function simply causes all recording to 702 * the ring buffers to fail. 703 */ 704 void tracing_off(void) 705 { 706 tracer_tracing_off(&global_trace); 707 } 708 EXPORT_SYMBOL_GPL(tracing_off); 709 710 void disable_trace_on_warning(void) 711 { 712 if (__disable_trace_on_warning) 713 tracing_off(); 714 } 715 716 /** 717 * tracer_tracing_is_on - show real state of ring buffer enabled 718 * @tr : the trace array to know if ring buffer is enabled 719 * 720 * Shows real state of the ring buffer if it is enabled or not. 721 */ 722 static int tracer_tracing_is_on(struct trace_array *tr) 723 { 724 if (tr->trace_buffer.buffer) 725 return ring_buffer_record_is_on(tr->trace_buffer.buffer); 726 return !tr->buffer_disabled; 727 } 728 729 /** 730 * tracing_is_on - show state of ring buffers enabled 731 */ 732 int tracing_is_on(void) 733 { 734 return tracer_tracing_is_on(&global_trace); 735 } 736 EXPORT_SYMBOL_GPL(tracing_is_on); 737 738 static int __init set_buf_size(char *str) 739 { 740 unsigned long buf_size; 741 742 if (!str) 743 return 0; 744 buf_size = memparse(str, &str); 745 /* nr_entries can not be zero */ 746 if (buf_size == 0) 747 return 0; 748 trace_buf_size = buf_size; 749 return 1; 750 } 751 __setup("trace_buf_size=", set_buf_size); 752 753 static int __init set_tracing_thresh(char *str) 754 { 755 unsigned long threshold; 756 int ret; 757 758 if (!str) 759 return 0; 760 ret = kstrtoul(str, 0, &threshold); 761 if (ret < 0) 762 return 0; 763 tracing_thresh = threshold * 1000; 764 return 1; 765 } 766 __setup("tracing_thresh=", set_tracing_thresh); 767 768 unsigned long nsecs_to_usecs(unsigned long nsecs) 769 { 770 return nsecs / 1000; 771 } 772 773 /* These must match the bit postions in trace_iterator_flags */ 774 static const char *trace_options[] = { 775 "print-parent", 776 "sym-offset", 777 "sym-addr", 778 "verbose", 779 "raw", 780 "hex", 781 "bin", 782 "block", 783 "stacktrace", 784 "trace_printk", 785 "ftrace_preempt", 786 "branch", 787 "annotate", 788 "userstacktrace", 789 "sym-userobj", 790 "printk-msg-only", 791 "context-info", 792 "latency-format", 793 "sleep-time", 794 "graph-time", 795 "record-cmd", 796 "overwrite", 797 "disable_on_free", 798 "irq-info", 799 "markers", 800 "function-trace", 801 NULL 802 }; 803 804 static struct { 805 u64 (*func)(void); 806 const char *name; 807 int in_ns; /* is this clock in nanoseconds? */ 808 } trace_clocks[] = { 809 { trace_clock_local, "local", 1 }, 810 { trace_clock_global, "global", 1 }, 811 { trace_clock_counter, "counter", 0 }, 812 { trace_clock_jiffies, "uptime", 1 }, 813 { trace_clock, "perf", 1 }, 814 ARCH_TRACE_CLOCKS 815 }; 816 817 /* 818 * trace_parser_get_init - gets the buffer for trace parser 819 */ 820 int trace_parser_get_init(struct trace_parser *parser, int size) 821 { 822 memset(parser, 0, sizeof(*parser)); 823 824 parser->buffer = kmalloc(size, GFP_KERNEL); 825 if (!parser->buffer) 826 return 1; 827 828 parser->size = size; 829 return 0; 830 } 831 832 /* 833 * trace_parser_put - frees the buffer for trace parser 834 */ 835 void trace_parser_put(struct trace_parser *parser) 836 { 837 kfree(parser->buffer); 838 } 839 840 /* 841 * trace_get_user - reads the user input string separated by space 842 * (matched by isspace(ch)) 843 * 844 * For each string found the 'struct trace_parser' is updated, 845 * and the function returns. 846 * 847 * Returns number of bytes read. 848 * 849 * See kernel/trace/trace.h for 'struct trace_parser' details. 850 */ 851 int trace_get_user(struct trace_parser *parser, const char __user *ubuf, 852 size_t cnt, loff_t *ppos) 853 { 854 char ch; 855 size_t read = 0; 856 ssize_t ret; 857 858 if (!*ppos) 859 trace_parser_clear(parser); 860 861 ret = get_user(ch, ubuf++); 862 if (ret) 863 goto out; 864 865 read++; 866 cnt--; 867 868 /* 869 * The parser is not finished with the last write, 870 * continue reading the user input without skipping spaces. 871 */ 872 if (!parser->cont) { 873 /* skip white space */ 874 while (cnt && isspace(ch)) { 875 ret = get_user(ch, ubuf++); 876 if (ret) 877 goto out; 878 read++; 879 cnt--; 880 } 881 882 /* only spaces were written */ 883 if (isspace(ch)) { 884 *ppos += read; 885 ret = read; 886 goto out; 887 } 888 889 parser->idx = 0; 890 } 891 892 /* read the non-space input */ 893 while (cnt && !isspace(ch)) { 894 if (parser->idx < parser->size - 1) 895 parser->buffer[parser->idx++] = ch; 896 else { 897 ret = -EINVAL; 898 goto out; 899 } 900 ret = get_user(ch, ubuf++); 901 if (ret) 902 goto out; 903 read++; 904 cnt--; 905 } 906 907 /* We either got finished input or we have to wait for another call. */ 908 if (isspace(ch)) { 909 parser->buffer[parser->idx] = 0; 910 parser->cont = false; 911 } else if (parser->idx < parser->size - 1) { 912 parser->cont = true; 913 parser->buffer[parser->idx++] = ch; 914 } else { 915 ret = -EINVAL; 916 goto out; 917 } 918 919 *ppos += read; 920 ret = read; 921 922 out: 923 return ret; 924 } 925 926 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt) 927 { 928 int len; 929 930 if (s->len <= s->readpos) 931 return -EBUSY; 932 933 len = s->len - s->readpos; 934 if (cnt > len) 935 cnt = len; 936 memcpy(buf, s->buffer + s->readpos, cnt); 937 938 s->readpos += cnt; 939 return cnt; 940 } 941 942 unsigned long __read_mostly tracing_thresh; 943 944 #ifdef CONFIG_TRACER_MAX_TRACE 945 /* 946 * Copy the new maximum trace into the separate maximum-trace 947 * structure. (this way the maximum trace is permanently saved, 948 * for later retrieval via /sys/kernel/debug/tracing/latency_trace) 949 */ 950 static void 951 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 952 { 953 struct trace_buffer *trace_buf = &tr->trace_buffer; 954 struct trace_buffer *max_buf = &tr->max_buffer; 955 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu); 956 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu); 957 958 max_buf->cpu = cpu; 959 max_buf->time_start = data->preempt_timestamp; 960 961 max_data->saved_latency = tr->max_latency; 962 max_data->critical_start = data->critical_start; 963 max_data->critical_end = data->critical_end; 964 965 memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN); 966 max_data->pid = tsk->pid; 967 /* 968 * If tsk == current, then use current_uid(), as that does not use 969 * RCU. The irq tracer can be called out of RCU scope. 970 */ 971 if (tsk == current) 972 max_data->uid = current_uid(); 973 else 974 max_data->uid = task_uid(tsk); 975 976 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; 977 max_data->policy = tsk->policy; 978 max_data->rt_priority = tsk->rt_priority; 979 980 /* record this tasks comm */ 981 tracing_record_cmdline(tsk); 982 } 983 984 /** 985 * update_max_tr - snapshot all trace buffers from global_trace to max_tr 986 * @tr: tracer 987 * @tsk: the task with the latency 988 * @cpu: The cpu that initiated the trace. 989 * 990 * Flip the buffers between the @tr and the max_tr and record information 991 * about which task was the cause of this latency. 992 */ 993 void 994 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) 995 { 996 struct ring_buffer *buf; 997 998 if (tr->stop_count) 999 return; 1000 1001 WARN_ON_ONCE(!irqs_disabled()); 1002 1003 if (!tr->allocated_snapshot) { 1004 /* Only the nop tracer should hit this when disabling */ 1005 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1006 return; 1007 } 1008 1009 arch_spin_lock(&tr->max_lock); 1010 1011 buf = tr->trace_buffer.buffer; 1012 tr->trace_buffer.buffer = tr->max_buffer.buffer; 1013 tr->max_buffer.buffer = buf; 1014 1015 __update_max_tr(tr, tsk, cpu); 1016 arch_spin_unlock(&tr->max_lock); 1017 } 1018 1019 /** 1020 * update_max_tr_single - only copy one trace over, and reset the rest 1021 * @tr - tracer 1022 * @tsk - task with the latency 1023 * @cpu - the cpu of the buffer to copy. 1024 * 1025 * Flip the trace of a single CPU buffer between the @tr and the max_tr. 1026 */ 1027 void 1028 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu) 1029 { 1030 int ret; 1031 1032 if (tr->stop_count) 1033 return; 1034 1035 WARN_ON_ONCE(!irqs_disabled()); 1036 if (!tr->allocated_snapshot) { 1037 /* Only the nop tracer should hit this when disabling */ 1038 WARN_ON_ONCE(tr->current_trace != &nop_trace); 1039 return; 1040 } 1041 1042 arch_spin_lock(&tr->max_lock); 1043 1044 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu); 1045 1046 if (ret == -EBUSY) { 1047 /* 1048 * We failed to swap the buffer due to a commit taking 1049 * place on this CPU. We fail to record, but we reset 1050 * the max trace buffer (no one writes directly to it) 1051 * and flag that it failed. 1052 */ 1053 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_, 1054 "Failed to swap buffers due to commit in progress\n"); 1055 } 1056 1057 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY); 1058 1059 __update_max_tr(tr, tsk, cpu); 1060 arch_spin_unlock(&tr->max_lock); 1061 } 1062 #endif /* CONFIG_TRACER_MAX_TRACE */ 1063 1064 static int wait_on_pipe(struct trace_iterator *iter) 1065 { 1066 /* Iterators are static, they should be filled or empty */ 1067 if (trace_buffer_iter(iter, iter->cpu_file)) 1068 return 0; 1069 1070 return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file); 1071 } 1072 1073 #ifdef CONFIG_FTRACE_STARTUP_TEST 1074 static int run_tracer_selftest(struct tracer *type) 1075 { 1076 struct trace_array *tr = &global_trace; 1077 struct tracer *saved_tracer = tr->current_trace; 1078 int ret; 1079 1080 if (!type->selftest || tracing_selftest_disabled) 1081 return 0; 1082 1083 /* 1084 * Run a selftest on this tracer. 1085 * Here we reset the trace buffer, and set the current 1086 * tracer to be this tracer. The tracer can then run some 1087 * internal tracing to verify that everything is in order. 1088 * If we fail, we do not register this tracer. 1089 */ 1090 tracing_reset_online_cpus(&tr->trace_buffer); 1091 1092 tr->current_trace = type; 1093 1094 #ifdef CONFIG_TRACER_MAX_TRACE 1095 if (type->use_max_tr) { 1096 /* If we expanded the buffers, make sure the max is expanded too */ 1097 if (ring_buffer_expanded) 1098 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size, 1099 RING_BUFFER_ALL_CPUS); 1100 tr->allocated_snapshot = true; 1101 } 1102 #endif 1103 1104 /* the test is responsible for initializing and enabling */ 1105 pr_info("Testing tracer %s: ", type->name); 1106 ret = type->selftest(type, tr); 1107 /* the test is responsible for resetting too */ 1108 tr->current_trace = saved_tracer; 1109 if (ret) { 1110 printk(KERN_CONT "FAILED!\n"); 1111 /* Add the warning after printing 'FAILED' */ 1112 WARN_ON(1); 1113 return -1; 1114 } 1115 /* Only reset on passing, to avoid touching corrupted buffers */ 1116 tracing_reset_online_cpus(&tr->trace_buffer); 1117 1118 #ifdef CONFIG_TRACER_MAX_TRACE 1119 if (type->use_max_tr) { 1120 tr->allocated_snapshot = false; 1121 1122 /* Shrink the max buffer again */ 1123 if (ring_buffer_expanded) 1124 ring_buffer_resize(tr->max_buffer.buffer, 1, 1125 RING_BUFFER_ALL_CPUS); 1126 } 1127 #endif 1128 1129 printk(KERN_CONT "PASSED\n"); 1130 return 0; 1131 } 1132 #else 1133 static inline int run_tracer_selftest(struct tracer *type) 1134 { 1135 return 0; 1136 } 1137 #endif /* CONFIG_FTRACE_STARTUP_TEST */ 1138 1139 /** 1140 * register_tracer - register a tracer with the ftrace system. 1141 * @type - the plugin for the tracer 1142 * 1143 * Register a new plugin tracer. 1144 */ 1145 int register_tracer(struct tracer *type) 1146 { 1147 struct tracer *t; 1148 int ret = 0; 1149 1150 if (!type->name) { 1151 pr_info("Tracer must have a name\n"); 1152 return -1; 1153 } 1154 1155 if (strlen(type->name) >= MAX_TRACER_SIZE) { 1156 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE); 1157 return -1; 1158 } 1159 1160 mutex_lock(&trace_types_lock); 1161 1162 tracing_selftest_running = true; 1163 1164 for (t = trace_types; t; t = t->next) { 1165 if (strcmp(type->name, t->name) == 0) { 1166 /* already found */ 1167 pr_info("Tracer %s already registered\n", 1168 type->name); 1169 ret = -1; 1170 goto out; 1171 } 1172 } 1173 1174 if (!type->set_flag) 1175 type->set_flag = &dummy_set_flag; 1176 if (!type->flags) 1177 type->flags = &dummy_tracer_flags; 1178 else 1179 if (!type->flags->opts) 1180 type->flags->opts = dummy_tracer_opt; 1181 1182 ret = run_tracer_selftest(type); 1183 if (ret < 0) 1184 goto out; 1185 1186 type->next = trace_types; 1187 trace_types = type; 1188 1189 out: 1190 tracing_selftest_running = false; 1191 mutex_unlock(&trace_types_lock); 1192 1193 if (ret || !default_bootup_tracer) 1194 goto out_unlock; 1195 1196 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE)) 1197 goto out_unlock; 1198 1199 printk(KERN_INFO "Starting tracer '%s'\n", type->name); 1200 /* Do we want this tracer to start on bootup? */ 1201 tracing_set_tracer(&global_trace, type->name); 1202 default_bootup_tracer = NULL; 1203 /* disable other selftests, since this will break it. */ 1204 tracing_selftest_disabled = true; 1205 #ifdef CONFIG_FTRACE_STARTUP_TEST 1206 printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n", 1207 type->name); 1208 #endif 1209 1210 out_unlock: 1211 return ret; 1212 } 1213 1214 void tracing_reset(struct trace_buffer *buf, int cpu) 1215 { 1216 struct ring_buffer *buffer = buf->buffer; 1217 1218 if (!buffer) 1219 return; 1220 1221 ring_buffer_record_disable(buffer); 1222 1223 /* Make sure all commits have finished */ 1224 synchronize_sched(); 1225 ring_buffer_reset_cpu(buffer, cpu); 1226 1227 ring_buffer_record_enable(buffer); 1228 } 1229 1230 void tracing_reset_online_cpus(struct trace_buffer *buf) 1231 { 1232 struct ring_buffer *buffer = buf->buffer; 1233 int cpu; 1234 1235 if (!buffer) 1236 return; 1237 1238 ring_buffer_record_disable(buffer); 1239 1240 /* Make sure all commits have finished */ 1241 synchronize_sched(); 1242 1243 buf->time_start = buffer_ftrace_now(buf, buf->cpu); 1244 1245 for_each_online_cpu(cpu) 1246 ring_buffer_reset_cpu(buffer, cpu); 1247 1248 ring_buffer_record_enable(buffer); 1249 } 1250 1251 /* Must have trace_types_lock held */ 1252 void tracing_reset_all_online_cpus(void) 1253 { 1254 struct trace_array *tr; 1255 1256 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 1257 tracing_reset_online_cpus(&tr->trace_buffer); 1258 #ifdef CONFIG_TRACER_MAX_TRACE 1259 tracing_reset_online_cpus(&tr->max_buffer); 1260 #endif 1261 } 1262 } 1263 1264 #define SAVED_CMDLINES_DEFAULT 128 1265 #define NO_CMDLINE_MAP UINT_MAX 1266 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED; 1267 struct saved_cmdlines_buffer { 1268 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1]; 1269 unsigned *map_cmdline_to_pid; 1270 unsigned cmdline_num; 1271 int cmdline_idx; 1272 char *saved_cmdlines; 1273 }; 1274 static struct saved_cmdlines_buffer *savedcmd; 1275 1276 /* temporary disable recording */ 1277 static atomic_t trace_record_cmdline_disabled __read_mostly; 1278 1279 static inline char *get_saved_cmdlines(int idx) 1280 { 1281 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN]; 1282 } 1283 1284 static inline void set_cmdline(int idx, const char *cmdline) 1285 { 1286 memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN); 1287 } 1288 1289 static int allocate_cmdlines_buffer(unsigned int val, 1290 struct saved_cmdlines_buffer *s) 1291 { 1292 s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid), 1293 GFP_KERNEL); 1294 if (!s->map_cmdline_to_pid) 1295 return -ENOMEM; 1296 1297 s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL); 1298 if (!s->saved_cmdlines) { 1299 kfree(s->map_cmdline_to_pid); 1300 return -ENOMEM; 1301 } 1302 1303 s->cmdline_idx = 0; 1304 s->cmdline_num = val; 1305 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP, 1306 sizeof(s->map_pid_to_cmdline)); 1307 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP, 1308 val * sizeof(*s->map_cmdline_to_pid)); 1309 1310 return 0; 1311 } 1312 1313 static int trace_create_savedcmd(void) 1314 { 1315 int ret; 1316 1317 savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL); 1318 if (!savedcmd) 1319 return -ENOMEM; 1320 1321 ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd); 1322 if (ret < 0) { 1323 kfree(savedcmd); 1324 savedcmd = NULL; 1325 return -ENOMEM; 1326 } 1327 1328 return 0; 1329 } 1330 1331 int is_tracing_stopped(void) 1332 { 1333 return global_trace.stop_count; 1334 } 1335 1336 /** 1337 * tracing_start - quick start of the tracer 1338 * 1339 * If tracing is enabled but was stopped by tracing_stop, 1340 * this will start the tracer back up. 1341 */ 1342 void tracing_start(void) 1343 { 1344 struct ring_buffer *buffer; 1345 unsigned long flags; 1346 1347 if (tracing_disabled) 1348 return; 1349 1350 raw_spin_lock_irqsave(&global_trace.start_lock, flags); 1351 if (--global_trace.stop_count) { 1352 if (global_trace.stop_count < 0) { 1353 /* Someone screwed up their debugging */ 1354 WARN_ON_ONCE(1); 1355 global_trace.stop_count = 0; 1356 } 1357 goto out; 1358 } 1359 1360 /* Prevent the buffers from switching */ 1361 arch_spin_lock(&global_trace.max_lock); 1362 1363 buffer = global_trace.trace_buffer.buffer; 1364 if (buffer) 1365 ring_buffer_record_enable(buffer); 1366 1367 #ifdef CONFIG_TRACER_MAX_TRACE 1368 buffer = global_trace.max_buffer.buffer; 1369 if (buffer) 1370 ring_buffer_record_enable(buffer); 1371 #endif 1372 1373 arch_spin_unlock(&global_trace.max_lock); 1374 1375 out: 1376 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); 1377 } 1378 1379 static void tracing_start_tr(struct trace_array *tr) 1380 { 1381 struct ring_buffer *buffer; 1382 unsigned long flags; 1383 1384 if (tracing_disabled) 1385 return; 1386 1387 /* If global, we need to also start the max tracer */ 1388 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 1389 return tracing_start(); 1390 1391 raw_spin_lock_irqsave(&tr->start_lock, flags); 1392 1393 if (--tr->stop_count) { 1394 if (tr->stop_count < 0) { 1395 /* Someone screwed up their debugging */ 1396 WARN_ON_ONCE(1); 1397 tr->stop_count = 0; 1398 } 1399 goto out; 1400 } 1401 1402 buffer = tr->trace_buffer.buffer; 1403 if (buffer) 1404 ring_buffer_record_enable(buffer); 1405 1406 out: 1407 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 1408 } 1409 1410 /** 1411 * tracing_stop - quick stop of the tracer 1412 * 1413 * Light weight way to stop tracing. Use in conjunction with 1414 * tracing_start. 1415 */ 1416 void tracing_stop(void) 1417 { 1418 struct ring_buffer *buffer; 1419 unsigned long flags; 1420 1421 raw_spin_lock_irqsave(&global_trace.start_lock, flags); 1422 if (global_trace.stop_count++) 1423 goto out; 1424 1425 /* Prevent the buffers from switching */ 1426 arch_spin_lock(&global_trace.max_lock); 1427 1428 buffer = global_trace.trace_buffer.buffer; 1429 if (buffer) 1430 ring_buffer_record_disable(buffer); 1431 1432 #ifdef CONFIG_TRACER_MAX_TRACE 1433 buffer = global_trace.max_buffer.buffer; 1434 if (buffer) 1435 ring_buffer_record_disable(buffer); 1436 #endif 1437 1438 arch_spin_unlock(&global_trace.max_lock); 1439 1440 out: 1441 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); 1442 } 1443 1444 static void tracing_stop_tr(struct trace_array *tr) 1445 { 1446 struct ring_buffer *buffer; 1447 unsigned long flags; 1448 1449 /* If global, we need to also stop the max tracer */ 1450 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 1451 return tracing_stop(); 1452 1453 raw_spin_lock_irqsave(&tr->start_lock, flags); 1454 if (tr->stop_count++) 1455 goto out; 1456 1457 buffer = tr->trace_buffer.buffer; 1458 if (buffer) 1459 ring_buffer_record_disable(buffer); 1460 1461 out: 1462 raw_spin_unlock_irqrestore(&tr->start_lock, flags); 1463 } 1464 1465 void trace_stop_cmdline_recording(void); 1466 1467 static int trace_save_cmdline(struct task_struct *tsk) 1468 { 1469 unsigned pid, idx; 1470 1471 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) 1472 return 0; 1473 1474 /* 1475 * It's not the end of the world if we don't get 1476 * the lock, but we also don't want to spin 1477 * nor do we want to disable interrupts, 1478 * so if we miss here, then better luck next time. 1479 */ 1480 if (!arch_spin_trylock(&trace_cmdline_lock)) 1481 return 0; 1482 1483 idx = savedcmd->map_pid_to_cmdline[tsk->pid]; 1484 if (idx == NO_CMDLINE_MAP) { 1485 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num; 1486 1487 /* 1488 * Check whether the cmdline buffer at idx has a pid 1489 * mapped. We are going to overwrite that entry so we 1490 * need to clear the map_pid_to_cmdline. Otherwise we 1491 * would read the new comm for the old pid. 1492 */ 1493 pid = savedcmd->map_cmdline_to_pid[idx]; 1494 if (pid != NO_CMDLINE_MAP) 1495 savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP; 1496 1497 savedcmd->map_cmdline_to_pid[idx] = tsk->pid; 1498 savedcmd->map_pid_to_cmdline[tsk->pid] = idx; 1499 1500 savedcmd->cmdline_idx = idx; 1501 } 1502 1503 set_cmdline(idx, tsk->comm); 1504 1505 arch_spin_unlock(&trace_cmdline_lock); 1506 1507 return 1; 1508 } 1509 1510 static void __trace_find_cmdline(int pid, char comm[]) 1511 { 1512 unsigned map; 1513 1514 if (!pid) { 1515 strcpy(comm, "<idle>"); 1516 return; 1517 } 1518 1519 if (WARN_ON_ONCE(pid < 0)) { 1520 strcpy(comm, "<XXX>"); 1521 return; 1522 } 1523 1524 if (pid > PID_MAX_DEFAULT) { 1525 strcpy(comm, "<...>"); 1526 return; 1527 } 1528 1529 map = savedcmd->map_pid_to_cmdline[pid]; 1530 if (map != NO_CMDLINE_MAP) 1531 strcpy(comm, get_saved_cmdlines(map)); 1532 else 1533 strcpy(comm, "<...>"); 1534 } 1535 1536 void trace_find_cmdline(int pid, char comm[]) 1537 { 1538 preempt_disable(); 1539 arch_spin_lock(&trace_cmdline_lock); 1540 1541 __trace_find_cmdline(pid, comm); 1542 1543 arch_spin_unlock(&trace_cmdline_lock); 1544 preempt_enable(); 1545 } 1546 1547 void tracing_record_cmdline(struct task_struct *tsk) 1548 { 1549 if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on()) 1550 return; 1551 1552 if (!__this_cpu_read(trace_cmdline_save)) 1553 return; 1554 1555 if (trace_save_cmdline(tsk)) 1556 __this_cpu_write(trace_cmdline_save, false); 1557 } 1558 1559 void 1560 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, 1561 int pc) 1562 { 1563 struct task_struct *tsk = current; 1564 1565 entry->preempt_count = pc & 0xff; 1566 entry->pid = (tsk) ? tsk->pid : 0; 1567 entry->flags = 1568 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT 1569 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) | 1570 #else 1571 TRACE_FLAG_IRQS_NOSUPPORT | 1572 #endif 1573 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | 1574 ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) | 1575 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) | 1576 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0); 1577 } 1578 EXPORT_SYMBOL_GPL(tracing_generic_entry_update); 1579 1580 struct ring_buffer_event * 1581 trace_buffer_lock_reserve(struct ring_buffer *buffer, 1582 int type, 1583 unsigned long len, 1584 unsigned long flags, int pc) 1585 { 1586 struct ring_buffer_event *event; 1587 1588 event = ring_buffer_lock_reserve(buffer, len); 1589 if (event != NULL) { 1590 struct trace_entry *ent = ring_buffer_event_data(event); 1591 1592 tracing_generic_entry_update(ent, flags, pc); 1593 ent->type = type; 1594 } 1595 1596 return event; 1597 } 1598 1599 void 1600 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event) 1601 { 1602 __this_cpu_write(trace_cmdline_save, true); 1603 ring_buffer_unlock_commit(buffer, event); 1604 } 1605 1606 static inline void 1607 __trace_buffer_unlock_commit(struct ring_buffer *buffer, 1608 struct ring_buffer_event *event, 1609 unsigned long flags, int pc) 1610 { 1611 __buffer_unlock_commit(buffer, event); 1612 1613 ftrace_trace_stack(buffer, flags, 6, pc); 1614 ftrace_trace_userstack(buffer, flags, pc); 1615 } 1616 1617 void trace_buffer_unlock_commit(struct ring_buffer *buffer, 1618 struct ring_buffer_event *event, 1619 unsigned long flags, int pc) 1620 { 1621 __trace_buffer_unlock_commit(buffer, event, flags, pc); 1622 } 1623 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit); 1624 1625 static struct ring_buffer *temp_buffer; 1626 1627 struct ring_buffer_event * 1628 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb, 1629 struct ftrace_event_file *ftrace_file, 1630 int type, unsigned long len, 1631 unsigned long flags, int pc) 1632 { 1633 struct ring_buffer_event *entry; 1634 1635 *current_rb = ftrace_file->tr->trace_buffer.buffer; 1636 entry = trace_buffer_lock_reserve(*current_rb, 1637 type, len, flags, pc); 1638 /* 1639 * If tracing is off, but we have triggers enabled 1640 * we still need to look at the event data. Use the temp_buffer 1641 * to store the trace event for the tigger to use. It's recusive 1642 * safe and will not be recorded anywhere. 1643 */ 1644 if (!entry && ftrace_file->flags & FTRACE_EVENT_FL_TRIGGER_COND) { 1645 *current_rb = temp_buffer; 1646 entry = trace_buffer_lock_reserve(*current_rb, 1647 type, len, flags, pc); 1648 } 1649 return entry; 1650 } 1651 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve); 1652 1653 struct ring_buffer_event * 1654 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb, 1655 int type, unsigned long len, 1656 unsigned long flags, int pc) 1657 { 1658 *current_rb = global_trace.trace_buffer.buffer; 1659 return trace_buffer_lock_reserve(*current_rb, 1660 type, len, flags, pc); 1661 } 1662 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve); 1663 1664 void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, 1665 struct ring_buffer_event *event, 1666 unsigned long flags, int pc) 1667 { 1668 __trace_buffer_unlock_commit(buffer, event, flags, pc); 1669 } 1670 EXPORT_SYMBOL_GPL(trace_current_buffer_unlock_commit); 1671 1672 void trace_buffer_unlock_commit_regs(struct ring_buffer *buffer, 1673 struct ring_buffer_event *event, 1674 unsigned long flags, int pc, 1675 struct pt_regs *regs) 1676 { 1677 __buffer_unlock_commit(buffer, event); 1678 1679 ftrace_trace_stack_regs(buffer, flags, 0, pc, regs); 1680 ftrace_trace_userstack(buffer, flags, pc); 1681 } 1682 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs); 1683 1684 void trace_current_buffer_discard_commit(struct ring_buffer *buffer, 1685 struct ring_buffer_event *event) 1686 { 1687 ring_buffer_discard_commit(buffer, event); 1688 } 1689 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit); 1690 1691 void 1692 trace_function(struct trace_array *tr, 1693 unsigned long ip, unsigned long parent_ip, unsigned long flags, 1694 int pc) 1695 { 1696 struct ftrace_event_call *call = &event_function; 1697 struct ring_buffer *buffer = tr->trace_buffer.buffer; 1698 struct ring_buffer_event *event; 1699 struct ftrace_entry *entry; 1700 1701 /* If we are reading the ring buffer, don't trace */ 1702 if (unlikely(__this_cpu_read(ftrace_cpu_disabled))) 1703 return; 1704 1705 event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry), 1706 flags, pc); 1707 if (!event) 1708 return; 1709 entry = ring_buffer_event_data(event); 1710 entry->ip = ip; 1711 entry->parent_ip = parent_ip; 1712 1713 if (!call_filter_check_discard(call, entry, buffer, event)) 1714 __buffer_unlock_commit(buffer, event); 1715 } 1716 1717 #ifdef CONFIG_STACKTRACE 1718 1719 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long)) 1720 struct ftrace_stack { 1721 unsigned long calls[FTRACE_STACK_MAX_ENTRIES]; 1722 }; 1723 1724 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack); 1725 static DEFINE_PER_CPU(int, ftrace_stack_reserve); 1726 1727 static void __ftrace_trace_stack(struct ring_buffer *buffer, 1728 unsigned long flags, 1729 int skip, int pc, struct pt_regs *regs) 1730 { 1731 struct ftrace_event_call *call = &event_kernel_stack; 1732 struct ring_buffer_event *event; 1733 struct stack_entry *entry; 1734 struct stack_trace trace; 1735 int use_stack; 1736 int size = FTRACE_STACK_ENTRIES; 1737 1738 trace.nr_entries = 0; 1739 trace.skip = skip; 1740 1741 /* 1742 * Since events can happen in NMIs there's no safe way to 1743 * use the per cpu ftrace_stacks. We reserve it and if an interrupt 1744 * or NMI comes in, it will just have to use the default 1745 * FTRACE_STACK_SIZE. 1746 */ 1747 preempt_disable_notrace(); 1748 1749 use_stack = __this_cpu_inc_return(ftrace_stack_reserve); 1750 /* 1751 * We don't need any atomic variables, just a barrier. 1752 * If an interrupt comes in, we don't care, because it would 1753 * have exited and put the counter back to what we want. 1754 * We just need a barrier to keep gcc from moving things 1755 * around. 1756 */ 1757 barrier(); 1758 if (use_stack == 1) { 1759 trace.entries = this_cpu_ptr(ftrace_stack.calls); 1760 trace.max_entries = FTRACE_STACK_MAX_ENTRIES; 1761 1762 if (regs) 1763 save_stack_trace_regs(regs, &trace); 1764 else 1765 save_stack_trace(&trace); 1766 1767 if (trace.nr_entries > size) 1768 size = trace.nr_entries; 1769 } else 1770 /* From now on, use_stack is a boolean */ 1771 use_stack = 0; 1772 1773 size *= sizeof(unsigned long); 1774 1775 event = trace_buffer_lock_reserve(buffer, TRACE_STACK, 1776 sizeof(*entry) + size, flags, pc); 1777 if (!event) 1778 goto out; 1779 entry = ring_buffer_event_data(event); 1780 1781 memset(&entry->caller, 0, size); 1782 1783 if (use_stack) 1784 memcpy(&entry->caller, trace.entries, 1785 trace.nr_entries * sizeof(unsigned long)); 1786 else { 1787 trace.max_entries = FTRACE_STACK_ENTRIES; 1788 trace.entries = entry->caller; 1789 if (regs) 1790 save_stack_trace_regs(regs, &trace); 1791 else 1792 save_stack_trace(&trace); 1793 } 1794 1795 entry->size = trace.nr_entries; 1796 1797 if (!call_filter_check_discard(call, entry, buffer, event)) 1798 __buffer_unlock_commit(buffer, event); 1799 1800 out: 1801 /* Again, don't let gcc optimize things here */ 1802 barrier(); 1803 __this_cpu_dec(ftrace_stack_reserve); 1804 preempt_enable_notrace(); 1805 1806 } 1807 1808 void ftrace_trace_stack_regs(struct ring_buffer *buffer, unsigned long flags, 1809 int skip, int pc, struct pt_regs *regs) 1810 { 1811 if (!(trace_flags & TRACE_ITER_STACKTRACE)) 1812 return; 1813 1814 __ftrace_trace_stack(buffer, flags, skip, pc, regs); 1815 } 1816 1817 void ftrace_trace_stack(struct ring_buffer *buffer, unsigned long flags, 1818 int skip, int pc) 1819 { 1820 if (!(trace_flags & TRACE_ITER_STACKTRACE)) 1821 return; 1822 1823 __ftrace_trace_stack(buffer, flags, skip, pc, NULL); 1824 } 1825 1826 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip, 1827 int pc) 1828 { 1829 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL); 1830 } 1831 1832 /** 1833 * trace_dump_stack - record a stack back trace in the trace buffer 1834 * @skip: Number of functions to skip (helper handlers) 1835 */ 1836 void trace_dump_stack(int skip) 1837 { 1838 unsigned long flags; 1839 1840 if (tracing_disabled || tracing_selftest_running) 1841 return; 1842 1843 local_save_flags(flags); 1844 1845 /* 1846 * Skip 3 more, seems to get us at the caller of 1847 * this function. 1848 */ 1849 skip += 3; 1850 __ftrace_trace_stack(global_trace.trace_buffer.buffer, 1851 flags, skip, preempt_count(), NULL); 1852 } 1853 1854 static DEFINE_PER_CPU(int, user_stack_count); 1855 1856 void 1857 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc) 1858 { 1859 struct ftrace_event_call *call = &event_user_stack; 1860 struct ring_buffer_event *event; 1861 struct userstack_entry *entry; 1862 struct stack_trace trace; 1863 1864 if (!(trace_flags & TRACE_ITER_USERSTACKTRACE)) 1865 return; 1866 1867 /* 1868 * NMIs can not handle page faults, even with fix ups. 1869 * The save user stack can (and often does) fault. 1870 */ 1871 if (unlikely(in_nmi())) 1872 return; 1873 1874 /* 1875 * prevent recursion, since the user stack tracing may 1876 * trigger other kernel events. 1877 */ 1878 preempt_disable(); 1879 if (__this_cpu_read(user_stack_count)) 1880 goto out; 1881 1882 __this_cpu_inc(user_stack_count); 1883 1884 event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK, 1885 sizeof(*entry), flags, pc); 1886 if (!event) 1887 goto out_drop_count; 1888 entry = ring_buffer_event_data(event); 1889 1890 entry->tgid = current->tgid; 1891 memset(&entry->caller, 0, sizeof(entry->caller)); 1892 1893 trace.nr_entries = 0; 1894 trace.max_entries = FTRACE_STACK_ENTRIES; 1895 trace.skip = 0; 1896 trace.entries = entry->caller; 1897 1898 save_stack_trace_user(&trace); 1899 if (!call_filter_check_discard(call, entry, buffer, event)) 1900 __buffer_unlock_commit(buffer, event); 1901 1902 out_drop_count: 1903 __this_cpu_dec(user_stack_count); 1904 out: 1905 preempt_enable(); 1906 } 1907 1908 #ifdef UNUSED 1909 static void __trace_userstack(struct trace_array *tr, unsigned long flags) 1910 { 1911 ftrace_trace_userstack(tr, flags, preempt_count()); 1912 } 1913 #endif /* UNUSED */ 1914 1915 #endif /* CONFIG_STACKTRACE */ 1916 1917 /* created for use with alloc_percpu */ 1918 struct trace_buffer_struct { 1919 char buffer[TRACE_BUF_SIZE]; 1920 }; 1921 1922 static struct trace_buffer_struct *trace_percpu_buffer; 1923 static struct trace_buffer_struct *trace_percpu_sirq_buffer; 1924 static struct trace_buffer_struct *trace_percpu_irq_buffer; 1925 static struct trace_buffer_struct *trace_percpu_nmi_buffer; 1926 1927 /* 1928 * The buffer used is dependent on the context. There is a per cpu 1929 * buffer for normal context, softirq contex, hard irq context and 1930 * for NMI context. Thise allows for lockless recording. 1931 * 1932 * Note, if the buffers failed to be allocated, then this returns NULL 1933 */ 1934 static char *get_trace_buf(void) 1935 { 1936 struct trace_buffer_struct *percpu_buffer; 1937 1938 /* 1939 * If we have allocated per cpu buffers, then we do not 1940 * need to do any locking. 1941 */ 1942 if (in_nmi()) 1943 percpu_buffer = trace_percpu_nmi_buffer; 1944 else if (in_irq()) 1945 percpu_buffer = trace_percpu_irq_buffer; 1946 else if (in_softirq()) 1947 percpu_buffer = trace_percpu_sirq_buffer; 1948 else 1949 percpu_buffer = trace_percpu_buffer; 1950 1951 if (!percpu_buffer) 1952 return NULL; 1953 1954 return this_cpu_ptr(&percpu_buffer->buffer[0]); 1955 } 1956 1957 static int alloc_percpu_trace_buffer(void) 1958 { 1959 struct trace_buffer_struct *buffers; 1960 struct trace_buffer_struct *sirq_buffers; 1961 struct trace_buffer_struct *irq_buffers; 1962 struct trace_buffer_struct *nmi_buffers; 1963 1964 buffers = alloc_percpu(struct trace_buffer_struct); 1965 if (!buffers) 1966 goto err_warn; 1967 1968 sirq_buffers = alloc_percpu(struct trace_buffer_struct); 1969 if (!sirq_buffers) 1970 goto err_sirq; 1971 1972 irq_buffers = alloc_percpu(struct trace_buffer_struct); 1973 if (!irq_buffers) 1974 goto err_irq; 1975 1976 nmi_buffers = alloc_percpu(struct trace_buffer_struct); 1977 if (!nmi_buffers) 1978 goto err_nmi; 1979 1980 trace_percpu_buffer = buffers; 1981 trace_percpu_sirq_buffer = sirq_buffers; 1982 trace_percpu_irq_buffer = irq_buffers; 1983 trace_percpu_nmi_buffer = nmi_buffers; 1984 1985 return 0; 1986 1987 err_nmi: 1988 free_percpu(irq_buffers); 1989 err_irq: 1990 free_percpu(sirq_buffers); 1991 err_sirq: 1992 free_percpu(buffers); 1993 err_warn: 1994 WARN(1, "Could not allocate percpu trace_printk buffer"); 1995 return -ENOMEM; 1996 } 1997 1998 static int buffers_allocated; 1999 2000 void trace_printk_init_buffers(void) 2001 { 2002 if (buffers_allocated) 2003 return; 2004 2005 if (alloc_percpu_trace_buffer()) 2006 return; 2007 2008 /* trace_printk() is for debug use only. Don't use it in production. */ 2009 2010 pr_warning("\n**********************************************************\n"); 2011 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 2012 pr_warning("** **\n"); 2013 pr_warning("** trace_printk() being used. Allocating extra memory. **\n"); 2014 pr_warning("** **\n"); 2015 pr_warning("** This means that this is a DEBUG kernel and it is **\n"); 2016 pr_warning("** unsafe for produciton use. **\n"); 2017 pr_warning("** **\n"); 2018 pr_warning("** If you see this message and you are not debugging **\n"); 2019 pr_warning("** the kernel, report this immediately to your vendor! **\n"); 2020 pr_warning("** **\n"); 2021 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); 2022 pr_warning("**********************************************************\n"); 2023 2024 /* Expand the buffers to set size */ 2025 tracing_update_buffers(); 2026 2027 buffers_allocated = 1; 2028 2029 /* 2030 * trace_printk_init_buffers() can be called by modules. 2031 * If that happens, then we need to start cmdline recording 2032 * directly here. If the global_trace.buffer is already 2033 * allocated here, then this was called by module code. 2034 */ 2035 if (global_trace.trace_buffer.buffer) 2036 tracing_start_cmdline_record(); 2037 } 2038 2039 void trace_printk_start_comm(void) 2040 { 2041 /* Start tracing comms if trace printk is set */ 2042 if (!buffers_allocated) 2043 return; 2044 tracing_start_cmdline_record(); 2045 } 2046 2047 static void trace_printk_start_stop_comm(int enabled) 2048 { 2049 if (!buffers_allocated) 2050 return; 2051 2052 if (enabled) 2053 tracing_start_cmdline_record(); 2054 else 2055 tracing_stop_cmdline_record(); 2056 } 2057 2058 /** 2059 * trace_vbprintk - write binary msg to tracing buffer 2060 * 2061 */ 2062 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) 2063 { 2064 struct ftrace_event_call *call = &event_bprint; 2065 struct ring_buffer_event *event; 2066 struct ring_buffer *buffer; 2067 struct trace_array *tr = &global_trace; 2068 struct bprint_entry *entry; 2069 unsigned long flags; 2070 char *tbuffer; 2071 int len = 0, size, pc; 2072 2073 if (unlikely(tracing_selftest_running || tracing_disabled)) 2074 return 0; 2075 2076 /* Don't pollute graph traces with trace_vprintk internals */ 2077 pause_graph_tracing(); 2078 2079 pc = preempt_count(); 2080 preempt_disable_notrace(); 2081 2082 tbuffer = get_trace_buf(); 2083 if (!tbuffer) { 2084 len = 0; 2085 goto out; 2086 } 2087 2088 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args); 2089 2090 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0) 2091 goto out; 2092 2093 local_save_flags(flags); 2094 size = sizeof(*entry) + sizeof(u32) * len; 2095 buffer = tr->trace_buffer.buffer; 2096 event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, 2097 flags, pc); 2098 if (!event) 2099 goto out; 2100 entry = ring_buffer_event_data(event); 2101 entry->ip = ip; 2102 entry->fmt = fmt; 2103 2104 memcpy(entry->buf, tbuffer, sizeof(u32) * len); 2105 if (!call_filter_check_discard(call, entry, buffer, event)) { 2106 __buffer_unlock_commit(buffer, event); 2107 ftrace_trace_stack(buffer, flags, 6, pc); 2108 } 2109 2110 out: 2111 preempt_enable_notrace(); 2112 unpause_graph_tracing(); 2113 2114 return len; 2115 } 2116 EXPORT_SYMBOL_GPL(trace_vbprintk); 2117 2118 static int 2119 __trace_array_vprintk(struct ring_buffer *buffer, 2120 unsigned long ip, const char *fmt, va_list args) 2121 { 2122 struct ftrace_event_call *call = &event_print; 2123 struct ring_buffer_event *event; 2124 int len = 0, size, pc; 2125 struct print_entry *entry; 2126 unsigned long flags; 2127 char *tbuffer; 2128 2129 if (tracing_disabled || tracing_selftest_running) 2130 return 0; 2131 2132 /* Don't pollute graph traces with trace_vprintk internals */ 2133 pause_graph_tracing(); 2134 2135 pc = preempt_count(); 2136 preempt_disable_notrace(); 2137 2138 2139 tbuffer = get_trace_buf(); 2140 if (!tbuffer) { 2141 len = 0; 2142 goto out; 2143 } 2144 2145 len = vsnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args); 2146 if (len > TRACE_BUF_SIZE) 2147 goto out; 2148 2149 local_save_flags(flags); 2150 size = sizeof(*entry) + len + 1; 2151 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 2152 flags, pc); 2153 if (!event) 2154 goto out; 2155 entry = ring_buffer_event_data(event); 2156 entry->ip = ip; 2157 2158 memcpy(&entry->buf, tbuffer, len); 2159 entry->buf[len] = '\0'; 2160 if (!call_filter_check_discard(call, entry, buffer, event)) { 2161 __buffer_unlock_commit(buffer, event); 2162 ftrace_trace_stack(buffer, flags, 6, pc); 2163 } 2164 out: 2165 preempt_enable_notrace(); 2166 unpause_graph_tracing(); 2167 2168 return len; 2169 } 2170 2171 int trace_array_vprintk(struct trace_array *tr, 2172 unsigned long ip, const char *fmt, va_list args) 2173 { 2174 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args); 2175 } 2176 2177 int trace_array_printk(struct trace_array *tr, 2178 unsigned long ip, const char *fmt, ...) 2179 { 2180 int ret; 2181 va_list ap; 2182 2183 if (!(trace_flags & TRACE_ITER_PRINTK)) 2184 return 0; 2185 2186 va_start(ap, fmt); 2187 ret = trace_array_vprintk(tr, ip, fmt, ap); 2188 va_end(ap); 2189 return ret; 2190 } 2191 2192 int trace_array_printk_buf(struct ring_buffer *buffer, 2193 unsigned long ip, const char *fmt, ...) 2194 { 2195 int ret; 2196 va_list ap; 2197 2198 if (!(trace_flags & TRACE_ITER_PRINTK)) 2199 return 0; 2200 2201 va_start(ap, fmt); 2202 ret = __trace_array_vprintk(buffer, ip, fmt, ap); 2203 va_end(ap); 2204 return ret; 2205 } 2206 2207 int trace_vprintk(unsigned long ip, const char *fmt, va_list args) 2208 { 2209 return trace_array_vprintk(&global_trace, ip, fmt, args); 2210 } 2211 EXPORT_SYMBOL_GPL(trace_vprintk); 2212 2213 static void trace_iterator_increment(struct trace_iterator *iter) 2214 { 2215 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu); 2216 2217 iter->idx++; 2218 if (buf_iter) 2219 ring_buffer_read(buf_iter, NULL); 2220 } 2221 2222 static struct trace_entry * 2223 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts, 2224 unsigned long *lost_events) 2225 { 2226 struct ring_buffer_event *event; 2227 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu); 2228 2229 if (buf_iter) 2230 event = ring_buffer_iter_peek(buf_iter, ts); 2231 else 2232 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts, 2233 lost_events); 2234 2235 if (event) { 2236 iter->ent_size = ring_buffer_event_length(event); 2237 return ring_buffer_event_data(event); 2238 } 2239 iter->ent_size = 0; 2240 return NULL; 2241 } 2242 2243 static struct trace_entry * 2244 __find_next_entry(struct trace_iterator *iter, int *ent_cpu, 2245 unsigned long *missing_events, u64 *ent_ts) 2246 { 2247 struct ring_buffer *buffer = iter->trace_buffer->buffer; 2248 struct trace_entry *ent, *next = NULL; 2249 unsigned long lost_events = 0, next_lost = 0; 2250 int cpu_file = iter->cpu_file; 2251 u64 next_ts = 0, ts; 2252 int next_cpu = -1; 2253 int next_size = 0; 2254 int cpu; 2255 2256 /* 2257 * If we are in a per_cpu trace file, don't bother by iterating over 2258 * all cpu and peek directly. 2259 */ 2260 if (cpu_file > RING_BUFFER_ALL_CPUS) { 2261 if (ring_buffer_empty_cpu(buffer, cpu_file)) 2262 return NULL; 2263 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events); 2264 if (ent_cpu) 2265 *ent_cpu = cpu_file; 2266 2267 return ent; 2268 } 2269 2270 for_each_tracing_cpu(cpu) { 2271 2272 if (ring_buffer_empty_cpu(buffer, cpu)) 2273 continue; 2274 2275 ent = peek_next_entry(iter, cpu, &ts, &lost_events); 2276 2277 /* 2278 * Pick the entry with the smallest timestamp: 2279 */ 2280 if (ent && (!next || ts < next_ts)) { 2281 next = ent; 2282 next_cpu = cpu; 2283 next_ts = ts; 2284 next_lost = lost_events; 2285 next_size = iter->ent_size; 2286 } 2287 } 2288 2289 iter->ent_size = next_size; 2290 2291 if (ent_cpu) 2292 *ent_cpu = next_cpu; 2293 2294 if (ent_ts) 2295 *ent_ts = next_ts; 2296 2297 if (missing_events) 2298 *missing_events = next_lost; 2299 2300 return next; 2301 } 2302 2303 /* Find the next real entry, without updating the iterator itself */ 2304 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter, 2305 int *ent_cpu, u64 *ent_ts) 2306 { 2307 return __find_next_entry(iter, ent_cpu, NULL, ent_ts); 2308 } 2309 2310 /* Find the next real entry, and increment the iterator to the next entry */ 2311 void *trace_find_next_entry_inc(struct trace_iterator *iter) 2312 { 2313 iter->ent = __find_next_entry(iter, &iter->cpu, 2314 &iter->lost_events, &iter->ts); 2315 2316 if (iter->ent) 2317 trace_iterator_increment(iter); 2318 2319 return iter->ent ? iter : NULL; 2320 } 2321 2322 static void trace_consume(struct trace_iterator *iter) 2323 { 2324 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts, 2325 &iter->lost_events); 2326 } 2327 2328 static void *s_next(struct seq_file *m, void *v, loff_t *pos) 2329 { 2330 struct trace_iterator *iter = m->private; 2331 int i = (int)*pos; 2332 void *ent; 2333 2334 WARN_ON_ONCE(iter->leftover); 2335 2336 (*pos)++; 2337 2338 /* can't go backwards */ 2339 if (iter->idx > i) 2340 return NULL; 2341 2342 if (iter->idx < 0) 2343 ent = trace_find_next_entry_inc(iter); 2344 else 2345 ent = iter; 2346 2347 while (ent && iter->idx < i) 2348 ent = trace_find_next_entry_inc(iter); 2349 2350 iter->pos = *pos; 2351 2352 return ent; 2353 } 2354 2355 void tracing_iter_reset(struct trace_iterator *iter, int cpu) 2356 { 2357 struct ring_buffer_event *event; 2358 struct ring_buffer_iter *buf_iter; 2359 unsigned long entries = 0; 2360 u64 ts; 2361 2362 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0; 2363 2364 buf_iter = trace_buffer_iter(iter, cpu); 2365 if (!buf_iter) 2366 return; 2367 2368 ring_buffer_iter_reset(buf_iter); 2369 2370 /* 2371 * We could have the case with the max latency tracers 2372 * that a reset never took place on a cpu. This is evident 2373 * by the timestamp being before the start of the buffer. 2374 */ 2375 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) { 2376 if (ts >= iter->trace_buffer->time_start) 2377 break; 2378 entries++; 2379 ring_buffer_read(buf_iter, NULL); 2380 } 2381 2382 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries; 2383 } 2384 2385 /* 2386 * The current tracer is copied to avoid a global locking 2387 * all around. 2388 */ 2389 static void *s_start(struct seq_file *m, loff_t *pos) 2390 { 2391 struct trace_iterator *iter = m->private; 2392 struct trace_array *tr = iter->tr; 2393 int cpu_file = iter->cpu_file; 2394 void *p = NULL; 2395 loff_t l = 0; 2396 int cpu; 2397 2398 /* 2399 * copy the tracer to avoid using a global lock all around. 2400 * iter->trace is a copy of current_trace, the pointer to the 2401 * name may be used instead of a strcmp(), as iter->trace->name 2402 * will point to the same string as current_trace->name. 2403 */ 2404 mutex_lock(&trace_types_lock); 2405 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name)) 2406 *iter->trace = *tr->current_trace; 2407 mutex_unlock(&trace_types_lock); 2408 2409 #ifdef CONFIG_TRACER_MAX_TRACE 2410 if (iter->snapshot && iter->trace->use_max_tr) 2411 return ERR_PTR(-EBUSY); 2412 #endif 2413 2414 if (!iter->snapshot) 2415 atomic_inc(&trace_record_cmdline_disabled); 2416 2417 if (*pos != iter->pos) { 2418 iter->ent = NULL; 2419 iter->cpu = 0; 2420 iter->idx = -1; 2421 2422 if (cpu_file == RING_BUFFER_ALL_CPUS) { 2423 for_each_tracing_cpu(cpu) 2424 tracing_iter_reset(iter, cpu); 2425 } else 2426 tracing_iter_reset(iter, cpu_file); 2427 2428 iter->leftover = 0; 2429 for (p = iter; p && l < *pos; p = s_next(m, p, &l)) 2430 ; 2431 2432 } else { 2433 /* 2434 * If we overflowed the seq_file before, then we want 2435 * to just reuse the trace_seq buffer again. 2436 */ 2437 if (iter->leftover) 2438 p = iter; 2439 else { 2440 l = *pos - 1; 2441 p = s_next(m, p, &l); 2442 } 2443 } 2444 2445 trace_event_read_lock(); 2446 trace_access_lock(cpu_file); 2447 return p; 2448 } 2449 2450 static void s_stop(struct seq_file *m, void *p) 2451 { 2452 struct trace_iterator *iter = m->private; 2453 2454 #ifdef CONFIG_TRACER_MAX_TRACE 2455 if (iter->snapshot && iter->trace->use_max_tr) 2456 return; 2457 #endif 2458 2459 if (!iter->snapshot) 2460 atomic_dec(&trace_record_cmdline_disabled); 2461 2462 trace_access_unlock(iter->cpu_file); 2463 trace_event_read_unlock(); 2464 } 2465 2466 static void 2467 get_total_entries(struct trace_buffer *buf, 2468 unsigned long *total, unsigned long *entries) 2469 { 2470 unsigned long count; 2471 int cpu; 2472 2473 *total = 0; 2474 *entries = 0; 2475 2476 for_each_tracing_cpu(cpu) { 2477 count = ring_buffer_entries_cpu(buf->buffer, cpu); 2478 /* 2479 * If this buffer has skipped entries, then we hold all 2480 * entries for the trace and we need to ignore the 2481 * ones before the time stamp. 2482 */ 2483 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) { 2484 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries; 2485 /* total is the same as the entries */ 2486 *total += count; 2487 } else 2488 *total += count + 2489 ring_buffer_overrun_cpu(buf->buffer, cpu); 2490 *entries += count; 2491 } 2492 } 2493 2494 static void print_lat_help_header(struct seq_file *m) 2495 { 2496 seq_puts(m, "# _------=> CPU# \n"); 2497 seq_puts(m, "# / _-----=> irqs-off \n"); 2498 seq_puts(m, "# | / _----=> need-resched \n"); 2499 seq_puts(m, "# || / _---=> hardirq/softirq \n"); 2500 seq_puts(m, "# ||| / _--=> preempt-depth \n"); 2501 seq_puts(m, "# |||| / delay \n"); 2502 seq_puts(m, "# cmd pid ||||| time | caller \n"); 2503 seq_puts(m, "# \\ / ||||| \\ | / \n"); 2504 } 2505 2506 static void print_event_info(struct trace_buffer *buf, struct seq_file *m) 2507 { 2508 unsigned long total; 2509 unsigned long entries; 2510 2511 get_total_entries(buf, &total, &entries); 2512 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n", 2513 entries, total, num_online_cpus()); 2514 seq_puts(m, "#\n"); 2515 } 2516 2517 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m) 2518 { 2519 print_event_info(buf, m); 2520 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n"); 2521 seq_puts(m, "# | | | | |\n"); 2522 } 2523 2524 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m) 2525 { 2526 print_event_info(buf, m); 2527 seq_puts(m, "# _-----=> irqs-off\n"); 2528 seq_puts(m, "# / _----=> need-resched\n"); 2529 seq_puts(m, "# | / _---=> hardirq/softirq\n"); 2530 seq_puts(m, "# || / _--=> preempt-depth\n"); 2531 seq_puts(m, "# ||| / delay\n"); 2532 seq_puts(m, "# TASK-PID CPU# |||| TIMESTAMP FUNCTION\n"); 2533 seq_puts(m, "# | | | |||| | |\n"); 2534 } 2535 2536 void 2537 print_trace_header(struct seq_file *m, struct trace_iterator *iter) 2538 { 2539 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); 2540 struct trace_buffer *buf = iter->trace_buffer; 2541 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu); 2542 struct tracer *type = iter->trace; 2543 unsigned long entries; 2544 unsigned long total; 2545 const char *name = "preemption"; 2546 2547 name = type->name; 2548 2549 get_total_entries(buf, &total, &entries); 2550 2551 seq_printf(m, "# %s latency trace v1.1.5 on %s\n", 2552 name, UTS_RELEASE); 2553 seq_puts(m, "# -----------------------------------" 2554 "---------------------------------\n"); 2555 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |" 2556 " (M:%s VP:%d, KP:%d, SP:%d HP:%d", 2557 nsecs_to_usecs(data->saved_latency), 2558 entries, 2559 total, 2560 buf->cpu, 2561 #if defined(CONFIG_PREEMPT_NONE) 2562 "server", 2563 #elif defined(CONFIG_PREEMPT_VOLUNTARY) 2564 "desktop", 2565 #elif defined(CONFIG_PREEMPT) 2566 "preempt", 2567 #else 2568 "unknown", 2569 #endif 2570 /* These are reserved for later use */ 2571 0, 0, 0, 0); 2572 #ifdef CONFIG_SMP 2573 seq_printf(m, " #P:%d)\n", num_online_cpus()); 2574 #else 2575 seq_puts(m, ")\n"); 2576 #endif 2577 seq_puts(m, "# -----------------\n"); 2578 seq_printf(m, "# | task: %.16s-%d " 2579 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n", 2580 data->comm, data->pid, 2581 from_kuid_munged(seq_user_ns(m), data->uid), data->nice, 2582 data->policy, data->rt_priority); 2583 seq_puts(m, "# -----------------\n"); 2584 2585 if (data->critical_start) { 2586 seq_puts(m, "# => started at: "); 2587 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags); 2588 trace_print_seq(m, &iter->seq); 2589 seq_puts(m, "\n# => ended at: "); 2590 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags); 2591 trace_print_seq(m, &iter->seq); 2592 seq_puts(m, "\n#\n"); 2593 } 2594 2595 seq_puts(m, "#\n"); 2596 } 2597 2598 static void test_cpu_buff_start(struct trace_iterator *iter) 2599 { 2600 struct trace_seq *s = &iter->seq; 2601 2602 if (!(trace_flags & TRACE_ITER_ANNOTATE)) 2603 return; 2604 2605 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE)) 2606 return; 2607 2608 if (cpumask_test_cpu(iter->cpu, iter->started)) 2609 return; 2610 2611 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries) 2612 return; 2613 2614 cpumask_set_cpu(iter->cpu, iter->started); 2615 2616 /* Don't print started cpu buffer for the first entry of the trace */ 2617 if (iter->idx > 1) 2618 trace_seq_printf(s, "##### CPU %u buffer started ####\n", 2619 iter->cpu); 2620 } 2621 2622 static enum print_line_t print_trace_fmt(struct trace_iterator *iter) 2623 { 2624 struct trace_seq *s = &iter->seq; 2625 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); 2626 struct trace_entry *entry; 2627 struct trace_event *event; 2628 2629 entry = iter->ent; 2630 2631 test_cpu_buff_start(iter); 2632 2633 event = ftrace_find_event(entry->type); 2634 2635 if (trace_flags & TRACE_ITER_CONTEXT_INFO) { 2636 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { 2637 if (!trace_print_lat_context(iter)) 2638 goto partial; 2639 } else { 2640 if (!trace_print_context(iter)) 2641 goto partial; 2642 } 2643 } 2644 2645 if (event) 2646 return event->funcs->trace(iter, sym_flags, event); 2647 2648 if (!trace_seq_printf(s, "Unknown type %d\n", entry->type)) 2649 goto partial; 2650 2651 return TRACE_TYPE_HANDLED; 2652 partial: 2653 return TRACE_TYPE_PARTIAL_LINE; 2654 } 2655 2656 static enum print_line_t print_raw_fmt(struct trace_iterator *iter) 2657 { 2658 struct trace_seq *s = &iter->seq; 2659 struct trace_entry *entry; 2660 struct trace_event *event; 2661 2662 entry = iter->ent; 2663 2664 if (trace_flags & TRACE_ITER_CONTEXT_INFO) { 2665 if (!trace_seq_printf(s, "%d %d %llu ", 2666 entry->pid, iter->cpu, iter->ts)) 2667 goto partial; 2668 } 2669 2670 event = ftrace_find_event(entry->type); 2671 if (event) 2672 return event->funcs->raw(iter, 0, event); 2673 2674 if (!trace_seq_printf(s, "%d ?\n", entry->type)) 2675 goto partial; 2676 2677 return TRACE_TYPE_HANDLED; 2678 partial: 2679 return TRACE_TYPE_PARTIAL_LINE; 2680 } 2681 2682 static enum print_line_t print_hex_fmt(struct trace_iterator *iter) 2683 { 2684 struct trace_seq *s = &iter->seq; 2685 unsigned char newline = '\n'; 2686 struct trace_entry *entry; 2687 struct trace_event *event; 2688 2689 entry = iter->ent; 2690 2691 if (trace_flags & TRACE_ITER_CONTEXT_INFO) { 2692 SEQ_PUT_HEX_FIELD_RET(s, entry->pid); 2693 SEQ_PUT_HEX_FIELD_RET(s, iter->cpu); 2694 SEQ_PUT_HEX_FIELD_RET(s, iter->ts); 2695 } 2696 2697 event = ftrace_find_event(entry->type); 2698 if (event) { 2699 enum print_line_t ret = event->funcs->hex(iter, 0, event); 2700 if (ret != TRACE_TYPE_HANDLED) 2701 return ret; 2702 } 2703 2704 SEQ_PUT_FIELD_RET(s, newline); 2705 2706 return TRACE_TYPE_HANDLED; 2707 } 2708 2709 static enum print_line_t print_bin_fmt(struct trace_iterator *iter) 2710 { 2711 struct trace_seq *s = &iter->seq; 2712 struct trace_entry *entry; 2713 struct trace_event *event; 2714 2715 entry = iter->ent; 2716 2717 if (trace_flags & TRACE_ITER_CONTEXT_INFO) { 2718 SEQ_PUT_FIELD_RET(s, entry->pid); 2719 SEQ_PUT_FIELD_RET(s, iter->cpu); 2720 SEQ_PUT_FIELD_RET(s, iter->ts); 2721 } 2722 2723 event = ftrace_find_event(entry->type); 2724 return event ? event->funcs->binary(iter, 0, event) : 2725 TRACE_TYPE_HANDLED; 2726 } 2727 2728 int trace_empty(struct trace_iterator *iter) 2729 { 2730 struct ring_buffer_iter *buf_iter; 2731 int cpu; 2732 2733 /* If we are looking at one CPU buffer, only check that one */ 2734 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 2735 cpu = iter->cpu_file; 2736 buf_iter = trace_buffer_iter(iter, cpu); 2737 if (buf_iter) { 2738 if (!ring_buffer_iter_empty(buf_iter)) 2739 return 0; 2740 } else { 2741 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu)) 2742 return 0; 2743 } 2744 return 1; 2745 } 2746 2747 for_each_tracing_cpu(cpu) { 2748 buf_iter = trace_buffer_iter(iter, cpu); 2749 if (buf_iter) { 2750 if (!ring_buffer_iter_empty(buf_iter)) 2751 return 0; 2752 } else { 2753 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu)) 2754 return 0; 2755 } 2756 } 2757 2758 return 1; 2759 } 2760 2761 /* Called with trace_event_read_lock() held. */ 2762 enum print_line_t print_trace_line(struct trace_iterator *iter) 2763 { 2764 enum print_line_t ret; 2765 2766 if (iter->lost_events && 2767 !trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n", 2768 iter->cpu, iter->lost_events)) 2769 return TRACE_TYPE_PARTIAL_LINE; 2770 2771 if (iter->trace && iter->trace->print_line) { 2772 ret = iter->trace->print_line(iter); 2773 if (ret != TRACE_TYPE_UNHANDLED) 2774 return ret; 2775 } 2776 2777 if (iter->ent->type == TRACE_BPUTS && 2778 trace_flags & TRACE_ITER_PRINTK && 2779 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2780 return trace_print_bputs_msg_only(iter); 2781 2782 if (iter->ent->type == TRACE_BPRINT && 2783 trace_flags & TRACE_ITER_PRINTK && 2784 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2785 return trace_print_bprintk_msg_only(iter); 2786 2787 if (iter->ent->type == TRACE_PRINT && 2788 trace_flags & TRACE_ITER_PRINTK && 2789 trace_flags & TRACE_ITER_PRINTK_MSGONLY) 2790 return trace_print_printk_msg_only(iter); 2791 2792 if (trace_flags & TRACE_ITER_BIN) 2793 return print_bin_fmt(iter); 2794 2795 if (trace_flags & TRACE_ITER_HEX) 2796 return print_hex_fmt(iter); 2797 2798 if (trace_flags & TRACE_ITER_RAW) 2799 return print_raw_fmt(iter); 2800 2801 return print_trace_fmt(iter); 2802 } 2803 2804 void trace_latency_header(struct seq_file *m) 2805 { 2806 struct trace_iterator *iter = m->private; 2807 2808 /* print nothing if the buffers are empty */ 2809 if (trace_empty(iter)) 2810 return; 2811 2812 if (iter->iter_flags & TRACE_FILE_LAT_FMT) 2813 print_trace_header(m, iter); 2814 2815 if (!(trace_flags & TRACE_ITER_VERBOSE)) 2816 print_lat_help_header(m); 2817 } 2818 2819 void trace_default_header(struct seq_file *m) 2820 { 2821 struct trace_iterator *iter = m->private; 2822 2823 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) 2824 return; 2825 2826 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { 2827 /* print nothing if the buffers are empty */ 2828 if (trace_empty(iter)) 2829 return; 2830 print_trace_header(m, iter); 2831 if (!(trace_flags & TRACE_ITER_VERBOSE)) 2832 print_lat_help_header(m); 2833 } else { 2834 if (!(trace_flags & TRACE_ITER_VERBOSE)) { 2835 if (trace_flags & TRACE_ITER_IRQ_INFO) 2836 print_func_help_header_irq(iter->trace_buffer, m); 2837 else 2838 print_func_help_header(iter->trace_buffer, m); 2839 } 2840 } 2841 } 2842 2843 static void test_ftrace_alive(struct seq_file *m) 2844 { 2845 if (!ftrace_is_dead()) 2846 return; 2847 seq_printf(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"); 2848 seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n"); 2849 } 2850 2851 #ifdef CONFIG_TRACER_MAX_TRACE 2852 static void show_snapshot_main_help(struct seq_file *m) 2853 { 2854 seq_printf(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"); 2855 seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"); 2856 seq_printf(m, "# Takes a snapshot of the main buffer.\n"); 2857 seq_printf(m, "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"); 2858 seq_printf(m, "# (Doesn't have to be '2' works with any number that\n"); 2859 seq_printf(m, "# is not a '0' or '1')\n"); 2860 } 2861 2862 static void show_snapshot_percpu_help(struct seq_file *m) 2863 { 2864 seq_printf(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n"); 2865 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP 2866 seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"); 2867 seq_printf(m, "# Takes a snapshot of the main buffer for this cpu.\n"); 2868 #else 2869 seq_printf(m, "# echo 1 > snapshot : Not supported with this kernel.\n"); 2870 seq_printf(m, "# Must use main snapshot file to allocate.\n"); 2871 #endif 2872 seq_printf(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"); 2873 seq_printf(m, "# (Doesn't have to be '2' works with any number that\n"); 2874 seq_printf(m, "# is not a '0' or '1')\n"); 2875 } 2876 2877 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) 2878 { 2879 if (iter->tr->allocated_snapshot) 2880 seq_printf(m, "#\n# * Snapshot is allocated *\n#\n"); 2881 else 2882 seq_printf(m, "#\n# * Snapshot is freed *\n#\n"); 2883 2884 seq_printf(m, "# Snapshot commands:\n"); 2885 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 2886 show_snapshot_main_help(m); 2887 else 2888 show_snapshot_percpu_help(m); 2889 } 2890 #else 2891 /* Should never be called */ 2892 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { } 2893 #endif 2894 2895 static int s_show(struct seq_file *m, void *v) 2896 { 2897 struct trace_iterator *iter = v; 2898 int ret; 2899 2900 if (iter->ent == NULL) { 2901 if (iter->tr) { 2902 seq_printf(m, "# tracer: %s\n", iter->trace->name); 2903 seq_puts(m, "#\n"); 2904 test_ftrace_alive(m); 2905 } 2906 if (iter->snapshot && trace_empty(iter)) 2907 print_snapshot_help(m, iter); 2908 else if (iter->trace && iter->trace->print_header) 2909 iter->trace->print_header(m); 2910 else 2911 trace_default_header(m); 2912 2913 } else if (iter->leftover) { 2914 /* 2915 * If we filled the seq_file buffer earlier, we 2916 * want to just show it now. 2917 */ 2918 ret = trace_print_seq(m, &iter->seq); 2919 2920 /* ret should this time be zero, but you never know */ 2921 iter->leftover = ret; 2922 2923 } else { 2924 print_trace_line(iter); 2925 ret = trace_print_seq(m, &iter->seq); 2926 /* 2927 * If we overflow the seq_file buffer, then it will 2928 * ask us for this data again at start up. 2929 * Use that instead. 2930 * ret is 0 if seq_file write succeeded. 2931 * -1 otherwise. 2932 */ 2933 iter->leftover = ret; 2934 } 2935 2936 return 0; 2937 } 2938 2939 /* 2940 * Should be used after trace_array_get(), trace_types_lock 2941 * ensures that i_cdev was already initialized. 2942 */ 2943 static inline int tracing_get_cpu(struct inode *inode) 2944 { 2945 if (inode->i_cdev) /* See trace_create_cpu_file() */ 2946 return (long)inode->i_cdev - 1; 2947 return RING_BUFFER_ALL_CPUS; 2948 } 2949 2950 static const struct seq_operations tracer_seq_ops = { 2951 .start = s_start, 2952 .next = s_next, 2953 .stop = s_stop, 2954 .show = s_show, 2955 }; 2956 2957 static struct trace_iterator * 2958 __tracing_open(struct inode *inode, struct file *file, bool snapshot) 2959 { 2960 struct trace_array *tr = inode->i_private; 2961 struct trace_iterator *iter; 2962 int cpu; 2963 2964 if (tracing_disabled) 2965 return ERR_PTR(-ENODEV); 2966 2967 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter)); 2968 if (!iter) 2969 return ERR_PTR(-ENOMEM); 2970 2971 iter->buffer_iter = kzalloc(sizeof(*iter->buffer_iter) * num_possible_cpus(), 2972 GFP_KERNEL); 2973 if (!iter->buffer_iter) 2974 goto release; 2975 2976 /* 2977 * We make a copy of the current tracer to avoid concurrent 2978 * changes on it while we are reading. 2979 */ 2980 mutex_lock(&trace_types_lock); 2981 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL); 2982 if (!iter->trace) 2983 goto fail; 2984 2985 *iter->trace = *tr->current_trace; 2986 2987 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL)) 2988 goto fail; 2989 2990 iter->tr = tr; 2991 2992 #ifdef CONFIG_TRACER_MAX_TRACE 2993 /* Currently only the top directory has a snapshot */ 2994 if (tr->current_trace->print_max || snapshot) 2995 iter->trace_buffer = &tr->max_buffer; 2996 else 2997 #endif 2998 iter->trace_buffer = &tr->trace_buffer; 2999 iter->snapshot = snapshot; 3000 iter->pos = -1; 3001 iter->cpu_file = tracing_get_cpu(inode); 3002 mutex_init(&iter->mutex); 3003 3004 /* Notify the tracer early; before we stop tracing. */ 3005 if (iter->trace && iter->trace->open) 3006 iter->trace->open(iter); 3007 3008 /* Annotate start of buffers if we had overruns */ 3009 if (ring_buffer_overruns(iter->trace_buffer->buffer)) 3010 iter->iter_flags |= TRACE_FILE_ANNOTATE; 3011 3012 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 3013 if (trace_clocks[tr->clock_id].in_ns) 3014 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 3015 3016 /* stop the trace while dumping if we are not opening "snapshot" */ 3017 if (!iter->snapshot) 3018 tracing_stop_tr(tr); 3019 3020 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) { 3021 for_each_tracing_cpu(cpu) { 3022 iter->buffer_iter[cpu] = 3023 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); 3024 } 3025 ring_buffer_read_prepare_sync(); 3026 for_each_tracing_cpu(cpu) { 3027 ring_buffer_read_start(iter->buffer_iter[cpu]); 3028 tracing_iter_reset(iter, cpu); 3029 } 3030 } else { 3031 cpu = iter->cpu_file; 3032 iter->buffer_iter[cpu] = 3033 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu); 3034 ring_buffer_read_prepare_sync(); 3035 ring_buffer_read_start(iter->buffer_iter[cpu]); 3036 tracing_iter_reset(iter, cpu); 3037 } 3038 3039 mutex_unlock(&trace_types_lock); 3040 3041 return iter; 3042 3043 fail: 3044 mutex_unlock(&trace_types_lock); 3045 kfree(iter->trace); 3046 kfree(iter->buffer_iter); 3047 release: 3048 seq_release_private(inode, file); 3049 return ERR_PTR(-ENOMEM); 3050 } 3051 3052 int tracing_open_generic(struct inode *inode, struct file *filp) 3053 { 3054 if (tracing_disabled) 3055 return -ENODEV; 3056 3057 filp->private_data = inode->i_private; 3058 return 0; 3059 } 3060 3061 bool tracing_is_disabled(void) 3062 { 3063 return (tracing_disabled) ? true: false; 3064 } 3065 3066 /* 3067 * Open and update trace_array ref count. 3068 * Must have the current trace_array passed to it. 3069 */ 3070 static int tracing_open_generic_tr(struct inode *inode, struct file *filp) 3071 { 3072 struct trace_array *tr = inode->i_private; 3073 3074 if (tracing_disabled) 3075 return -ENODEV; 3076 3077 if (trace_array_get(tr) < 0) 3078 return -ENODEV; 3079 3080 filp->private_data = inode->i_private; 3081 3082 return 0; 3083 } 3084 3085 static int tracing_release(struct inode *inode, struct file *file) 3086 { 3087 struct trace_array *tr = inode->i_private; 3088 struct seq_file *m = file->private_data; 3089 struct trace_iterator *iter; 3090 int cpu; 3091 3092 if (!(file->f_mode & FMODE_READ)) { 3093 trace_array_put(tr); 3094 return 0; 3095 } 3096 3097 /* Writes do not use seq_file */ 3098 iter = m->private; 3099 mutex_lock(&trace_types_lock); 3100 3101 for_each_tracing_cpu(cpu) { 3102 if (iter->buffer_iter[cpu]) 3103 ring_buffer_read_finish(iter->buffer_iter[cpu]); 3104 } 3105 3106 if (iter->trace && iter->trace->close) 3107 iter->trace->close(iter); 3108 3109 if (!iter->snapshot) 3110 /* reenable tracing if it was previously enabled */ 3111 tracing_start_tr(tr); 3112 3113 __trace_array_put(tr); 3114 3115 mutex_unlock(&trace_types_lock); 3116 3117 mutex_destroy(&iter->mutex); 3118 free_cpumask_var(iter->started); 3119 kfree(iter->trace); 3120 kfree(iter->buffer_iter); 3121 seq_release_private(inode, file); 3122 3123 return 0; 3124 } 3125 3126 static int tracing_release_generic_tr(struct inode *inode, struct file *file) 3127 { 3128 struct trace_array *tr = inode->i_private; 3129 3130 trace_array_put(tr); 3131 return 0; 3132 } 3133 3134 static int tracing_single_release_tr(struct inode *inode, struct file *file) 3135 { 3136 struct trace_array *tr = inode->i_private; 3137 3138 trace_array_put(tr); 3139 3140 return single_release(inode, file); 3141 } 3142 3143 static int tracing_open(struct inode *inode, struct file *file) 3144 { 3145 struct trace_array *tr = inode->i_private; 3146 struct trace_iterator *iter; 3147 int ret = 0; 3148 3149 if (trace_array_get(tr) < 0) 3150 return -ENODEV; 3151 3152 /* If this file was open for write, then erase contents */ 3153 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) { 3154 int cpu = tracing_get_cpu(inode); 3155 3156 if (cpu == RING_BUFFER_ALL_CPUS) 3157 tracing_reset_online_cpus(&tr->trace_buffer); 3158 else 3159 tracing_reset(&tr->trace_buffer, cpu); 3160 } 3161 3162 if (file->f_mode & FMODE_READ) { 3163 iter = __tracing_open(inode, file, false); 3164 if (IS_ERR(iter)) 3165 ret = PTR_ERR(iter); 3166 else if (trace_flags & TRACE_ITER_LATENCY_FMT) 3167 iter->iter_flags |= TRACE_FILE_LAT_FMT; 3168 } 3169 3170 if (ret < 0) 3171 trace_array_put(tr); 3172 3173 return ret; 3174 } 3175 3176 /* 3177 * Some tracers are not suitable for instance buffers. 3178 * A tracer is always available for the global array (toplevel) 3179 * or if it explicitly states that it is. 3180 */ 3181 static bool 3182 trace_ok_for_array(struct tracer *t, struct trace_array *tr) 3183 { 3184 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; 3185 } 3186 3187 /* Find the next tracer that this trace array may use */ 3188 static struct tracer * 3189 get_tracer_for_array(struct trace_array *tr, struct tracer *t) 3190 { 3191 while (t && !trace_ok_for_array(t, tr)) 3192 t = t->next; 3193 3194 return t; 3195 } 3196 3197 static void * 3198 t_next(struct seq_file *m, void *v, loff_t *pos) 3199 { 3200 struct trace_array *tr = m->private; 3201 struct tracer *t = v; 3202 3203 (*pos)++; 3204 3205 if (t) 3206 t = get_tracer_for_array(tr, t->next); 3207 3208 return t; 3209 } 3210 3211 static void *t_start(struct seq_file *m, loff_t *pos) 3212 { 3213 struct trace_array *tr = m->private; 3214 struct tracer *t; 3215 loff_t l = 0; 3216 3217 mutex_lock(&trace_types_lock); 3218 3219 t = get_tracer_for_array(tr, trace_types); 3220 for (; t && l < *pos; t = t_next(m, t, &l)) 3221 ; 3222 3223 return t; 3224 } 3225 3226 static void t_stop(struct seq_file *m, void *p) 3227 { 3228 mutex_unlock(&trace_types_lock); 3229 } 3230 3231 static int t_show(struct seq_file *m, void *v) 3232 { 3233 struct tracer *t = v; 3234 3235 if (!t) 3236 return 0; 3237 3238 seq_printf(m, "%s", t->name); 3239 if (t->next) 3240 seq_putc(m, ' '); 3241 else 3242 seq_putc(m, '\n'); 3243 3244 return 0; 3245 } 3246 3247 static const struct seq_operations show_traces_seq_ops = { 3248 .start = t_start, 3249 .next = t_next, 3250 .stop = t_stop, 3251 .show = t_show, 3252 }; 3253 3254 static int show_traces_open(struct inode *inode, struct file *file) 3255 { 3256 struct trace_array *tr = inode->i_private; 3257 struct seq_file *m; 3258 int ret; 3259 3260 if (tracing_disabled) 3261 return -ENODEV; 3262 3263 ret = seq_open(file, &show_traces_seq_ops); 3264 if (ret) 3265 return ret; 3266 3267 m = file->private_data; 3268 m->private = tr; 3269 3270 return 0; 3271 } 3272 3273 static ssize_t 3274 tracing_write_stub(struct file *filp, const char __user *ubuf, 3275 size_t count, loff_t *ppos) 3276 { 3277 return count; 3278 } 3279 3280 loff_t tracing_lseek(struct file *file, loff_t offset, int whence) 3281 { 3282 int ret; 3283 3284 if (file->f_mode & FMODE_READ) 3285 ret = seq_lseek(file, offset, whence); 3286 else 3287 file->f_pos = ret = 0; 3288 3289 return ret; 3290 } 3291 3292 static const struct file_operations tracing_fops = { 3293 .open = tracing_open, 3294 .read = seq_read, 3295 .write = tracing_write_stub, 3296 .llseek = tracing_lseek, 3297 .release = tracing_release, 3298 }; 3299 3300 static const struct file_operations show_traces_fops = { 3301 .open = show_traces_open, 3302 .read = seq_read, 3303 .release = seq_release, 3304 .llseek = seq_lseek, 3305 }; 3306 3307 /* 3308 * The tracer itself will not take this lock, but still we want 3309 * to provide a consistent cpumask to user-space: 3310 */ 3311 static DEFINE_MUTEX(tracing_cpumask_update_lock); 3312 3313 /* 3314 * Temporary storage for the character representation of the 3315 * CPU bitmask (and one more byte for the newline): 3316 */ 3317 static char mask_str[NR_CPUS + 1]; 3318 3319 static ssize_t 3320 tracing_cpumask_read(struct file *filp, char __user *ubuf, 3321 size_t count, loff_t *ppos) 3322 { 3323 struct trace_array *tr = file_inode(filp)->i_private; 3324 int len; 3325 3326 mutex_lock(&tracing_cpumask_update_lock); 3327 3328 len = cpumask_scnprintf(mask_str, count, tr->tracing_cpumask); 3329 if (count - len < 2) { 3330 count = -EINVAL; 3331 goto out_err; 3332 } 3333 len += sprintf(mask_str + len, "\n"); 3334 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1); 3335 3336 out_err: 3337 mutex_unlock(&tracing_cpumask_update_lock); 3338 3339 return count; 3340 } 3341 3342 static ssize_t 3343 tracing_cpumask_write(struct file *filp, const char __user *ubuf, 3344 size_t count, loff_t *ppos) 3345 { 3346 struct trace_array *tr = file_inode(filp)->i_private; 3347 cpumask_var_t tracing_cpumask_new; 3348 int err, cpu; 3349 3350 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL)) 3351 return -ENOMEM; 3352 3353 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new); 3354 if (err) 3355 goto err_unlock; 3356 3357 mutex_lock(&tracing_cpumask_update_lock); 3358 3359 local_irq_disable(); 3360 arch_spin_lock(&tr->max_lock); 3361 for_each_tracing_cpu(cpu) { 3362 /* 3363 * Increase/decrease the disabled counter if we are 3364 * about to flip a bit in the cpumask: 3365 */ 3366 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) && 3367 !cpumask_test_cpu(cpu, tracing_cpumask_new)) { 3368 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); 3369 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu); 3370 } 3371 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) && 3372 cpumask_test_cpu(cpu, tracing_cpumask_new)) { 3373 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled); 3374 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu); 3375 } 3376 } 3377 arch_spin_unlock(&tr->max_lock); 3378 local_irq_enable(); 3379 3380 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new); 3381 3382 mutex_unlock(&tracing_cpumask_update_lock); 3383 free_cpumask_var(tracing_cpumask_new); 3384 3385 return count; 3386 3387 err_unlock: 3388 free_cpumask_var(tracing_cpumask_new); 3389 3390 return err; 3391 } 3392 3393 static const struct file_operations tracing_cpumask_fops = { 3394 .open = tracing_open_generic_tr, 3395 .read = tracing_cpumask_read, 3396 .write = tracing_cpumask_write, 3397 .release = tracing_release_generic_tr, 3398 .llseek = generic_file_llseek, 3399 }; 3400 3401 static int tracing_trace_options_show(struct seq_file *m, void *v) 3402 { 3403 struct tracer_opt *trace_opts; 3404 struct trace_array *tr = m->private; 3405 u32 tracer_flags; 3406 int i; 3407 3408 mutex_lock(&trace_types_lock); 3409 tracer_flags = tr->current_trace->flags->val; 3410 trace_opts = tr->current_trace->flags->opts; 3411 3412 for (i = 0; trace_options[i]; i++) { 3413 if (trace_flags & (1 << i)) 3414 seq_printf(m, "%s\n", trace_options[i]); 3415 else 3416 seq_printf(m, "no%s\n", trace_options[i]); 3417 } 3418 3419 for (i = 0; trace_opts[i].name; i++) { 3420 if (tracer_flags & trace_opts[i].bit) 3421 seq_printf(m, "%s\n", trace_opts[i].name); 3422 else 3423 seq_printf(m, "no%s\n", trace_opts[i].name); 3424 } 3425 mutex_unlock(&trace_types_lock); 3426 3427 return 0; 3428 } 3429 3430 static int __set_tracer_option(struct trace_array *tr, 3431 struct tracer_flags *tracer_flags, 3432 struct tracer_opt *opts, int neg) 3433 { 3434 struct tracer *trace = tr->current_trace; 3435 int ret; 3436 3437 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); 3438 if (ret) 3439 return ret; 3440 3441 if (neg) 3442 tracer_flags->val &= ~opts->bit; 3443 else 3444 tracer_flags->val |= opts->bit; 3445 return 0; 3446 } 3447 3448 /* Try to assign a tracer specific option */ 3449 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg) 3450 { 3451 struct tracer *trace = tr->current_trace; 3452 struct tracer_flags *tracer_flags = trace->flags; 3453 struct tracer_opt *opts = NULL; 3454 int i; 3455 3456 for (i = 0; tracer_flags->opts[i].name; i++) { 3457 opts = &tracer_flags->opts[i]; 3458 3459 if (strcmp(cmp, opts->name) == 0) 3460 return __set_tracer_option(tr, trace->flags, opts, neg); 3461 } 3462 3463 return -EINVAL; 3464 } 3465 3466 /* Some tracers require overwrite to stay enabled */ 3467 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) 3468 { 3469 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set) 3470 return -1; 3471 3472 return 0; 3473 } 3474 3475 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) 3476 { 3477 /* do nothing if flag is already set */ 3478 if (!!(trace_flags & mask) == !!enabled) 3479 return 0; 3480 3481 /* Give the tracer a chance to approve the change */ 3482 if (tr->current_trace->flag_changed) 3483 if (tr->current_trace->flag_changed(tr, mask, !!enabled)) 3484 return -EINVAL; 3485 3486 if (enabled) 3487 trace_flags |= mask; 3488 else 3489 trace_flags &= ~mask; 3490 3491 if (mask == TRACE_ITER_RECORD_CMD) 3492 trace_event_enable_cmd_record(enabled); 3493 3494 if (mask == TRACE_ITER_OVERWRITE) { 3495 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled); 3496 #ifdef CONFIG_TRACER_MAX_TRACE 3497 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); 3498 #endif 3499 } 3500 3501 if (mask == TRACE_ITER_PRINTK) 3502 trace_printk_start_stop_comm(enabled); 3503 3504 return 0; 3505 } 3506 3507 static int trace_set_options(struct trace_array *tr, char *option) 3508 { 3509 char *cmp; 3510 int neg = 0; 3511 int ret = -ENODEV; 3512 int i; 3513 3514 cmp = strstrip(option); 3515 3516 if (strncmp(cmp, "no", 2) == 0) { 3517 neg = 1; 3518 cmp += 2; 3519 } 3520 3521 mutex_lock(&trace_types_lock); 3522 3523 for (i = 0; trace_options[i]; i++) { 3524 if (strcmp(cmp, trace_options[i]) == 0) { 3525 ret = set_tracer_flag(tr, 1 << i, !neg); 3526 break; 3527 } 3528 } 3529 3530 /* If no option could be set, test the specific tracer options */ 3531 if (!trace_options[i]) 3532 ret = set_tracer_option(tr, cmp, neg); 3533 3534 mutex_unlock(&trace_types_lock); 3535 3536 return ret; 3537 } 3538 3539 static ssize_t 3540 tracing_trace_options_write(struct file *filp, const char __user *ubuf, 3541 size_t cnt, loff_t *ppos) 3542 { 3543 struct seq_file *m = filp->private_data; 3544 struct trace_array *tr = m->private; 3545 char buf[64]; 3546 int ret; 3547 3548 if (cnt >= sizeof(buf)) 3549 return -EINVAL; 3550 3551 if (copy_from_user(&buf, ubuf, cnt)) 3552 return -EFAULT; 3553 3554 buf[cnt] = 0; 3555 3556 ret = trace_set_options(tr, buf); 3557 if (ret < 0) 3558 return ret; 3559 3560 *ppos += cnt; 3561 3562 return cnt; 3563 } 3564 3565 static int tracing_trace_options_open(struct inode *inode, struct file *file) 3566 { 3567 struct trace_array *tr = inode->i_private; 3568 int ret; 3569 3570 if (tracing_disabled) 3571 return -ENODEV; 3572 3573 if (trace_array_get(tr) < 0) 3574 return -ENODEV; 3575 3576 ret = single_open(file, tracing_trace_options_show, inode->i_private); 3577 if (ret < 0) 3578 trace_array_put(tr); 3579 3580 return ret; 3581 } 3582 3583 static const struct file_operations tracing_iter_fops = { 3584 .open = tracing_trace_options_open, 3585 .read = seq_read, 3586 .llseek = seq_lseek, 3587 .release = tracing_single_release_tr, 3588 .write = tracing_trace_options_write, 3589 }; 3590 3591 static const char readme_msg[] = 3592 "tracing mini-HOWTO:\n\n" 3593 "# echo 0 > tracing_on : quick way to disable tracing\n" 3594 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n" 3595 " Important files:\n" 3596 " trace\t\t\t- The static contents of the buffer\n" 3597 "\t\t\t To clear the buffer write into this file: echo > trace\n" 3598 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n" 3599 " current_tracer\t- function and latency tracers\n" 3600 " available_tracers\t- list of configured tracers for current_tracer\n" 3601 " buffer_size_kb\t- view and modify size of per cpu buffer\n" 3602 " buffer_total_size_kb - view total size of all cpu buffers\n\n" 3603 " trace_clock\t\t-change the clock used to order events\n" 3604 " local: Per cpu clock but may not be synced across CPUs\n" 3605 " global: Synced across CPUs but slows tracing down.\n" 3606 " counter: Not a clock, but just an increment\n" 3607 " uptime: Jiffy counter from time of boot\n" 3608 " perf: Same clock that perf events use\n" 3609 #ifdef CONFIG_X86_64 3610 " x86-tsc: TSC cycle counter\n" 3611 #endif 3612 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n" 3613 " tracing_cpumask\t- Limit which CPUs to trace\n" 3614 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n" 3615 "\t\t\t Remove sub-buffer with rmdir\n" 3616 " trace_options\t\t- Set format or modify how tracing happens\n" 3617 "\t\t\t Disable an option by adding a suffix 'no' to the\n" 3618 "\t\t\t option name\n" 3619 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n" 3620 #ifdef CONFIG_DYNAMIC_FTRACE 3621 "\n available_filter_functions - list of functions that can be filtered on\n" 3622 " set_ftrace_filter\t- echo function name in here to only trace these\n" 3623 "\t\t\t functions\n" 3624 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" 3625 "\t modules: Can select a group via module\n" 3626 "\t Format: :mod:<module-name>\n" 3627 "\t example: echo :mod:ext3 > set_ftrace_filter\n" 3628 "\t triggers: a command to perform when function is hit\n" 3629 "\t Format: <function>:<trigger>[:count]\n" 3630 "\t trigger: traceon, traceoff\n" 3631 "\t\t enable_event:<system>:<event>\n" 3632 "\t\t disable_event:<system>:<event>\n" 3633 #ifdef CONFIG_STACKTRACE 3634 "\t\t stacktrace\n" 3635 #endif 3636 #ifdef CONFIG_TRACER_SNAPSHOT 3637 "\t\t snapshot\n" 3638 #endif 3639 "\t\t dump\n" 3640 "\t\t cpudump\n" 3641 "\t example: echo do_fault:traceoff > set_ftrace_filter\n" 3642 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n" 3643 "\t The first one will disable tracing every time do_fault is hit\n" 3644 "\t The second will disable tracing at most 3 times when do_trap is hit\n" 3645 "\t The first time do trap is hit and it disables tracing, the\n" 3646 "\t counter will decrement to 2. If tracing is already disabled,\n" 3647 "\t the counter will not decrement. It only decrements when the\n" 3648 "\t trigger did work\n" 3649 "\t To remove trigger without count:\n" 3650 "\t echo '!<function>:<trigger> > set_ftrace_filter\n" 3651 "\t To remove trigger with a count:\n" 3652 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n" 3653 " set_ftrace_notrace\t- echo function name in here to never trace.\n" 3654 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" 3655 "\t modules: Can select a group via module command :mod:\n" 3656 "\t Does not accept triggers\n" 3657 #endif /* CONFIG_DYNAMIC_FTRACE */ 3658 #ifdef CONFIG_FUNCTION_TRACER 3659 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n" 3660 "\t\t (function)\n" 3661 #endif 3662 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3663 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n" 3664 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n" 3665 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n" 3666 #endif 3667 #ifdef CONFIG_TRACER_SNAPSHOT 3668 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n" 3669 "\t\t\t snapshot buffer. Read the contents for more\n" 3670 "\t\t\t information\n" 3671 #endif 3672 #ifdef CONFIG_STACK_TRACER 3673 " stack_trace\t\t- Shows the max stack trace when active\n" 3674 " stack_max_size\t- Shows current max stack size that was traced\n" 3675 "\t\t\t Write into this file to reset the max size (trigger a\n" 3676 "\t\t\t new trace)\n" 3677 #ifdef CONFIG_DYNAMIC_FTRACE 3678 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n" 3679 "\t\t\t traces\n" 3680 #endif 3681 #endif /* CONFIG_STACK_TRACER */ 3682 " events/\t\t- Directory containing all trace event subsystems:\n" 3683 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n" 3684 " events/<system>/\t- Directory containing all trace events for <system>:\n" 3685 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n" 3686 "\t\t\t events\n" 3687 " filter\t\t- If set, only events passing filter are traced\n" 3688 " events/<system>/<event>/\t- Directory containing control files for\n" 3689 "\t\t\t <event>:\n" 3690 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n" 3691 " filter\t\t- If set, only events passing filter are traced\n" 3692 " trigger\t\t- If set, a command to perform when event is hit\n" 3693 "\t Format: <trigger>[:count][if <filter>]\n" 3694 "\t trigger: traceon, traceoff\n" 3695 "\t enable_event:<system>:<event>\n" 3696 "\t disable_event:<system>:<event>\n" 3697 #ifdef CONFIG_STACKTRACE 3698 "\t\t stacktrace\n" 3699 #endif 3700 #ifdef CONFIG_TRACER_SNAPSHOT 3701 "\t\t snapshot\n" 3702 #endif 3703 "\t example: echo traceoff > events/block/block_unplug/trigger\n" 3704 "\t echo traceoff:3 > events/block/block_unplug/trigger\n" 3705 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n" 3706 "\t events/block/block_unplug/trigger\n" 3707 "\t The first disables tracing every time block_unplug is hit.\n" 3708 "\t The second disables tracing the first 3 times block_unplug is hit.\n" 3709 "\t The third enables the kmalloc event the first 3 times block_unplug\n" 3710 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n" 3711 "\t Like function triggers, the counter is only decremented if it\n" 3712 "\t enabled or disabled tracing.\n" 3713 "\t To remove a trigger without a count:\n" 3714 "\t echo '!<trigger> > <system>/<event>/trigger\n" 3715 "\t To remove a trigger with a count:\n" 3716 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n" 3717 "\t Filters can be ignored when removing a trigger.\n" 3718 ; 3719 3720 static ssize_t 3721 tracing_readme_read(struct file *filp, char __user *ubuf, 3722 size_t cnt, loff_t *ppos) 3723 { 3724 return simple_read_from_buffer(ubuf, cnt, ppos, 3725 readme_msg, strlen(readme_msg)); 3726 } 3727 3728 static const struct file_operations tracing_readme_fops = { 3729 .open = tracing_open_generic, 3730 .read = tracing_readme_read, 3731 .llseek = generic_file_llseek, 3732 }; 3733 3734 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos) 3735 { 3736 unsigned int *ptr = v; 3737 3738 if (*pos || m->count) 3739 ptr++; 3740 3741 (*pos)++; 3742 3743 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num]; 3744 ptr++) { 3745 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP) 3746 continue; 3747 3748 return ptr; 3749 } 3750 3751 return NULL; 3752 } 3753 3754 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos) 3755 { 3756 void *v; 3757 loff_t l = 0; 3758 3759 preempt_disable(); 3760 arch_spin_lock(&trace_cmdline_lock); 3761 3762 v = &savedcmd->map_cmdline_to_pid[0]; 3763 while (l <= *pos) { 3764 v = saved_cmdlines_next(m, v, &l); 3765 if (!v) 3766 return NULL; 3767 } 3768 3769 return v; 3770 } 3771 3772 static void saved_cmdlines_stop(struct seq_file *m, void *v) 3773 { 3774 arch_spin_unlock(&trace_cmdline_lock); 3775 preempt_enable(); 3776 } 3777 3778 static int saved_cmdlines_show(struct seq_file *m, void *v) 3779 { 3780 char buf[TASK_COMM_LEN]; 3781 unsigned int *pid = v; 3782 3783 __trace_find_cmdline(*pid, buf); 3784 seq_printf(m, "%d %s\n", *pid, buf); 3785 return 0; 3786 } 3787 3788 static const struct seq_operations tracing_saved_cmdlines_seq_ops = { 3789 .start = saved_cmdlines_start, 3790 .next = saved_cmdlines_next, 3791 .stop = saved_cmdlines_stop, 3792 .show = saved_cmdlines_show, 3793 }; 3794 3795 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp) 3796 { 3797 if (tracing_disabled) 3798 return -ENODEV; 3799 3800 return seq_open(filp, &tracing_saved_cmdlines_seq_ops); 3801 } 3802 3803 static const struct file_operations tracing_saved_cmdlines_fops = { 3804 .open = tracing_saved_cmdlines_open, 3805 .read = seq_read, 3806 .llseek = seq_lseek, 3807 .release = seq_release, 3808 }; 3809 3810 static ssize_t 3811 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf, 3812 size_t cnt, loff_t *ppos) 3813 { 3814 char buf[64]; 3815 int r; 3816 3817 arch_spin_lock(&trace_cmdline_lock); 3818 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num); 3819 arch_spin_unlock(&trace_cmdline_lock); 3820 3821 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 3822 } 3823 3824 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s) 3825 { 3826 kfree(s->saved_cmdlines); 3827 kfree(s->map_cmdline_to_pid); 3828 kfree(s); 3829 } 3830 3831 static int tracing_resize_saved_cmdlines(unsigned int val) 3832 { 3833 struct saved_cmdlines_buffer *s, *savedcmd_temp; 3834 3835 s = kmalloc(sizeof(*s), GFP_KERNEL); 3836 if (!s) 3837 return -ENOMEM; 3838 3839 if (allocate_cmdlines_buffer(val, s) < 0) { 3840 kfree(s); 3841 return -ENOMEM; 3842 } 3843 3844 arch_spin_lock(&trace_cmdline_lock); 3845 savedcmd_temp = savedcmd; 3846 savedcmd = s; 3847 arch_spin_unlock(&trace_cmdline_lock); 3848 free_saved_cmdlines_buffer(savedcmd_temp); 3849 3850 return 0; 3851 } 3852 3853 static ssize_t 3854 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf, 3855 size_t cnt, loff_t *ppos) 3856 { 3857 unsigned long val; 3858 int ret; 3859 3860 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 3861 if (ret) 3862 return ret; 3863 3864 /* must have at least 1 entry or less than PID_MAX_DEFAULT */ 3865 if (!val || val > PID_MAX_DEFAULT) 3866 return -EINVAL; 3867 3868 ret = tracing_resize_saved_cmdlines((unsigned int)val); 3869 if (ret < 0) 3870 return ret; 3871 3872 *ppos += cnt; 3873 3874 return cnt; 3875 } 3876 3877 static const struct file_operations tracing_saved_cmdlines_size_fops = { 3878 .open = tracing_open_generic, 3879 .read = tracing_saved_cmdlines_size_read, 3880 .write = tracing_saved_cmdlines_size_write, 3881 }; 3882 3883 static ssize_t 3884 tracing_set_trace_read(struct file *filp, char __user *ubuf, 3885 size_t cnt, loff_t *ppos) 3886 { 3887 struct trace_array *tr = filp->private_data; 3888 char buf[MAX_TRACER_SIZE+2]; 3889 int r; 3890 3891 mutex_lock(&trace_types_lock); 3892 r = sprintf(buf, "%s\n", tr->current_trace->name); 3893 mutex_unlock(&trace_types_lock); 3894 3895 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 3896 } 3897 3898 int tracer_init(struct tracer *t, struct trace_array *tr) 3899 { 3900 tracing_reset_online_cpus(&tr->trace_buffer); 3901 return t->init(tr); 3902 } 3903 3904 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val) 3905 { 3906 int cpu; 3907 3908 for_each_tracing_cpu(cpu) 3909 per_cpu_ptr(buf->data, cpu)->entries = val; 3910 } 3911 3912 #ifdef CONFIG_TRACER_MAX_TRACE 3913 /* resize @tr's buffer to the size of @size_tr's entries */ 3914 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf, 3915 struct trace_buffer *size_buf, int cpu_id) 3916 { 3917 int cpu, ret = 0; 3918 3919 if (cpu_id == RING_BUFFER_ALL_CPUS) { 3920 for_each_tracing_cpu(cpu) { 3921 ret = ring_buffer_resize(trace_buf->buffer, 3922 per_cpu_ptr(size_buf->data, cpu)->entries, cpu); 3923 if (ret < 0) 3924 break; 3925 per_cpu_ptr(trace_buf->data, cpu)->entries = 3926 per_cpu_ptr(size_buf->data, cpu)->entries; 3927 } 3928 } else { 3929 ret = ring_buffer_resize(trace_buf->buffer, 3930 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id); 3931 if (ret == 0) 3932 per_cpu_ptr(trace_buf->data, cpu_id)->entries = 3933 per_cpu_ptr(size_buf->data, cpu_id)->entries; 3934 } 3935 3936 return ret; 3937 } 3938 #endif /* CONFIG_TRACER_MAX_TRACE */ 3939 3940 static int __tracing_resize_ring_buffer(struct trace_array *tr, 3941 unsigned long size, int cpu) 3942 { 3943 int ret; 3944 3945 /* 3946 * If kernel or user changes the size of the ring buffer 3947 * we use the size that was given, and we can forget about 3948 * expanding it later. 3949 */ 3950 ring_buffer_expanded = true; 3951 3952 /* May be called before buffers are initialized */ 3953 if (!tr->trace_buffer.buffer) 3954 return 0; 3955 3956 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu); 3957 if (ret < 0) 3958 return ret; 3959 3960 #ifdef CONFIG_TRACER_MAX_TRACE 3961 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) || 3962 !tr->current_trace->use_max_tr) 3963 goto out; 3964 3965 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); 3966 if (ret < 0) { 3967 int r = resize_buffer_duplicate_size(&tr->trace_buffer, 3968 &tr->trace_buffer, cpu); 3969 if (r < 0) { 3970 /* 3971 * AARGH! We are left with different 3972 * size max buffer!!!! 3973 * The max buffer is our "snapshot" buffer. 3974 * When a tracer needs a snapshot (one of the 3975 * latency tracers), it swaps the max buffer 3976 * with the saved snap shot. We succeeded to 3977 * update the size of the main buffer, but failed to 3978 * update the size of the max buffer. But when we tried 3979 * to reset the main buffer to the original size, we 3980 * failed there too. This is very unlikely to 3981 * happen, but if it does, warn and kill all 3982 * tracing. 3983 */ 3984 WARN_ON(1); 3985 tracing_disabled = 1; 3986 } 3987 return ret; 3988 } 3989 3990 if (cpu == RING_BUFFER_ALL_CPUS) 3991 set_buffer_entries(&tr->max_buffer, size); 3992 else 3993 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size; 3994 3995 out: 3996 #endif /* CONFIG_TRACER_MAX_TRACE */ 3997 3998 if (cpu == RING_BUFFER_ALL_CPUS) 3999 set_buffer_entries(&tr->trace_buffer, size); 4000 else 4001 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size; 4002 4003 return ret; 4004 } 4005 4006 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr, 4007 unsigned long size, int cpu_id) 4008 { 4009 int ret = size; 4010 4011 mutex_lock(&trace_types_lock); 4012 4013 if (cpu_id != RING_BUFFER_ALL_CPUS) { 4014 /* make sure, this cpu is enabled in the mask */ 4015 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) { 4016 ret = -EINVAL; 4017 goto out; 4018 } 4019 } 4020 4021 ret = __tracing_resize_ring_buffer(tr, size, cpu_id); 4022 if (ret < 0) 4023 ret = -ENOMEM; 4024 4025 out: 4026 mutex_unlock(&trace_types_lock); 4027 4028 return ret; 4029 } 4030 4031 4032 /** 4033 * tracing_update_buffers - used by tracing facility to expand ring buffers 4034 * 4035 * To save on memory when the tracing is never used on a system with it 4036 * configured in. The ring buffers are set to a minimum size. But once 4037 * a user starts to use the tracing facility, then they need to grow 4038 * to their default size. 4039 * 4040 * This function is to be called when a tracer is about to be used. 4041 */ 4042 int tracing_update_buffers(void) 4043 { 4044 int ret = 0; 4045 4046 mutex_lock(&trace_types_lock); 4047 if (!ring_buffer_expanded) 4048 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size, 4049 RING_BUFFER_ALL_CPUS); 4050 mutex_unlock(&trace_types_lock); 4051 4052 return ret; 4053 } 4054 4055 struct trace_option_dentry; 4056 4057 static struct trace_option_dentry * 4058 create_trace_option_files(struct trace_array *tr, struct tracer *tracer); 4059 4060 static void 4061 destroy_trace_option_files(struct trace_option_dentry *topts); 4062 4063 /* 4064 * Used to clear out the tracer before deletion of an instance. 4065 * Must have trace_types_lock held. 4066 */ 4067 static void tracing_set_nop(struct trace_array *tr) 4068 { 4069 if (tr->current_trace == &nop_trace) 4070 return; 4071 4072 tr->current_trace->enabled--; 4073 4074 if (tr->current_trace->reset) 4075 tr->current_trace->reset(tr); 4076 4077 tr->current_trace = &nop_trace; 4078 } 4079 4080 static int tracing_set_tracer(struct trace_array *tr, const char *buf) 4081 { 4082 static struct trace_option_dentry *topts; 4083 struct tracer *t; 4084 #ifdef CONFIG_TRACER_MAX_TRACE 4085 bool had_max_tr; 4086 #endif 4087 int ret = 0; 4088 4089 mutex_lock(&trace_types_lock); 4090 4091 if (!ring_buffer_expanded) { 4092 ret = __tracing_resize_ring_buffer(tr, trace_buf_size, 4093 RING_BUFFER_ALL_CPUS); 4094 if (ret < 0) 4095 goto out; 4096 ret = 0; 4097 } 4098 4099 for (t = trace_types; t; t = t->next) { 4100 if (strcmp(t->name, buf) == 0) 4101 break; 4102 } 4103 if (!t) { 4104 ret = -EINVAL; 4105 goto out; 4106 } 4107 if (t == tr->current_trace) 4108 goto out; 4109 4110 /* Some tracers are only allowed for the top level buffer */ 4111 if (!trace_ok_for_array(t, tr)) { 4112 ret = -EINVAL; 4113 goto out; 4114 } 4115 4116 trace_branch_disable(); 4117 4118 tr->current_trace->enabled--; 4119 4120 if (tr->current_trace->reset) 4121 tr->current_trace->reset(tr); 4122 4123 /* Current trace needs to be nop_trace before synchronize_sched */ 4124 tr->current_trace = &nop_trace; 4125 4126 #ifdef CONFIG_TRACER_MAX_TRACE 4127 had_max_tr = tr->allocated_snapshot; 4128 4129 if (had_max_tr && !t->use_max_tr) { 4130 /* 4131 * We need to make sure that the update_max_tr sees that 4132 * current_trace changed to nop_trace to keep it from 4133 * swapping the buffers after we resize it. 4134 * The update_max_tr is called from interrupts disabled 4135 * so a synchronized_sched() is sufficient. 4136 */ 4137 synchronize_sched(); 4138 free_snapshot(tr); 4139 } 4140 #endif 4141 /* Currently, only the top instance has options */ 4142 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) { 4143 destroy_trace_option_files(topts); 4144 topts = create_trace_option_files(tr, t); 4145 } 4146 4147 #ifdef CONFIG_TRACER_MAX_TRACE 4148 if (t->use_max_tr && !had_max_tr) { 4149 ret = alloc_snapshot(tr); 4150 if (ret < 0) 4151 goto out; 4152 } 4153 #endif 4154 4155 if (t->init) { 4156 ret = tracer_init(t, tr); 4157 if (ret) 4158 goto out; 4159 } 4160 4161 tr->current_trace = t; 4162 tr->current_trace->enabled++; 4163 trace_branch_enable(tr); 4164 out: 4165 mutex_unlock(&trace_types_lock); 4166 4167 return ret; 4168 } 4169 4170 static ssize_t 4171 tracing_set_trace_write(struct file *filp, const char __user *ubuf, 4172 size_t cnt, loff_t *ppos) 4173 { 4174 struct trace_array *tr = filp->private_data; 4175 char buf[MAX_TRACER_SIZE+1]; 4176 int i; 4177 size_t ret; 4178 int err; 4179 4180 ret = cnt; 4181 4182 if (cnt > MAX_TRACER_SIZE) 4183 cnt = MAX_TRACER_SIZE; 4184 4185 if (copy_from_user(&buf, ubuf, cnt)) 4186 return -EFAULT; 4187 4188 buf[cnt] = 0; 4189 4190 /* strip ending whitespace. */ 4191 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--) 4192 buf[i] = 0; 4193 4194 err = tracing_set_tracer(tr, buf); 4195 if (err) 4196 return err; 4197 4198 *ppos += ret; 4199 4200 return ret; 4201 } 4202 4203 static ssize_t 4204 tracing_max_lat_read(struct file *filp, char __user *ubuf, 4205 size_t cnt, loff_t *ppos) 4206 { 4207 unsigned long *ptr = filp->private_data; 4208 char buf[64]; 4209 int r; 4210 4211 r = snprintf(buf, sizeof(buf), "%ld\n", 4212 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr)); 4213 if (r > sizeof(buf)) 4214 r = sizeof(buf); 4215 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 4216 } 4217 4218 static ssize_t 4219 tracing_max_lat_write(struct file *filp, const char __user *ubuf, 4220 size_t cnt, loff_t *ppos) 4221 { 4222 unsigned long *ptr = filp->private_data; 4223 unsigned long val; 4224 int ret; 4225 4226 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 4227 if (ret) 4228 return ret; 4229 4230 *ptr = val * 1000; 4231 4232 return cnt; 4233 } 4234 4235 static int tracing_open_pipe(struct inode *inode, struct file *filp) 4236 { 4237 struct trace_array *tr = inode->i_private; 4238 struct trace_iterator *iter; 4239 int ret = 0; 4240 4241 if (tracing_disabled) 4242 return -ENODEV; 4243 4244 if (trace_array_get(tr) < 0) 4245 return -ENODEV; 4246 4247 mutex_lock(&trace_types_lock); 4248 4249 /* create a buffer to store the information to pass to userspace */ 4250 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 4251 if (!iter) { 4252 ret = -ENOMEM; 4253 __trace_array_put(tr); 4254 goto out; 4255 } 4256 4257 /* 4258 * We make a copy of the current tracer to avoid concurrent 4259 * changes on it while we are reading. 4260 */ 4261 iter->trace = kmalloc(sizeof(*iter->trace), GFP_KERNEL); 4262 if (!iter->trace) { 4263 ret = -ENOMEM; 4264 goto fail; 4265 } 4266 *iter->trace = *tr->current_trace; 4267 4268 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) { 4269 ret = -ENOMEM; 4270 goto fail; 4271 } 4272 4273 /* trace pipe does not show start of buffer */ 4274 cpumask_setall(iter->started); 4275 4276 if (trace_flags & TRACE_ITER_LATENCY_FMT) 4277 iter->iter_flags |= TRACE_FILE_LAT_FMT; 4278 4279 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 4280 if (trace_clocks[tr->clock_id].in_ns) 4281 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 4282 4283 iter->tr = tr; 4284 iter->trace_buffer = &tr->trace_buffer; 4285 iter->cpu_file = tracing_get_cpu(inode); 4286 mutex_init(&iter->mutex); 4287 filp->private_data = iter; 4288 4289 if (iter->trace->pipe_open) 4290 iter->trace->pipe_open(iter); 4291 4292 nonseekable_open(inode, filp); 4293 out: 4294 mutex_unlock(&trace_types_lock); 4295 return ret; 4296 4297 fail: 4298 kfree(iter->trace); 4299 kfree(iter); 4300 __trace_array_put(tr); 4301 mutex_unlock(&trace_types_lock); 4302 return ret; 4303 } 4304 4305 static int tracing_release_pipe(struct inode *inode, struct file *file) 4306 { 4307 struct trace_iterator *iter = file->private_data; 4308 struct trace_array *tr = inode->i_private; 4309 4310 mutex_lock(&trace_types_lock); 4311 4312 if (iter->trace->pipe_close) 4313 iter->trace->pipe_close(iter); 4314 4315 mutex_unlock(&trace_types_lock); 4316 4317 free_cpumask_var(iter->started); 4318 mutex_destroy(&iter->mutex); 4319 kfree(iter->trace); 4320 kfree(iter); 4321 4322 trace_array_put(tr); 4323 4324 return 0; 4325 } 4326 4327 static unsigned int 4328 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table) 4329 { 4330 /* Iterators are static, they should be filled or empty */ 4331 if (trace_buffer_iter(iter, iter->cpu_file)) 4332 return POLLIN | POLLRDNORM; 4333 4334 if (trace_flags & TRACE_ITER_BLOCK) 4335 /* 4336 * Always select as readable when in blocking mode 4337 */ 4338 return POLLIN | POLLRDNORM; 4339 else 4340 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file, 4341 filp, poll_table); 4342 } 4343 4344 static unsigned int 4345 tracing_poll_pipe(struct file *filp, poll_table *poll_table) 4346 { 4347 struct trace_iterator *iter = filp->private_data; 4348 4349 return trace_poll(iter, filp, poll_table); 4350 } 4351 4352 /* Must be called with trace_types_lock mutex held. */ 4353 static int tracing_wait_pipe(struct file *filp) 4354 { 4355 struct trace_iterator *iter = filp->private_data; 4356 int ret; 4357 4358 while (trace_empty(iter)) { 4359 4360 if ((filp->f_flags & O_NONBLOCK)) { 4361 return -EAGAIN; 4362 } 4363 4364 /* 4365 * We block until we read something and tracing is disabled. 4366 * We still block if tracing is disabled, but we have never 4367 * read anything. This allows a user to cat this file, and 4368 * then enable tracing. But after we have read something, 4369 * we give an EOF when tracing is again disabled. 4370 * 4371 * iter->pos will be 0 if we haven't read anything. 4372 */ 4373 if (!tracing_is_on() && iter->pos) 4374 break; 4375 4376 mutex_unlock(&iter->mutex); 4377 4378 ret = wait_on_pipe(iter); 4379 4380 mutex_lock(&iter->mutex); 4381 4382 if (ret) 4383 return ret; 4384 4385 if (signal_pending(current)) 4386 return -EINTR; 4387 } 4388 4389 return 1; 4390 } 4391 4392 /* 4393 * Consumer reader. 4394 */ 4395 static ssize_t 4396 tracing_read_pipe(struct file *filp, char __user *ubuf, 4397 size_t cnt, loff_t *ppos) 4398 { 4399 struct trace_iterator *iter = filp->private_data; 4400 struct trace_array *tr = iter->tr; 4401 ssize_t sret; 4402 4403 /* return any leftover data */ 4404 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 4405 if (sret != -EBUSY) 4406 return sret; 4407 4408 trace_seq_init(&iter->seq); 4409 4410 /* copy the tracer to avoid using a global lock all around */ 4411 mutex_lock(&trace_types_lock); 4412 if (unlikely(iter->trace->name != tr->current_trace->name)) 4413 *iter->trace = *tr->current_trace; 4414 mutex_unlock(&trace_types_lock); 4415 4416 /* 4417 * Avoid more than one consumer on a single file descriptor 4418 * This is just a matter of traces coherency, the ring buffer itself 4419 * is protected. 4420 */ 4421 mutex_lock(&iter->mutex); 4422 if (iter->trace->read) { 4423 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos); 4424 if (sret) 4425 goto out; 4426 } 4427 4428 waitagain: 4429 sret = tracing_wait_pipe(filp); 4430 if (sret <= 0) 4431 goto out; 4432 4433 /* stop when tracing is finished */ 4434 if (trace_empty(iter)) { 4435 sret = 0; 4436 goto out; 4437 } 4438 4439 if (cnt >= PAGE_SIZE) 4440 cnt = PAGE_SIZE - 1; 4441 4442 /* reset all but tr, trace, and overruns */ 4443 memset(&iter->seq, 0, 4444 sizeof(struct trace_iterator) - 4445 offsetof(struct trace_iterator, seq)); 4446 cpumask_clear(iter->started); 4447 iter->pos = -1; 4448 4449 trace_event_read_lock(); 4450 trace_access_lock(iter->cpu_file); 4451 while (trace_find_next_entry_inc(iter) != NULL) { 4452 enum print_line_t ret; 4453 int len = iter->seq.len; 4454 4455 ret = print_trace_line(iter); 4456 if (ret == TRACE_TYPE_PARTIAL_LINE) { 4457 /* don't print partial lines */ 4458 iter->seq.len = len; 4459 break; 4460 } 4461 if (ret != TRACE_TYPE_NO_CONSUME) 4462 trace_consume(iter); 4463 4464 if (iter->seq.len >= cnt) 4465 break; 4466 4467 /* 4468 * Setting the full flag means we reached the trace_seq buffer 4469 * size and we should leave by partial output condition above. 4470 * One of the trace_seq_* functions is not used properly. 4471 */ 4472 WARN_ONCE(iter->seq.full, "full flag set for trace type %d", 4473 iter->ent->type); 4474 } 4475 trace_access_unlock(iter->cpu_file); 4476 trace_event_read_unlock(); 4477 4478 /* Now copy what we have to the user */ 4479 sret = trace_seq_to_user(&iter->seq, ubuf, cnt); 4480 if (iter->seq.readpos >= iter->seq.len) 4481 trace_seq_init(&iter->seq); 4482 4483 /* 4484 * If there was nothing to send to user, in spite of consuming trace 4485 * entries, go back to wait for more entries. 4486 */ 4487 if (sret == -EBUSY) 4488 goto waitagain; 4489 4490 out: 4491 mutex_unlock(&iter->mutex); 4492 4493 return sret; 4494 } 4495 4496 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd, 4497 unsigned int idx) 4498 { 4499 __free_page(spd->pages[idx]); 4500 } 4501 4502 static const struct pipe_buf_operations tracing_pipe_buf_ops = { 4503 .can_merge = 0, 4504 .confirm = generic_pipe_buf_confirm, 4505 .release = generic_pipe_buf_release, 4506 .steal = generic_pipe_buf_steal, 4507 .get = generic_pipe_buf_get, 4508 }; 4509 4510 static size_t 4511 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter) 4512 { 4513 size_t count; 4514 int ret; 4515 4516 /* Seq buffer is page-sized, exactly what we need. */ 4517 for (;;) { 4518 count = iter->seq.len; 4519 ret = print_trace_line(iter); 4520 count = iter->seq.len - count; 4521 if (rem < count) { 4522 rem = 0; 4523 iter->seq.len -= count; 4524 break; 4525 } 4526 if (ret == TRACE_TYPE_PARTIAL_LINE) { 4527 iter->seq.len -= count; 4528 break; 4529 } 4530 4531 if (ret != TRACE_TYPE_NO_CONSUME) 4532 trace_consume(iter); 4533 rem -= count; 4534 if (!trace_find_next_entry_inc(iter)) { 4535 rem = 0; 4536 iter->ent = NULL; 4537 break; 4538 } 4539 } 4540 4541 return rem; 4542 } 4543 4544 static ssize_t tracing_splice_read_pipe(struct file *filp, 4545 loff_t *ppos, 4546 struct pipe_inode_info *pipe, 4547 size_t len, 4548 unsigned int flags) 4549 { 4550 struct page *pages_def[PIPE_DEF_BUFFERS]; 4551 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 4552 struct trace_iterator *iter = filp->private_data; 4553 struct splice_pipe_desc spd = { 4554 .pages = pages_def, 4555 .partial = partial_def, 4556 .nr_pages = 0, /* This gets updated below. */ 4557 .nr_pages_max = PIPE_DEF_BUFFERS, 4558 .flags = flags, 4559 .ops = &tracing_pipe_buf_ops, 4560 .spd_release = tracing_spd_release_pipe, 4561 }; 4562 struct trace_array *tr = iter->tr; 4563 ssize_t ret; 4564 size_t rem; 4565 unsigned int i; 4566 4567 if (splice_grow_spd(pipe, &spd)) 4568 return -ENOMEM; 4569 4570 /* copy the tracer to avoid using a global lock all around */ 4571 mutex_lock(&trace_types_lock); 4572 if (unlikely(iter->trace->name != tr->current_trace->name)) 4573 *iter->trace = *tr->current_trace; 4574 mutex_unlock(&trace_types_lock); 4575 4576 mutex_lock(&iter->mutex); 4577 4578 if (iter->trace->splice_read) { 4579 ret = iter->trace->splice_read(iter, filp, 4580 ppos, pipe, len, flags); 4581 if (ret) 4582 goto out_err; 4583 } 4584 4585 ret = tracing_wait_pipe(filp); 4586 if (ret <= 0) 4587 goto out_err; 4588 4589 if (!iter->ent && !trace_find_next_entry_inc(iter)) { 4590 ret = -EFAULT; 4591 goto out_err; 4592 } 4593 4594 trace_event_read_lock(); 4595 trace_access_lock(iter->cpu_file); 4596 4597 /* Fill as many pages as possible. */ 4598 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) { 4599 spd.pages[i] = alloc_page(GFP_KERNEL); 4600 if (!spd.pages[i]) 4601 break; 4602 4603 rem = tracing_fill_pipe_page(rem, iter); 4604 4605 /* Copy the data into the page, so we can start over. */ 4606 ret = trace_seq_to_buffer(&iter->seq, 4607 page_address(spd.pages[i]), 4608 iter->seq.len); 4609 if (ret < 0) { 4610 __free_page(spd.pages[i]); 4611 break; 4612 } 4613 spd.partial[i].offset = 0; 4614 spd.partial[i].len = iter->seq.len; 4615 4616 trace_seq_init(&iter->seq); 4617 } 4618 4619 trace_access_unlock(iter->cpu_file); 4620 trace_event_read_unlock(); 4621 mutex_unlock(&iter->mutex); 4622 4623 spd.nr_pages = i; 4624 4625 ret = splice_to_pipe(pipe, &spd); 4626 out: 4627 splice_shrink_spd(&spd); 4628 return ret; 4629 4630 out_err: 4631 mutex_unlock(&iter->mutex); 4632 goto out; 4633 } 4634 4635 static ssize_t 4636 tracing_entries_read(struct file *filp, char __user *ubuf, 4637 size_t cnt, loff_t *ppos) 4638 { 4639 struct inode *inode = file_inode(filp); 4640 struct trace_array *tr = inode->i_private; 4641 int cpu = tracing_get_cpu(inode); 4642 char buf[64]; 4643 int r = 0; 4644 ssize_t ret; 4645 4646 mutex_lock(&trace_types_lock); 4647 4648 if (cpu == RING_BUFFER_ALL_CPUS) { 4649 int cpu, buf_size_same; 4650 unsigned long size; 4651 4652 size = 0; 4653 buf_size_same = 1; 4654 /* check if all cpu sizes are same */ 4655 for_each_tracing_cpu(cpu) { 4656 /* fill in the size from first enabled cpu */ 4657 if (size == 0) 4658 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries; 4659 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) { 4660 buf_size_same = 0; 4661 break; 4662 } 4663 } 4664 4665 if (buf_size_same) { 4666 if (!ring_buffer_expanded) 4667 r = sprintf(buf, "%lu (expanded: %lu)\n", 4668 size >> 10, 4669 trace_buf_size >> 10); 4670 else 4671 r = sprintf(buf, "%lu\n", size >> 10); 4672 } else 4673 r = sprintf(buf, "X\n"); 4674 } else 4675 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10); 4676 4677 mutex_unlock(&trace_types_lock); 4678 4679 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 4680 return ret; 4681 } 4682 4683 static ssize_t 4684 tracing_entries_write(struct file *filp, const char __user *ubuf, 4685 size_t cnt, loff_t *ppos) 4686 { 4687 struct inode *inode = file_inode(filp); 4688 struct trace_array *tr = inode->i_private; 4689 unsigned long val; 4690 int ret; 4691 4692 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 4693 if (ret) 4694 return ret; 4695 4696 /* must have at least 1 entry */ 4697 if (!val) 4698 return -EINVAL; 4699 4700 /* value is in KB */ 4701 val <<= 10; 4702 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode)); 4703 if (ret < 0) 4704 return ret; 4705 4706 *ppos += cnt; 4707 4708 return cnt; 4709 } 4710 4711 static ssize_t 4712 tracing_total_entries_read(struct file *filp, char __user *ubuf, 4713 size_t cnt, loff_t *ppos) 4714 { 4715 struct trace_array *tr = filp->private_data; 4716 char buf[64]; 4717 int r, cpu; 4718 unsigned long size = 0, expanded_size = 0; 4719 4720 mutex_lock(&trace_types_lock); 4721 for_each_tracing_cpu(cpu) { 4722 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10; 4723 if (!ring_buffer_expanded) 4724 expanded_size += trace_buf_size >> 10; 4725 } 4726 if (ring_buffer_expanded) 4727 r = sprintf(buf, "%lu\n", size); 4728 else 4729 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size); 4730 mutex_unlock(&trace_types_lock); 4731 4732 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 4733 } 4734 4735 static ssize_t 4736 tracing_free_buffer_write(struct file *filp, const char __user *ubuf, 4737 size_t cnt, loff_t *ppos) 4738 { 4739 /* 4740 * There is no need to read what the user has written, this function 4741 * is just to make sure that there is no error when "echo" is used 4742 */ 4743 4744 *ppos += cnt; 4745 4746 return cnt; 4747 } 4748 4749 static int 4750 tracing_free_buffer_release(struct inode *inode, struct file *filp) 4751 { 4752 struct trace_array *tr = inode->i_private; 4753 4754 /* disable tracing ? */ 4755 if (trace_flags & TRACE_ITER_STOP_ON_FREE) 4756 tracer_tracing_off(tr); 4757 /* resize the ring buffer to 0 */ 4758 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); 4759 4760 trace_array_put(tr); 4761 4762 return 0; 4763 } 4764 4765 static ssize_t 4766 tracing_mark_write(struct file *filp, const char __user *ubuf, 4767 size_t cnt, loff_t *fpos) 4768 { 4769 unsigned long addr = (unsigned long)ubuf; 4770 struct trace_array *tr = filp->private_data; 4771 struct ring_buffer_event *event; 4772 struct ring_buffer *buffer; 4773 struct print_entry *entry; 4774 unsigned long irq_flags; 4775 struct page *pages[2]; 4776 void *map_page[2]; 4777 int nr_pages = 1; 4778 ssize_t written; 4779 int offset; 4780 int size; 4781 int len; 4782 int ret; 4783 int i; 4784 4785 if (tracing_disabled) 4786 return -EINVAL; 4787 4788 if (!(trace_flags & TRACE_ITER_MARKERS)) 4789 return -EINVAL; 4790 4791 if (cnt > TRACE_BUF_SIZE) 4792 cnt = TRACE_BUF_SIZE; 4793 4794 /* 4795 * Userspace is injecting traces into the kernel trace buffer. 4796 * We want to be as non intrusive as possible. 4797 * To do so, we do not want to allocate any special buffers 4798 * or take any locks, but instead write the userspace data 4799 * straight into the ring buffer. 4800 * 4801 * First we need to pin the userspace buffer into memory, 4802 * which, most likely it is, because it just referenced it. 4803 * But there's no guarantee that it is. By using get_user_pages_fast() 4804 * and kmap_atomic/kunmap_atomic() we can get access to the 4805 * pages directly. We then write the data directly into the 4806 * ring buffer. 4807 */ 4808 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE); 4809 4810 /* check if we cross pages */ 4811 if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK)) 4812 nr_pages = 2; 4813 4814 offset = addr & (PAGE_SIZE - 1); 4815 addr &= PAGE_MASK; 4816 4817 ret = get_user_pages_fast(addr, nr_pages, 0, pages); 4818 if (ret < nr_pages) { 4819 while (--ret >= 0) 4820 put_page(pages[ret]); 4821 written = -EFAULT; 4822 goto out; 4823 } 4824 4825 for (i = 0; i < nr_pages; i++) 4826 map_page[i] = kmap_atomic(pages[i]); 4827 4828 local_save_flags(irq_flags); 4829 size = sizeof(*entry) + cnt + 2; /* possible \n added */ 4830 buffer = tr->trace_buffer.buffer; 4831 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, 4832 irq_flags, preempt_count()); 4833 if (!event) { 4834 /* Ring buffer disabled, return as if not open for write */ 4835 written = -EBADF; 4836 goto out_unlock; 4837 } 4838 4839 entry = ring_buffer_event_data(event); 4840 entry->ip = _THIS_IP_; 4841 4842 if (nr_pages == 2) { 4843 len = PAGE_SIZE - offset; 4844 memcpy(&entry->buf, map_page[0] + offset, len); 4845 memcpy(&entry->buf[len], map_page[1], cnt - len); 4846 } else 4847 memcpy(&entry->buf, map_page[0] + offset, cnt); 4848 4849 if (entry->buf[cnt - 1] != '\n') { 4850 entry->buf[cnt] = '\n'; 4851 entry->buf[cnt + 1] = '\0'; 4852 } else 4853 entry->buf[cnt] = '\0'; 4854 4855 __buffer_unlock_commit(buffer, event); 4856 4857 written = cnt; 4858 4859 *fpos += written; 4860 4861 out_unlock: 4862 for (i = 0; i < nr_pages; i++){ 4863 kunmap_atomic(map_page[i]); 4864 put_page(pages[i]); 4865 } 4866 out: 4867 return written; 4868 } 4869 4870 static int tracing_clock_show(struct seq_file *m, void *v) 4871 { 4872 struct trace_array *tr = m->private; 4873 int i; 4874 4875 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) 4876 seq_printf(m, 4877 "%s%s%s%s", i ? " " : "", 4878 i == tr->clock_id ? "[" : "", trace_clocks[i].name, 4879 i == tr->clock_id ? "]" : ""); 4880 seq_putc(m, '\n'); 4881 4882 return 0; 4883 } 4884 4885 static int tracing_set_clock(struct trace_array *tr, const char *clockstr) 4886 { 4887 int i; 4888 4889 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) { 4890 if (strcmp(trace_clocks[i].name, clockstr) == 0) 4891 break; 4892 } 4893 if (i == ARRAY_SIZE(trace_clocks)) 4894 return -EINVAL; 4895 4896 mutex_lock(&trace_types_lock); 4897 4898 tr->clock_id = i; 4899 4900 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func); 4901 4902 /* 4903 * New clock may not be consistent with the previous clock. 4904 * Reset the buffer so that it doesn't have incomparable timestamps. 4905 */ 4906 tracing_reset_online_cpus(&tr->trace_buffer); 4907 4908 #ifdef CONFIG_TRACER_MAX_TRACE 4909 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer) 4910 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func); 4911 tracing_reset_online_cpus(&tr->max_buffer); 4912 #endif 4913 4914 mutex_unlock(&trace_types_lock); 4915 4916 return 0; 4917 } 4918 4919 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf, 4920 size_t cnt, loff_t *fpos) 4921 { 4922 struct seq_file *m = filp->private_data; 4923 struct trace_array *tr = m->private; 4924 char buf[64]; 4925 const char *clockstr; 4926 int ret; 4927 4928 if (cnt >= sizeof(buf)) 4929 return -EINVAL; 4930 4931 if (copy_from_user(&buf, ubuf, cnt)) 4932 return -EFAULT; 4933 4934 buf[cnt] = 0; 4935 4936 clockstr = strstrip(buf); 4937 4938 ret = tracing_set_clock(tr, clockstr); 4939 if (ret) 4940 return ret; 4941 4942 *fpos += cnt; 4943 4944 return cnt; 4945 } 4946 4947 static int tracing_clock_open(struct inode *inode, struct file *file) 4948 { 4949 struct trace_array *tr = inode->i_private; 4950 int ret; 4951 4952 if (tracing_disabled) 4953 return -ENODEV; 4954 4955 if (trace_array_get(tr)) 4956 return -ENODEV; 4957 4958 ret = single_open(file, tracing_clock_show, inode->i_private); 4959 if (ret < 0) 4960 trace_array_put(tr); 4961 4962 return ret; 4963 } 4964 4965 struct ftrace_buffer_info { 4966 struct trace_iterator iter; 4967 void *spare; 4968 unsigned int read; 4969 }; 4970 4971 #ifdef CONFIG_TRACER_SNAPSHOT 4972 static int tracing_snapshot_open(struct inode *inode, struct file *file) 4973 { 4974 struct trace_array *tr = inode->i_private; 4975 struct trace_iterator *iter; 4976 struct seq_file *m; 4977 int ret = 0; 4978 4979 if (trace_array_get(tr) < 0) 4980 return -ENODEV; 4981 4982 if (file->f_mode & FMODE_READ) { 4983 iter = __tracing_open(inode, file, true); 4984 if (IS_ERR(iter)) 4985 ret = PTR_ERR(iter); 4986 } else { 4987 /* Writes still need the seq_file to hold the private data */ 4988 ret = -ENOMEM; 4989 m = kzalloc(sizeof(*m), GFP_KERNEL); 4990 if (!m) 4991 goto out; 4992 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 4993 if (!iter) { 4994 kfree(m); 4995 goto out; 4996 } 4997 ret = 0; 4998 4999 iter->tr = tr; 5000 iter->trace_buffer = &tr->max_buffer; 5001 iter->cpu_file = tracing_get_cpu(inode); 5002 m->private = iter; 5003 file->private_data = m; 5004 } 5005 out: 5006 if (ret < 0) 5007 trace_array_put(tr); 5008 5009 return ret; 5010 } 5011 5012 static ssize_t 5013 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt, 5014 loff_t *ppos) 5015 { 5016 struct seq_file *m = filp->private_data; 5017 struct trace_iterator *iter = m->private; 5018 struct trace_array *tr = iter->tr; 5019 unsigned long val; 5020 int ret; 5021 5022 ret = tracing_update_buffers(); 5023 if (ret < 0) 5024 return ret; 5025 5026 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 5027 if (ret) 5028 return ret; 5029 5030 mutex_lock(&trace_types_lock); 5031 5032 if (tr->current_trace->use_max_tr) { 5033 ret = -EBUSY; 5034 goto out; 5035 } 5036 5037 switch (val) { 5038 case 0: 5039 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 5040 ret = -EINVAL; 5041 break; 5042 } 5043 if (tr->allocated_snapshot) 5044 free_snapshot(tr); 5045 break; 5046 case 1: 5047 /* Only allow per-cpu swap if the ring buffer supports it */ 5048 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP 5049 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) { 5050 ret = -EINVAL; 5051 break; 5052 } 5053 #endif 5054 if (!tr->allocated_snapshot) { 5055 ret = alloc_snapshot(tr); 5056 if (ret < 0) 5057 break; 5058 } 5059 local_irq_disable(); 5060 /* Now, we're going to swap */ 5061 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 5062 update_max_tr(tr, current, smp_processor_id()); 5063 else 5064 update_max_tr_single(tr, current, iter->cpu_file); 5065 local_irq_enable(); 5066 break; 5067 default: 5068 if (tr->allocated_snapshot) { 5069 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) 5070 tracing_reset_online_cpus(&tr->max_buffer); 5071 else 5072 tracing_reset(&tr->max_buffer, iter->cpu_file); 5073 } 5074 break; 5075 } 5076 5077 if (ret >= 0) { 5078 *ppos += cnt; 5079 ret = cnt; 5080 } 5081 out: 5082 mutex_unlock(&trace_types_lock); 5083 return ret; 5084 } 5085 5086 static int tracing_snapshot_release(struct inode *inode, struct file *file) 5087 { 5088 struct seq_file *m = file->private_data; 5089 int ret; 5090 5091 ret = tracing_release(inode, file); 5092 5093 if (file->f_mode & FMODE_READ) 5094 return ret; 5095 5096 /* If write only, the seq_file is just a stub */ 5097 if (m) 5098 kfree(m->private); 5099 kfree(m); 5100 5101 return 0; 5102 } 5103 5104 static int tracing_buffers_open(struct inode *inode, struct file *filp); 5105 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf, 5106 size_t count, loff_t *ppos); 5107 static int tracing_buffers_release(struct inode *inode, struct file *file); 5108 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos, 5109 struct pipe_inode_info *pipe, size_t len, unsigned int flags); 5110 5111 static int snapshot_raw_open(struct inode *inode, struct file *filp) 5112 { 5113 struct ftrace_buffer_info *info; 5114 int ret; 5115 5116 ret = tracing_buffers_open(inode, filp); 5117 if (ret < 0) 5118 return ret; 5119 5120 info = filp->private_data; 5121 5122 if (info->iter.trace->use_max_tr) { 5123 tracing_buffers_release(inode, filp); 5124 return -EBUSY; 5125 } 5126 5127 info->iter.snapshot = true; 5128 info->iter.trace_buffer = &info->iter.tr->max_buffer; 5129 5130 return ret; 5131 } 5132 5133 #endif /* CONFIG_TRACER_SNAPSHOT */ 5134 5135 5136 static const struct file_operations tracing_max_lat_fops = { 5137 .open = tracing_open_generic, 5138 .read = tracing_max_lat_read, 5139 .write = tracing_max_lat_write, 5140 .llseek = generic_file_llseek, 5141 }; 5142 5143 static const struct file_operations set_tracer_fops = { 5144 .open = tracing_open_generic, 5145 .read = tracing_set_trace_read, 5146 .write = tracing_set_trace_write, 5147 .llseek = generic_file_llseek, 5148 }; 5149 5150 static const struct file_operations tracing_pipe_fops = { 5151 .open = tracing_open_pipe, 5152 .poll = tracing_poll_pipe, 5153 .read = tracing_read_pipe, 5154 .splice_read = tracing_splice_read_pipe, 5155 .release = tracing_release_pipe, 5156 .llseek = no_llseek, 5157 }; 5158 5159 static const struct file_operations tracing_entries_fops = { 5160 .open = tracing_open_generic_tr, 5161 .read = tracing_entries_read, 5162 .write = tracing_entries_write, 5163 .llseek = generic_file_llseek, 5164 .release = tracing_release_generic_tr, 5165 }; 5166 5167 static const struct file_operations tracing_total_entries_fops = { 5168 .open = tracing_open_generic_tr, 5169 .read = tracing_total_entries_read, 5170 .llseek = generic_file_llseek, 5171 .release = tracing_release_generic_tr, 5172 }; 5173 5174 static const struct file_operations tracing_free_buffer_fops = { 5175 .open = tracing_open_generic_tr, 5176 .write = tracing_free_buffer_write, 5177 .release = tracing_free_buffer_release, 5178 }; 5179 5180 static const struct file_operations tracing_mark_fops = { 5181 .open = tracing_open_generic_tr, 5182 .write = tracing_mark_write, 5183 .llseek = generic_file_llseek, 5184 .release = tracing_release_generic_tr, 5185 }; 5186 5187 static const struct file_operations trace_clock_fops = { 5188 .open = tracing_clock_open, 5189 .read = seq_read, 5190 .llseek = seq_lseek, 5191 .release = tracing_single_release_tr, 5192 .write = tracing_clock_write, 5193 }; 5194 5195 #ifdef CONFIG_TRACER_SNAPSHOT 5196 static const struct file_operations snapshot_fops = { 5197 .open = tracing_snapshot_open, 5198 .read = seq_read, 5199 .write = tracing_snapshot_write, 5200 .llseek = tracing_lseek, 5201 .release = tracing_snapshot_release, 5202 }; 5203 5204 static const struct file_operations snapshot_raw_fops = { 5205 .open = snapshot_raw_open, 5206 .read = tracing_buffers_read, 5207 .release = tracing_buffers_release, 5208 .splice_read = tracing_buffers_splice_read, 5209 .llseek = no_llseek, 5210 }; 5211 5212 #endif /* CONFIG_TRACER_SNAPSHOT */ 5213 5214 static int tracing_buffers_open(struct inode *inode, struct file *filp) 5215 { 5216 struct trace_array *tr = inode->i_private; 5217 struct ftrace_buffer_info *info; 5218 int ret; 5219 5220 if (tracing_disabled) 5221 return -ENODEV; 5222 5223 if (trace_array_get(tr) < 0) 5224 return -ENODEV; 5225 5226 info = kzalloc(sizeof(*info), GFP_KERNEL); 5227 if (!info) { 5228 trace_array_put(tr); 5229 return -ENOMEM; 5230 } 5231 5232 mutex_lock(&trace_types_lock); 5233 5234 info->iter.tr = tr; 5235 info->iter.cpu_file = tracing_get_cpu(inode); 5236 info->iter.trace = tr->current_trace; 5237 info->iter.trace_buffer = &tr->trace_buffer; 5238 info->spare = NULL; 5239 /* Force reading ring buffer for first read */ 5240 info->read = (unsigned int)-1; 5241 5242 filp->private_data = info; 5243 5244 mutex_unlock(&trace_types_lock); 5245 5246 ret = nonseekable_open(inode, filp); 5247 if (ret < 0) 5248 trace_array_put(tr); 5249 5250 return ret; 5251 } 5252 5253 static unsigned int 5254 tracing_buffers_poll(struct file *filp, poll_table *poll_table) 5255 { 5256 struct ftrace_buffer_info *info = filp->private_data; 5257 struct trace_iterator *iter = &info->iter; 5258 5259 return trace_poll(iter, filp, poll_table); 5260 } 5261 5262 static ssize_t 5263 tracing_buffers_read(struct file *filp, char __user *ubuf, 5264 size_t count, loff_t *ppos) 5265 { 5266 struct ftrace_buffer_info *info = filp->private_data; 5267 struct trace_iterator *iter = &info->iter; 5268 ssize_t ret; 5269 ssize_t size; 5270 5271 if (!count) 5272 return 0; 5273 5274 mutex_lock(&trace_types_lock); 5275 5276 #ifdef CONFIG_TRACER_MAX_TRACE 5277 if (iter->snapshot && iter->tr->current_trace->use_max_tr) { 5278 size = -EBUSY; 5279 goto out_unlock; 5280 } 5281 #endif 5282 5283 if (!info->spare) 5284 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer, 5285 iter->cpu_file); 5286 size = -ENOMEM; 5287 if (!info->spare) 5288 goto out_unlock; 5289 5290 /* Do we have previous read data to read? */ 5291 if (info->read < PAGE_SIZE) 5292 goto read; 5293 5294 again: 5295 trace_access_lock(iter->cpu_file); 5296 ret = ring_buffer_read_page(iter->trace_buffer->buffer, 5297 &info->spare, 5298 count, 5299 iter->cpu_file, 0); 5300 trace_access_unlock(iter->cpu_file); 5301 5302 if (ret < 0) { 5303 if (trace_empty(iter)) { 5304 if ((filp->f_flags & O_NONBLOCK)) { 5305 size = -EAGAIN; 5306 goto out_unlock; 5307 } 5308 mutex_unlock(&trace_types_lock); 5309 ret = wait_on_pipe(iter); 5310 mutex_lock(&trace_types_lock); 5311 if (ret) { 5312 size = ret; 5313 goto out_unlock; 5314 } 5315 if (signal_pending(current)) { 5316 size = -EINTR; 5317 goto out_unlock; 5318 } 5319 goto again; 5320 } 5321 size = 0; 5322 goto out_unlock; 5323 } 5324 5325 info->read = 0; 5326 read: 5327 size = PAGE_SIZE - info->read; 5328 if (size > count) 5329 size = count; 5330 5331 ret = copy_to_user(ubuf, info->spare + info->read, size); 5332 if (ret == size) { 5333 size = -EFAULT; 5334 goto out_unlock; 5335 } 5336 size -= ret; 5337 5338 *ppos += size; 5339 info->read += size; 5340 5341 out_unlock: 5342 mutex_unlock(&trace_types_lock); 5343 5344 return size; 5345 } 5346 5347 static int tracing_buffers_release(struct inode *inode, struct file *file) 5348 { 5349 struct ftrace_buffer_info *info = file->private_data; 5350 struct trace_iterator *iter = &info->iter; 5351 5352 mutex_lock(&trace_types_lock); 5353 5354 __trace_array_put(iter->tr); 5355 5356 if (info->spare) 5357 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare); 5358 kfree(info); 5359 5360 mutex_unlock(&trace_types_lock); 5361 5362 return 0; 5363 } 5364 5365 struct buffer_ref { 5366 struct ring_buffer *buffer; 5367 void *page; 5368 int ref; 5369 }; 5370 5371 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe, 5372 struct pipe_buffer *buf) 5373 { 5374 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 5375 5376 if (--ref->ref) 5377 return; 5378 5379 ring_buffer_free_read_page(ref->buffer, ref->page); 5380 kfree(ref); 5381 buf->private = 0; 5382 } 5383 5384 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe, 5385 struct pipe_buffer *buf) 5386 { 5387 struct buffer_ref *ref = (struct buffer_ref *)buf->private; 5388 5389 ref->ref++; 5390 } 5391 5392 /* Pipe buffer operations for a buffer. */ 5393 static const struct pipe_buf_operations buffer_pipe_buf_ops = { 5394 .can_merge = 0, 5395 .confirm = generic_pipe_buf_confirm, 5396 .release = buffer_pipe_buf_release, 5397 .steal = generic_pipe_buf_steal, 5398 .get = buffer_pipe_buf_get, 5399 }; 5400 5401 /* 5402 * Callback from splice_to_pipe(), if we need to release some pages 5403 * at the end of the spd in case we error'ed out in filling the pipe. 5404 */ 5405 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i) 5406 { 5407 struct buffer_ref *ref = 5408 (struct buffer_ref *)spd->partial[i].private; 5409 5410 if (--ref->ref) 5411 return; 5412 5413 ring_buffer_free_read_page(ref->buffer, ref->page); 5414 kfree(ref); 5415 spd->partial[i].private = 0; 5416 } 5417 5418 static ssize_t 5419 tracing_buffers_splice_read(struct file *file, loff_t *ppos, 5420 struct pipe_inode_info *pipe, size_t len, 5421 unsigned int flags) 5422 { 5423 struct ftrace_buffer_info *info = file->private_data; 5424 struct trace_iterator *iter = &info->iter; 5425 struct partial_page partial_def[PIPE_DEF_BUFFERS]; 5426 struct page *pages_def[PIPE_DEF_BUFFERS]; 5427 struct splice_pipe_desc spd = { 5428 .pages = pages_def, 5429 .partial = partial_def, 5430 .nr_pages_max = PIPE_DEF_BUFFERS, 5431 .flags = flags, 5432 .ops = &buffer_pipe_buf_ops, 5433 .spd_release = buffer_spd_release, 5434 }; 5435 struct buffer_ref *ref; 5436 int entries, size, i; 5437 ssize_t ret; 5438 5439 mutex_lock(&trace_types_lock); 5440 5441 #ifdef CONFIG_TRACER_MAX_TRACE 5442 if (iter->snapshot && iter->tr->current_trace->use_max_tr) { 5443 ret = -EBUSY; 5444 goto out; 5445 } 5446 #endif 5447 5448 if (splice_grow_spd(pipe, &spd)) { 5449 ret = -ENOMEM; 5450 goto out; 5451 } 5452 5453 if (*ppos & (PAGE_SIZE - 1)) { 5454 ret = -EINVAL; 5455 goto out; 5456 } 5457 5458 if (len & (PAGE_SIZE - 1)) { 5459 if (len < PAGE_SIZE) { 5460 ret = -EINVAL; 5461 goto out; 5462 } 5463 len &= PAGE_MASK; 5464 } 5465 5466 again: 5467 trace_access_lock(iter->cpu_file); 5468 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file); 5469 5470 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) { 5471 struct page *page; 5472 int r; 5473 5474 ref = kzalloc(sizeof(*ref), GFP_KERNEL); 5475 if (!ref) 5476 break; 5477 5478 ref->ref = 1; 5479 ref->buffer = iter->trace_buffer->buffer; 5480 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file); 5481 if (!ref->page) { 5482 kfree(ref); 5483 break; 5484 } 5485 5486 r = ring_buffer_read_page(ref->buffer, &ref->page, 5487 len, iter->cpu_file, 1); 5488 if (r < 0) { 5489 ring_buffer_free_read_page(ref->buffer, ref->page); 5490 kfree(ref); 5491 break; 5492 } 5493 5494 /* 5495 * zero out any left over data, this is going to 5496 * user land. 5497 */ 5498 size = ring_buffer_page_len(ref->page); 5499 if (size < PAGE_SIZE) 5500 memset(ref->page + size, 0, PAGE_SIZE - size); 5501 5502 page = virt_to_page(ref->page); 5503 5504 spd.pages[i] = page; 5505 spd.partial[i].len = PAGE_SIZE; 5506 spd.partial[i].offset = 0; 5507 spd.partial[i].private = (unsigned long)ref; 5508 spd.nr_pages++; 5509 *ppos += PAGE_SIZE; 5510 5511 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file); 5512 } 5513 5514 trace_access_unlock(iter->cpu_file); 5515 spd.nr_pages = i; 5516 5517 /* did we read anything? */ 5518 if (!spd.nr_pages) { 5519 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) { 5520 ret = -EAGAIN; 5521 goto out; 5522 } 5523 mutex_unlock(&trace_types_lock); 5524 ret = wait_on_pipe(iter); 5525 mutex_lock(&trace_types_lock); 5526 if (ret) 5527 goto out; 5528 if (signal_pending(current)) { 5529 ret = -EINTR; 5530 goto out; 5531 } 5532 goto again; 5533 } 5534 5535 ret = splice_to_pipe(pipe, &spd); 5536 splice_shrink_spd(&spd); 5537 out: 5538 mutex_unlock(&trace_types_lock); 5539 5540 return ret; 5541 } 5542 5543 static const struct file_operations tracing_buffers_fops = { 5544 .open = tracing_buffers_open, 5545 .read = tracing_buffers_read, 5546 .poll = tracing_buffers_poll, 5547 .release = tracing_buffers_release, 5548 .splice_read = tracing_buffers_splice_read, 5549 .llseek = no_llseek, 5550 }; 5551 5552 static ssize_t 5553 tracing_stats_read(struct file *filp, char __user *ubuf, 5554 size_t count, loff_t *ppos) 5555 { 5556 struct inode *inode = file_inode(filp); 5557 struct trace_array *tr = inode->i_private; 5558 struct trace_buffer *trace_buf = &tr->trace_buffer; 5559 int cpu = tracing_get_cpu(inode); 5560 struct trace_seq *s; 5561 unsigned long cnt; 5562 unsigned long long t; 5563 unsigned long usec_rem; 5564 5565 s = kmalloc(sizeof(*s), GFP_KERNEL); 5566 if (!s) 5567 return -ENOMEM; 5568 5569 trace_seq_init(s); 5570 5571 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu); 5572 trace_seq_printf(s, "entries: %ld\n", cnt); 5573 5574 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu); 5575 trace_seq_printf(s, "overrun: %ld\n", cnt); 5576 5577 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu); 5578 trace_seq_printf(s, "commit overrun: %ld\n", cnt); 5579 5580 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu); 5581 trace_seq_printf(s, "bytes: %ld\n", cnt); 5582 5583 if (trace_clocks[tr->clock_id].in_ns) { 5584 /* local or global for trace_clock */ 5585 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 5586 usec_rem = do_div(t, USEC_PER_SEC); 5587 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n", 5588 t, usec_rem); 5589 5590 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu)); 5591 usec_rem = do_div(t, USEC_PER_SEC); 5592 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem); 5593 } else { 5594 /* counter or tsc mode for trace_clock */ 5595 trace_seq_printf(s, "oldest event ts: %llu\n", 5596 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu)); 5597 5598 trace_seq_printf(s, "now ts: %llu\n", 5599 ring_buffer_time_stamp(trace_buf->buffer, cpu)); 5600 } 5601 5602 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu); 5603 trace_seq_printf(s, "dropped events: %ld\n", cnt); 5604 5605 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu); 5606 trace_seq_printf(s, "read events: %ld\n", cnt); 5607 5608 count = simple_read_from_buffer(ubuf, count, ppos, s->buffer, s->len); 5609 5610 kfree(s); 5611 5612 return count; 5613 } 5614 5615 static const struct file_operations tracing_stats_fops = { 5616 .open = tracing_open_generic_tr, 5617 .read = tracing_stats_read, 5618 .llseek = generic_file_llseek, 5619 .release = tracing_release_generic_tr, 5620 }; 5621 5622 #ifdef CONFIG_DYNAMIC_FTRACE 5623 5624 int __weak ftrace_arch_read_dyn_info(char *buf, int size) 5625 { 5626 return 0; 5627 } 5628 5629 static ssize_t 5630 tracing_read_dyn_info(struct file *filp, char __user *ubuf, 5631 size_t cnt, loff_t *ppos) 5632 { 5633 static char ftrace_dyn_info_buffer[1024]; 5634 static DEFINE_MUTEX(dyn_info_mutex); 5635 unsigned long *p = filp->private_data; 5636 char *buf = ftrace_dyn_info_buffer; 5637 int size = ARRAY_SIZE(ftrace_dyn_info_buffer); 5638 int r; 5639 5640 mutex_lock(&dyn_info_mutex); 5641 r = sprintf(buf, "%ld ", *p); 5642 5643 r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r); 5644 buf[r++] = '\n'; 5645 5646 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 5647 5648 mutex_unlock(&dyn_info_mutex); 5649 5650 return r; 5651 } 5652 5653 static const struct file_operations tracing_dyn_info_fops = { 5654 .open = tracing_open_generic, 5655 .read = tracing_read_dyn_info, 5656 .llseek = generic_file_llseek, 5657 }; 5658 #endif /* CONFIG_DYNAMIC_FTRACE */ 5659 5660 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) 5661 static void 5662 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data) 5663 { 5664 tracing_snapshot(); 5665 } 5666 5667 static void 5668 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data) 5669 { 5670 unsigned long *count = (long *)data; 5671 5672 if (!*count) 5673 return; 5674 5675 if (*count != -1) 5676 (*count)--; 5677 5678 tracing_snapshot(); 5679 } 5680 5681 static int 5682 ftrace_snapshot_print(struct seq_file *m, unsigned long ip, 5683 struct ftrace_probe_ops *ops, void *data) 5684 { 5685 long count = (long)data; 5686 5687 seq_printf(m, "%ps:", (void *)ip); 5688 5689 seq_printf(m, "snapshot"); 5690 5691 if (count == -1) 5692 seq_printf(m, ":unlimited\n"); 5693 else 5694 seq_printf(m, ":count=%ld\n", count); 5695 5696 return 0; 5697 } 5698 5699 static struct ftrace_probe_ops snapshot_probe_ops = { 5700 .func = ftrace_snapshot, 5701 .print = ftrace_snapshot_print, 5702 }; 5703 5704 static struct ftrace_probe_ops snapshot_count_probe_ops = { 5705 .func = ftrace_count_snapshot, 5706 .print = ftrace_snapshot_print, 5707 }; 5708 5709 static int 5710 ftrace_trace_snapshot_callback(struct ftrace_hash *hash, 5711 char *glob, char *cmd, char *param, int enable) 5712 { 5713 struct ftrace_probe_ops *ops; 5714 void *count = (void *)-1; 5715 char *number; 5716 int ret; 5717 5718 /* hash funcs only work with set_ftrace_filter */ 5719 if (!enable) 5720 return -EINVAL; 5721 5722 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops; 5723 5724 if (glob[0] == '!') { 5725 unregister_ftrace_function_probe_func(glob+1, ops); 5726 return 0; 5727 } 5728 5729 if (!param) 5730 goto out_reg; 5731 5732 number = strsep(¶m, ":"); 5733 5734 if (!strlen(number)) 5735 goto out_reg; 5736 5737 /* 5738 * We use the callback data field (which is a pointer) 5739 * as our counter. 5740 */ 5741 ret = kstrtoul(number, 0, (unsigned long *)&count); 5742 if (ret) 5743 return ret; 5744 5745 out_reg: 5746 ret = register_ftrace_function_probe(glob, ops, count); 5747 5748 if (ret >= 0) 5749 alloc_snapshot(&global_trace); 5750 5751 return ret < 0 ? ret : 0; 5752 } 5753 5754 static struct ftrace_func_command ftrace_snapshot_cmd = { 5755 .name = "snapshot", 5756 .func = ftrace_trace_snapshot_callback, 5757 }; 5758 5759 static __init int register_snapshot_cmd(void) 5760 { 5761 return register_ftrace_command(&ftrace_snapshot_cmd); 5762 } 5763 #else 5764 static inline __init int register_snapshot_cmd(void) { return 0; } 5765 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */ 5766 5767 struct dentry *tracing_init_dentry_tr(struct trace_array *tr) 5768 { 5769 if (tr->dir) 5770 return tr->dir; 5771 5772 if (!debugfs_initialized()) 5773 return NULL; 5774 5775 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) 5776 tr->dir = debugfs_create_dir("tracing", NULL); 5777 5778 if (!tr->dir) 5779 pr_warn_once("Could not create debugfs directory 'tracing'\n"); 5780 5781 return tr->dir; 5782 } 5783 5784 struct dentry *tracing_init_dentry(void) 5785 { 5786 return tracing_init_dentry_tr(&global_trace); 5787 } 5788 5789 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu) 5790 { 5791 struct dentry *d_tracer; 5792 5793 if (tr->percpu_dir) 5794 return tr->percpu_dir; 5795 5796 d_tracer = tracing_init_dentry_tr(tr); 5797 if (!d_tracer) 5798 return NULL; 5799 5800 tr->percpu_dir = debugfs_create_dir("per_cpu", d_tracer); 5801 5802 WARN_ONCE(!tr->percpu_dir, 5803 "Could not create debugfs directory 'per_cpu/%d'\n", cpu); 5804 5805 return tr->percpu_dir; 5806 } 5807 5808 static struct dentry * 5809 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent, 5810 void *data, long cpu, const struct file_operations *fops) 5811 { 5812 struct dentry *ret = trace_create_file(name, mode, parent, data, fops); 5813 5814 if (ret) /* See tracing_get_cpu() */ 5815 ret->d_inode->i_cdev = (void *)(cpu + 1); 5816 return ret; 5817 } 5818 5819 static void 5820 tracing_init_debugfs_percpu(struct trace_array *tr, long cpu) 5821 { 5822 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu); 5823 struct dentry *d_cpu; 5824 char cpu_dir[30]; /* 30 characters should be more than enough */ 5825 5826 if (!d_percpu) 5827 return; 5828 5829 snprintf(cpu_dir, 30, "cpu%ld", cpu); 5830 d_cpu = debugfs_create_dir(cpu_dir, d_percpu); 5831 if (!d_cpu) { 5832 pr_warning("Could not create debugfs '%s' entry\n", cpu_dir); 5833 return; 5834 } 5835 5836 /* per cpu trace_pipe */ 5837 trace_create_cpu_file("trace_pipe", 0444, d_cpu, 5838 tr, cpu, &tracing_pipe_fops); 5839 5840 /* per cpu trace */ 5841 trace_create_cpu_file("trace", 0644, d_cpu, 5842 tr, cpu, &tracing_fops); 5843 5844 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu, 5845 tr, cpu, &tracing_buffers_fops); 5846 5847 trace_create_cpu_file("stats", 0444, d_cpu, 5848 tr, cpu, &tracing_stats_fops); 5849 5850 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu, 5851 tr, cpu, &tracing_entries_fops); 5852 5853 #ifdef CONFIG_TRACER_SNAPSHOT 5854 trace_create_cpu_file("snapshot", 0644, d_cpu, 5855 tr, cpu, &snapshot_fops); 5856 5857 trace_create_cpu_file("snapshot_raw", 0444, d_cpu, 5858 tr, cpu, &snapshot_raw_fops); 5859 #endif 5860 } 5861 5862 #ifdef CONFIG_FTRACE_SELFTEST 5863 /* Let selftest have access to static functions in this file */ 5864 #include "trace_selftest.c" 5865 #endif 5866 5867 struct trace_option_dentry { 5868 struct tracer_opt *opt; 5869 struct tracer_flags *flags; 5870 struct trace_array *tr; 5871 struct dentry *entry; 5872 }; 5873 5874 static ssize_t 5875 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt, 5876 loff_t *ppos) 5877 { 5878 struct trace_option_dentry *topt = filp->private_data; 5879 char *buf; 5880 5881 if (topt->flags->val & topt->opt->bit) 5882 buf = "1\n"; 5883 else 5884 buf = "0\n"; 5885 5886 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 5887 } 5888 5889 static ssize_t 5890 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt, 5891 loff_t *ppos) 5892 { 5893 struct trace_option_dentry *topt = filp->private_data; 5894 unsigned long val; 5895 int ret; 5896 5897 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 5898 if (ret) 5899 return ret; 5900 5901 if (val != 0 && val != 1) 5902 return -EINVAL; 5903 5904 if (!!(topt->flags->val & topt->opt->bit) != val) { 5905 mutex_lock(&trace_types_lock); 5906 ret = __set_tracer_option(topt->tr, topt->flags, 5907 topt->opt, !val); 5908 mutex_unlock(&trace_types_lock); 5909 if (ret) 5910 return ret; 5911 } 5912 5913 *ppos += cnt; 5914 5915 return cnt; 5916 } 5917 5918 5919 static const struct file_operations trace_options_fops = { 5920 .open = tracing_open_generic, 5921 .read = trace_options_read, 5922 .write = trace_options_write, 5923 .llseek = generic_file_llseek, 5924 }; 5925 5926 static ssize_t 5927 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt, 5928 loff_t *ppos) 5929 { 5930 long index = (long)filp->private_data; 5931 char *buf; 5932 5933 if (trace_flags & (1 << index)) 5934 buf = "1\n"; 5935 else 5936 buf = "0\n"; 5937 5938 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 5939 } 5940 5941 static ssize_t 5942 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt, 5943 loff_t *ppos) 5944 { 5945 struct trace_array *tr = &global_trace; 5946 long index = (long)filp->private_data; 5947 unsigned long val; 5948 int ret; 5949 5950 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 5951 if (ret) 5952 return ret; 5953 5954 if (val != 0 && val != 1) 5955 return -EINVAL; 5956 5957 mutex_lock(&trace_types_lock); 5958 ret = set_tracer_flag(tr, 1 << index, val); 5959 mutex_unlock(&trace_types_lock); 5960 5961 if (ret < 0) 5962 return ret; 5963 5964 *ppos += cnt; 5965 5966 return cnt; 5967 } 5968 5969 static const struct file_operations trace_options_core_fops = { 5970 .open = tracing_open_generic, 5971 .read = trace_options_core_read, 5972 .write = trace_options_core_write, 5973 .llseek = generic_file_llseek, 5974 }; 5975 5976 struct dentry *trace_create_file(const char *name, 5977 umode_t mode, 5978 struct dentry *parent, 5979 void *data, 5980 const struct file_operations *fops) 5981 { 5982 struct dentry *ret; 5983 5984 ret = debugfs_create_file(name, mode, parent, data, fops); 5985 if (!ret) 5986 pr_warning("Could not create debugfs '%s' entry\n", name); 5987 5988 return ret; 5989 } 5990 5991 5992 static struct dentry *trace_options_init_dentry(struct trace_array *tr) 5993 { 5994 struct dentry *d_tracer; 5995 5996 if (tr->options) 5997 return tr->options; 5998 5999 d_tracer = tracing_init_dentry_tr(tr); 6000 if (!d_tracer) 6001 return NULL; 6002 6003 tr->options = debugfs_create_dir("options", d_tracer); 6004 if (!tr->options) { 6005 pr_warning("Could not create debugfs directory 'options'\n"); 6006 return NULL; 6007 } 6008 6009 return tr->options; 6010 } 6011 6012 static void 6013 create_trace_option_file(struct trace_array *tr, 6014 struct trace_option_dentry *topt, 6015 struct tracer_flags *flags, 6016 struct tracer_opt *opt) 6017 { 6018 struct dentry *t_options; 6019 6020 t_options = trace_options_init_dentry(tr); 6021 if (!t_options) 6022 return; 6023 6024 topt->flags = flags; 6025 topt->opt = opt; 6026 topt->tr = tr; 6027 6028 topt->entry = trace_create_file(opt->name, 0644, t_options, topt, 6029 &trace_options_fops); 6030 6031 } 6032 6033 static struct trace_option_dentry * 6034 create_trace_option_files(struct trace_array *tr, struct tracer *tracer) 6035 { 6036 struct trace_option_dentry *topts; 6037 struct tracer_flags *flags; 6038 struct tracer_opt *opts; 6039 int cnt; 6040 6041 if (!tracer) 6042 return NULL; 6043 6044 flags = tracer->flags; 6045 6046 if (!flags || !flags->opts) 6047 return NULL; 6048 6049 opts = flags->opts; 6050 6051 for (cnt = 0; opts[cnt].name; cnt++) 6052 ; 6053 6054 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL); 6055 if (!topts) 6056 return NULL; 6057 6058 for (cnt = 0; opts[cnt].name; cnt++) 6059 create_trace_option_file(tr, &topts[cnt], flags, 6060 &opts[cnt]); 6061 6062 return topts; 6063 } 6064 6065 static void 6066 destroy_trace_option_files(struct trace_option_dentry *topts) 6067 { 6068 int cnt; 6069 6070 if (!topts) 6071 return; 6072 6073 for (cnt = 0; topts[cnt].opt; cnt++) 6074 debugfs_remove(topts[cnt].entry); 6075 6076 kfree(topts); 6077 } 6078 6079 static struct dentry * 6080 create_trace_option_core_file(struct trace_array *tr, 6081 const char *option, long index) 6082 { 6083 struct dentry *t_options; 6084 6085 t_options = trace_options_init_dentry(tr); 6086 if (!t_options) 6087 return NULL; 6088 6089 return trace_create_file(option, 0644, t_options, (void *)index, 6090 &trace_options_core_fops); 6091 } 6092 6093 static __init void create_trace_options_dir(struct trace_array *tr) 6094 { 6095 struct dentry *t_options; 6096 int i; 6097 6098 t_options = trace_options_init_dentry(tr); 6099 if (!t_options) 6100 return; 6101 6102 for (i = 0; trace_options[i]; i++) 6103 create_trace_option_core_file(tr, trace_options[i], i); 6104 } 6105 6106 static ssize_t 6107 rb_simple_read(struct file *filp, char __user *ubuf, 6108 size_t cnt, loff_t *ppos) 6109 { 6110 struct trace_array *tr = filp->private_data; 6111 char buf[64]; 6112 int r; 6113 6114 r = tracer_tracing_is_on(tr); 6115 r = sprintf(buf, "%d\n", r); 6116 6117 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 6118 } 6119 6120 static ssize_t 6121 rb_simple_write(struct file *filp, const char __user *ubuf, 6122 size_t cnt, loff_t *ppos) 6123 { 6124 struct trace_array *tr = filp->private_data; 6125 struct ring_buffer *buffer = tr->trace_buffer.buffer; 6126 unsigned long val; 6127 int ret; 6128 6129 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 6130 if (ret) 6131 return ret; 6132 6133 if (buffer) { 6134 mutex_lock(&trace_types_lock); 6135 if (val) { 6136 tracer_tracing_on(tr); 6137 if (tr->current_trace->start) 6138 tr->current_trace->start(tr); 6139 } else { 6140 tracer_tracing_off(tr); 6141 if (tr->current_trace->stop) 6142 tr->current_trace->stop(tr); 6143 } 6144 mutex_unlock(&trace_types_lock); 6145 } 6146 6147 (*ppos)++; 6148 6149 return cnt; 6150 } 6151 6152 static const struct file_operations rb_simple_fops = { 6153 .open = tracing_open_generic_tr, 6154 .read = rb_simple_read, 6155 .write = rb_simple_write, 6156 .release = tracing_release_generic_tr, 6157 .llseek = default_llseek, 6158 }; 6159 6160 struct dentry *trace_instance_dir; 6161 6162 static void 6163 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer); 6164 6165 static int 6166 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size) 6167 { 6168 enum ring_buffer_flags rb_flags; 6169 6170 rb_flags = trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; 6171 6172 buf->tr = tr; 6173 6174 buf->buffer = ring_buffer_alloc(size, rb_flags); 6175 if (!buf->buffer) 6176 return -ENOMEM; 6177 6178 buf->data = alloc_percpu(struct trace_array_cpu); 6179 if (!buf->data) { 6180 ring_buffer_free(buf->buffer); 6181 return -ENOMEM; 6182 } 6183 6184 /* Allocate the first page for all buffers */ 6185 set_buffer_entries(&tr->trace_buffer, 6186 ring_buffer_size(tr->trace_buffer.buffer, 0)); 6187 6188 return 0; 6189 } 6190 6191 static int allocate_trace_buffers(struct trace_array *tr, int size) 6192 { 6193 int ret; 6194 6195 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size); 6196 if (ret) 6197 return ret; 6198 6199 #ifdef CONFIG_TRACER_MAX_TRACE 6200 ret = allocate_trace_buffer(tr, &tr->max_buffer, 6201 allocate_snapshot ? size : 1); 6202 if (WARN_ON(ret)) { 6203 ring_buffer_free(tr->trace_buffer.buffer); 6204 free_percpu(tr->trace_buffer.data); 6205 return -ENOMEM; 6206 } 6207 tr->allocated_snapshot = allocate_snapshot; 6208 6209 /* 6210 * Only the top level trace array gets its snapshot allocated 6211 * from the kernel command line. 6212 */ 6213 allocate_snapshot = false; 6214 #endif 6215 return 0; 6216 } 6217 6218 static void free_trace_buffer(struct trace_buffer *buf) 6219 { 6220 if (buf->buffer) { 6221 ring_buffer_free(buf->buffer); 6222 buf->buffer = NULL; 6223 free_percpu(buf->data); 6224 buf->data = NULL; 6225 } 6226 } 6227 6228 static void free_trace_buffers(struct trace_array *tr) 6229 { 6230 if (!tr) 6231 return; 6232 6233 free_trace_buffer(&tr->trace_buffer); 6234 6235 #ifdef CONFIG_TRACER_MAX_TRACE 6236 free_trace_buffer(&tr->max_buffer); 6237 #endif 6238 } 6239 6240 static int new_instance_create(const char *name) 6241 { 6242 struct trace_array *tr; 6243 int ret; 6244 6245 mutex_lock(&trace_types_lock); 6246 6247 ret = -EEXIST; 6248 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 6249 if (tr->name && strcmp(tr->name, name) == 0) 6250 goto out_unlock; 6251 } 6252 6253 ret = -ENOMEM; 6254 tr = kzalloc(sizeof(*tr), GFP_KERNEL); 6255 if (!tr) 6256 goto out_unlock; 6257 6258 tr->name = kstrdup(name, GFP_KERNEL); 6259 if (!tr->name) 6260 goto out_free_tr; 6261 6262 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL)) 6263 goto out_free_tr; 6264 6265 cpumask_copy(tr->tracing_cpumask, cpu_all_mask); 6266 6267 raw_spin_lock_init(&tr->start_lock); 6268 6269 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 6270 6271 tr->current_trace = &nop_trace; 6272 6273 INIT_LIST_HEAD(&tr->systems); 6274 INIT_LIST_HEAD(&tr->events); 6275 6276 if (allocate_trace_buffers(tr, trace_buf_size) < 0) 6277 goto out_free_tr; 6278 6279 tr->dir = debugfs_create_dir(name, trace_instance_dir); 6280 if (!tr->dir) 6281 goto out_free_tr; 6282 6283 ret = event_trace_add_tracer(tr->dir, tr); 6284 if (ret) { 6285 debugfs_remove_recursive(tr->dir); 6286 goto out_free_tr; 6287 } 6288 6289 init_tracer_debugfs(tr, tr->dir); 6290 6291 list_add(&tr->list, &ftrace_trace_arrays); 6292 6293 mutex_unlock(&trace_types_lock); 6294 6295 return 0; 6296 6297 out_free_tr: 6298 free_trace_buffers(tr); 6299 free_cpumask_var(tr->tracing_cpumask); 6300 kfree(tr->name); 6301 kfree(tr); 6302 6303 out_unlock: 6304 mutex_unlock(&trace_types_lock); 6305 6306 return ret; 6307 6308 } 6309 6310 static int instance_delete(const char *name) 6311 { 6312 struct trace_array *tr; 6313 int found = 0; 6314 int ret; 6315 6316 mutex_lock(&trace_types_lock); 6317 6318 ret = -ENODEV; 6319 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 6320 if (tr->name && strcmp(tr->name, name) == 0) { 6321 found = 1; 6322 break; 6323 } 6324 } 6325 if (!found) 6326 goto out_unlock; 6327 6328 ret = -EBUSY; 6329 if (tr->ref) 6330 goto out_unlock; 6331 6332 list_del(&tr->list); 6333 6334 tracing_set_nop(tr); 6335 event_trace_del_tracer(tr); 6336 ftrace_destroy_function_files(tr); 6337 debugfs_remove_recursive(tr->dir); 6338 free_trace_buffers(tr); 6339 6340 kfree(tr->name); 6341 kfree(tr); 6342 6343 ret = 0; 6344 6345 out_unlock: 6346 mutex_unlock(&trace_types_lock); 6347 6348 return ret; 6349 } 6350 6351 static int instance_mkdir (struct inode *inode, struct dentry *dentry, umode_t mode) 6352 { 6353 struct dentry *parent; 6354 int ret; 6355 6356 /* Paranoid: Make sure the parent is the "instances" directory */ 6357 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias); 6358 if (WARN_ON_ONCE(parent != trace_instance_dir)) 6359 return -ENOENT; 6360 6361 /* 6362 * The inode mutex is locked, but debugfs_create_dir() will also 6363 * take the mutex. As the instances directory can not be destroyed 6364 * or changed in any other way, it is safe to unlock it, and 6365 * let the dentry try. If two users try to make the same dir at 6366 * the same time, then the new_instance_create() will determine the 6367 * winner. 6368 */ 6369 mutex_unlock(&inode->i_mutex); 6370 6371 ret = new_instance_create(dentry->d_iname); 6372 6373 mutex_lock(&inode->i_mutex); 6374 6375 return ret; 6376 } 6377 6378 static int instance_rmdir(struct inode *inode, struct dentry *dentry) 6379 { 6380 struct dentry *parent; 6381 int ret; 6382 6383 /* Paranoid: Make sure the parent is the "instances" directory */ 6384 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias); 6385 if (WARN_ON_ONCE(parent != trace_instance_dir)) 6386 return -ENOENT; 6387 6388 /* The caller did a dget() on dentry */ 6389 mutex_unlock(&dentry->d_inode->i_mutex); 6390 6391 /* 6392 * The inode mutex is locked, but debugfs_create_dir() will also 6393 * take the mutex. As the instances directory can not be destroyed 6394 * or changed in any other way, it is safe to unlock it, and 6395 * let the dentry try. If two users try to make the same dir at 6396 * the same time, then the instance_delete() will determine the 6397 * winner. 6398 */ 6399 mutex_unlock(&inode->i_mutex); 6400 6401 ret = instance_delete(dentry->d_iname); 6402 6403 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT); 6404 mutex_lock(&dentry->d_inode->i_mutex); 6405 6406 return ret; 6407 } 6408 6409 static const struct inode_operations instance_dir_inode_operations = { 6410 .lookup = simple_lookup, 6411 .mkdir = instance_mkdir, 6412 .rmdir = instance_rmdir, 6413 }; 6414 6415 static __init void create_trace_instances(struct dentry *d_tracer) 6416 { 6417 trace_instance_dir = debugfs_create_dir("instances", d_tracer); 6418 if (WARN_ON(!trace_instance_dir)) 6419 return; 6420 6421 /* Hijack the dir inode operations, to allow mkdir */ 6422 trace_instance_dir->d_inode->i_op = &instance_dir_inode_operations; 6423 } 6424 6425 static void 6426 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer) 6427 { 6428 int cpu; 6429 6430 trace_create_file("available_tracers", 0444, d_tracer, 6431 tr, &show_traces_fops); 6432 6433 trace_create_file("current_tracer", 0644, d_tracer, 6434 tr, &set_tracer_fops); 6435 6436 trace_create_file("tracing_cpumask", 0644, d_tracer, 6437 tr, &tracing_cpumask_fops); 6438 6439 trace_create_file("trace_options", 0644, d_tracer, 6440 tr, &tracing_iter_fops); 6441 6442 trace_create_file("trace", 0644, d_tracer, 6443 tr, &tracing_fops); 6444 6445 trace_create_file("trace_pipe", 0444, d_tracer, 6446 tr, &tracing_pipe_fops); 6447 6448 trace_create_file("buffer_size_kb", 0644, d_tracer, 6449 tr, &tracing_entries_fops); 6450 6451 trace_create_file("buffer_total_size_kb", 0444, d_tracer, 6452 tr, &tracing_total_entries_fops); 6453 6454 trace_create_file("free_buffer", 0200, d_tracer, 6455 tr, &tracing_free_buffer_fops); 6456 6457 trace_create_file("trace_marker", 0220, d_tracer, 6458 tr, &tracing_mark_fops); 6459 6460 trace_create_file("trace_clock", 0644, d_tracer, tr, 6461 &trace_clock_fops); 6462 6463 trace_create_file("tracing_on", 0644, d_tracer, 6464 tr, &rb_simple_fops); 6465 6466 #ifdef CONFIG_TRACER_MAX_TRACE 6467 trace_create_file("tracing_max_latency", 0644, d_tracer, 6468 &tr->max_latency, &tracing_max_lat_fops); 6469 #endif 6470 6471 if (ftrace_create_function_files(tr, d_tracer)) 6472 WARN(1, "Could not allocate function filter files"); 6473 6474 #ifdef CONFIG_TRACER_SNAPSHOT 6475 trace_create_file("snapshot", 0644, d_tracer, 6476 tr, &snapshot_fops); 6477 #endif 6478 6479 for_each_tracing_cpu(cpu) 6480 tracing_init_debugfs_percpu(tr, cpu); 6481 6482 } 6483 6484 static __init int tracer_init_debugfs(void) 6485 { 6486 struct dentry *d_tracer; 6487 6488 trace_access_lock_init(); 6489 6490 d_tracer = tracing_init_dentry(); 6491 if (!d_tracer) 6492 return 0; 6493 6494 init_tracer_debugfs(&global_trace, d_tracer); 6495 6496 trace_create_file("tracing_thresh", 0644, d_tracer, 6497 &tracing_thresh, &tracing_max_lat_fops); 6498 6499 trace_create_file("README", 0444, d_tracer, 6500 NULL, &tracing_readme_fops); 6501 6502 trace_create_file("saved_cmdlines", 0444, d_tracer, 6503 NULL, &tracing_saved_cmdlines_fops); 6504 6505 trace_create_file("saved_cmdlines_size", 0644, d_tracer, 6506 NULL, &tracing_saved_cmdlines_size_fops); 6507 6508 #ifdef CONFIG_DYNAMIC_FTRACE 6509 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer, 6510 &ftrace_update_tot_cnt, &tracing_dyn_info_fops); 6511 #endif 6512 6513 create_trace_instances(d_tracer); 6514 6515 create_trace_options_dir(&global_trace); 6516 6517 return 0; 6518 } 6519 6520 static int trace_panic_handler(struct notifier_block *this, 6521 unsigned long event, void *unused) 6522 { 6523 if (ftrace_dump_on_oops) 6524 ftrace_dump(ftrace_dump_on_oops); 6525 return NOTIFY_OK; 6526 } 6527 6528 static struct notifier_block trace_panic_notifier = { 6529 .notifier_call = trace_panic_handler, 6530 .next = NULL, 6531 .priority = 150 /* priority: INT_MAX >= x >= 0 */ 6532 }; 6533 6534 static int trace_die_handler(struct notifier_block *self, 6535 unsigned long val, 6536 void *data) 6537 { 6538 switch (val) { 6539 case DIE_OOPS: 6540 if (ftrace_dump_on_oops) 6541 ftrace_dump(ftrace_dump_on_oops); 6542 break; 6543 default: 6544 break; 6545 } 6546 return NOTIFY_OK; 6547 } 6548 6549 static struct notifier_block trace_die_notifier = { 6550 .notifier_call = trace_die_handler, 6551 .priority = 200 6552 }; 6553 6554 /* 6555 * printk is set to max of 1024, we really don't need it that big. 6556 * Nothing should be printing 1000 characters anyway. 6557 */ 6558 #define TRACE_MAX_PRINT 1000 6559 6560 /* 6561 * Define here KERN_TRACE so that we have one place to modify 6562 * it if we decide to change what log level the ftrace dump 6563 * should be at. 6564 */ 6565 #define KERN_TRACE KERN_EMERG 6566 6567 void 6568 trace_printk_seq(struct trace_seq *s) 6569 { 6570 /* Probably should print a warning here. */ 6571 if (s->len >= TRACE_MAX_PRINT) 6572 s->len = TRACE_MAX_PRINT; 6573 6574 /* should be zero ended, but we are paranoid. */ 6575 s->buffer[s->len] = 0; 6576 6577 printk(KERN_TRACE "%s", s->buffer); 6578 6579 trace_seq_init(s); 6580 } 6581 6582 void trace_init_global_iter(struct trace_iterator *iter) 6583 { 6584 iter->tr = &global_trace; 6585 iter->trace = iter->tr->current_trace; 6586 iter->cpu_file = RING_BUFFER_ALL_CPUS; 6587 iter->trace_buffer = &global_trace.trace_buffer; 6588 6589 if (iter->trace && iter->trace->open) 6590 iter->trace->open(iter); 6591 6592 /* Annotate start of buffers if we had overruns */ 6593 if (ring_buffer_overruns(iter->trace_buffer->buffer)) 6594 iter->iter_flags |= TRACE_FILE_ANNOTATE; 6595 6596 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ 6597 if (trace_clocks[iter->tr->clock_id].in_ns) 6598 iter->iter_flags |= TRACE_FILE_TIME_IN_NS; 6599 } 6600 6601 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) 6602 { 6603 /* use static because iter can be a bit big for the stack */ 6604 static struct trace_iterator iter; 6605 static atomic_t dump_running; 6606 unsigned int old_userobj; 6607 unsigned long flags; 6608 int cnt = 0, cpu; 6609 6610 /* Only allow one dump user at a time. */ 6611 if (atomic_inc_return(&dump_running) != 1) { 6612 atomic_dec(&dump_running); 6613 return; 6614 } 6615 6616 /* 6617 * Always turn off tracing when we dump. 6618 * We don't need to show trace output of what happens 6619 * between multiple crashes. 6620 * 6621 * If the user does a sysrq-z, then they can re-enable 6622 * tracing with echo 1 > tracing_on. 6623 */ 6624 tracing_off(); 6625 6626 local_irq_save(flags); 6627 6628 /* Simulate the iterator */ 6629 trace_init_global_iter(&iter); 6630 6631 for_each_tracing_cpu(cpu) { 6632 atomic_inc(&per_cpu_ptr(iter.tr->trace_buffer.data, cpu)->disabled); 6633 } 6634 6635 old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ; 6636 6637 /* don't look at user memory in panic mode */ 6638 trace_flags &= ~TRACE_ITER_SYM_USEROBJ; 6639 6640 switch (oops_dump_mode) { 6641 case DUMP_ALL: 6642 iter.cpu_file = RING_BUFFER_ALL_CPUS; 6643 break; 6644 case DUMP_ORIG: 6645 iter.cpu_file = raw_smp_processor_id(); 6646 break; 6647 case DUMP_NONE: 6648 goto out_enable; 6649 default: 6650 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n"); 6651 iter.cpu_file = RING_BUFFER_ALL_CPUS; 6652 } 6653 6654 printk(KERN_TRACE "Dumping ftrace buffer:\n"); 6655 6656 /* Did function tracer already get disabled? */ 6657 if (ftrace_is_dead()) { 6658 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n"); 6659 printk("# MAY BE MISSING FUNCTION EVENTS\n"); 6660 } 6661 6662 /* 6663 * We need to stop all tracing on all CPUS to read the 6664 * the next buffer. This is a bit expensive, but is 6665 * not done often. We fill all what we can read, 6666 * and then release the locks again. 6667 */ 6668 6669 while (!trace_empty(&iter)) { 6670 6671 if (!cnt) 6672 printk(KERN_TRACE "---------------------------------\n"); 6673 6674 cnt++; 6675 6676 /* reset all but tr, trace, and overruns */ 6677 memset(&iter.seq, 0, 6678 sizeof(struct trace_iterator) - 6679 offsetof(struct trace_iterator, seq)); 6680 iter.iter_flags |= TRACE_FILE_LAT_FMT; 6681 iter.pos = -1; 6682 6683 if (trace_find_next_entry_inc(&iter) != NULL) { 6684 int ret; 6685 6686 ret = print_trace_line(&iter); 6687 if (ret != TRACE_TYPE_NO_CONSUME) 6688 trace_consume(&iter); 6689 } 6690 touch_nmi_watchdog(); 6691 6692 trace_printk_seq(&iter.seq); 6693 } 6694 6695 if (!cnt) 6696 printk(KERN_TRACE " (ftrace buffer empty)\n"); 6697 else 6698 printk(KERN_TRACE "---------------------------------\n"); 6699 6700 out_enable: 6701 trace_flags |= old_userobj; 6702 6703 for_each_tracing_cpu(cpu) { 6704 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled); 6705 } 6706 atomic_dec(&dump_running); 6707 local_irq_restore(flags); 6708 } 6709 EXPORT_SYMBOL_GPL(ftrace_dump); 6710 6711 __init static int tracer_alloc_buffers(void) 6712 { 6713 int ring_buf_size; 6714 int ret = -ENOMEM; 6715 6716 6717 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) 6718 goto out; 6719 6720 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL)) 6721 goto out_free_buffer_mask; 6722 6723 /* Only allocate trace_printk buffers if a trace_printk exists */ 6724 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt) 6725 /* Must be called before global_trace.buffer is allocated */ 6726 trace_printk_init_buffers(); 6727 6728 /* To save memory, keep the ring buffer size to its minimum */ 6729 if (ring_buffer_expanded) 6730 ring_buf_size = trace_buf_size; 6731 else 6732 ring_buf_size = 1; 6733 6734 cpumask_copy(tracing_buffer_mask, cpu_possible_mask); 6735 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask); 6736 6737 raw_spin_lock_init(&global_trace.start_lock); 6738 6739 /* Used for event triggers */ 6740 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE); 6741 if (!temp_buffer) 6742 goto out_free_cpumask; 6743 6744 if (trace_create_savedcmd() < 0) 6745 goto out_free_temp_buffer; 6746 6747 /* TODO: make the number of buffers hot pluggable with CPUS */ 6748 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) { 6749 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n"); 6750 WARN_ON(1); 6751 goto out_free_savedcmd; 6752 } 6753 6754 if (global_trace.buffer_disabled) 6755 tracing_off(); 6756 6757 if (trace_boot_clock) { 6758 ret = tracing_set_clock(&global_trace, trace_boot_clock); 6759 if (ret < 0) 6760 pr_warning("Trace clock %s not defined, going back to default\n", 6761 trace_boot_clock); 6762 } 6763 6764 /* 6765 * register_tracer() might reference current_trace, so it 6766 * needs to be set before we register anything. This is 6767 * just a bootstrap of current_trace anyway. 6768 */ 6769 global_trace.current_trace = &nop_trace; 6770 6771 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; 6772 6773 ftrace_init_global_array_ops(&global_trace); 6774 6775 register_tracer(&nop_trace); 6776 6777 /* All seems OK, enable tracing */ 6778 tracing_disabled = 0; 6779 6780 atomic_notifier_chain_register(&panic_notifier_list, 6781 &trace_panic_notifier); 6782 6783 register_die_notifier(&trace_die_notifier); 6784 6785 global_trace.flags = TRACE_ARRAY_FL_GLOBAL; 6786 6787 INIT_LIST_HEAD(&global_trace.systems); 6788 INIT_LIST_HEAD(&global_trace.events); 6789 list_add(&global_trace.list, &ftrace_trace_arrays); 6790 6791 while (trace_boot_options) { 6792 char *option; 6793 6794 option = strsep(&trace_boot_options, ","); 6795 trace_set_options(&global_trace, option); 6796 } 6797 6798 register_snapshot_cmd(); 6799 6800 return 0; 6801 6802 out_free_savedcmd: 6803 free_saved_cmdlines_buffer(savedcmd); 6804 out_free_temp_buffer: 6805 ring_buffer_free(temp_buffer); 6806 out_free_cpumask: 6807 free_cpumask_var(global_trace.tracing_cpumask); 6808 out_free_buffer_mask: 6809 free_cpumask_var(tracing_buffer_mask); 6810 out: 6811 return ret; 6812 } 6813 6814 __init static int clear_boot_tracer(void) 6815 { 6816 /* 6817 * The default tracer at boot buffer is an init section. 6818 * This function is called in lateinit. If we did not 6819 * find the boot tracer, then clear it out, to prevent 6820 * later registration from accessing the buffer that is 6821 * about to be freed. 6822 */ 6823 if (!default_bootup_tracer) 6824 return 0; 6825 6826 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n", 6827 default_bootup_tracer); 6828 default_bootup_tracer = NULL; 6829 6830 return 0; 6831 } 6832 6833 early_initcall(tracer_alloc_buffers); 6834 fs_initcall(tracer_init_debugfs); 6835 late_initcall(clear_boot_tracer); 6836