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