1 /* 2 * Infrastructure for profiling code inserted by 'gcc -pg'. 3 * 4 * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com> 5 * Copyright (C) 2004-2008 Ingo Molnar <mingo@redhat.com> 6 * 7 * Originally ported from the -rt patch by: 8 * Copyright (C) 2007 Arnaldo Carvalho de Melo <acme@redhat.com> 9 * 10 * Based on code in the latency_tracer, that is: 11 * 12 * Copyright (C) 2004-2006 Ingo Molnar 13 * Copyright (C) 2004 William Lee Irwin III 14 */ 15 16 #include <linux/stop_machine.h> 17 #include <linux/clocksource.h> 18 #include <linux/kallsyms.h> 19 #include <linux/seq_file.h> 20 #include <linux/suspend.h> 21 #include <linux/debugfs.h> 22 #include <linux/hardirq.h> 23 #include <linux/kthread.h> 24 #include <linux/uaccess.h> 25 #include <linux/ftrace.h> 26 #include <linux/sysctl.h> 27 #include <linux/slab.h> 28 #include <linux/ctype.h> 29 #include <linux/list.h> 30 #include <linux/hash.h> 31 #include <linux/rcupdate.h> 32 33 #include <trace/events/sched.h> 34 35 #include <asm/ftrace.h> 36 #include <asm/setup.h> 37 38 #include "trace_output.h" 39 #include "trace_stat.h" 40 41 #define FTRACE_WARN_ON(cond) \ 42 do { \ 43 if (WARN_ON(cond)) \ 44 ftrace_kill(); \ 45 } while (0) 46 47 #define FTRACE_WARN_ON_ONCE(cond) \ 48 do { \ 49 if (WARN_ON_ONCE(cond)) \ 50 ftrace_kill(); \ 51 } while (0) 52 53 /* hash bits for specific function selection */ 54 #define FTRACE_HASH_BITS 7 55 #define FTRACE_FUNC_HASHSIZE (1 << FTRACE_HASH_BITS) 56 57 /* ftrace_enabled is a method to turn ftrace on or off */ 58 int ftrace_enabled __read_mostly; 59 static int last_ftrace_enabled; 60 61 /* Quick disabling of function tracer. */ 62 int function_trace_stop; 63 64 /* List for set_ftrace_pid's pids. */ 65 LIST_HEAD(ftrace_pids); 66 struct ftrace_pid { 67 struct list_head list; 68 struct pid *pid; 69 }; 70 71 /* 72 * ftrace_disabled is set when an anomaly is discovered. 73 * ftrace_disabled is much stronger than ftrace_enabled. 74 */ 75 static int ftrace_disabled __read_mostly; 76 77 static DEFINE_MUTEX(ftrace_lock); 78 79 static struct ftrace_ops ftrace_list_end __read_mostly = 80 { 81 .func = ftrace_stub, 82 }; 83 84 static struct ftrace_ops *ftrace_list __read_mostly = &ftrace_list_end; 85 ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; 86 ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub; 87 ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub; 88 89 /* 90 * Traverse the ftrace_list, invoking all entries. The reason that we 91 * can use rcu_dereference_raw() is that elements removed from this list 92 * are simply leaked, so there is no need to interact with a grace-period 93 * mechanism. The rcu_dereference_raw() calls are needed to handle 94 * concurrent insertions into the ftrace_list. 95 * 96 * Silly Alpha and silly pointer-speculation compiler optimizations! 97 */ 98 static void ftrace_list_func(unsigned long ip, unsigned long parent_ip) 99 { 100 struct ftrace_ops *op = rcu_dereference_raw(ftrace_list); /*see above*/ 101 102 while (op != &ftrace_list_end) { 103 op->func(ip, parent_ip); 104 op = rcu_dereference_raw(op->next); /*see above*/ 105 }; 106 } 107 108 static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip) 109 { 110 if (!test_tsk_trace_trace(current)) 111 return; 112 113 ftrace_pid_function(ip, parent_ip); 114 } 115 116 static void set_ftrace_pid_function(ftrace_func_t func) 117 { 118 /* do not set ftrace_pid_function to itself! */ 119 if (func != ftrace_pid_func) 120 ftrace_pid_function = func; 121 } 122 123 /** 124 * clear_ftrace_function - reset the ftrace function 125 * 126 * This NULLs the ftrace function and in essence stops 127 * tracing. There may be lag 128 */ 129 void clear_ftrace_function(void) 130 { 131 ftrace_trace_function = ftrace_stub; 132 __ftrace_trace_function = ftrace_stub; 133 ftrace_pid_function = ftrace_stub; 134 } 135 136 #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 137 /* 138 * For those archs that do not test ftrace_trace_stop in their 139 * mcount call site, we need to do it from C. 140 */ 141 static void ftrace_test_stop_func(unsigned long ip, unsigned long parent_ip) 142 { 143 if (function_trace_stop) 144 return; 145 146 __ftrace_trace_function(ip, parent_ip); 147 } 148 #endif 149 150 static int __register_ftrace_function(struct ftrace_ops *ops) 151 { 152 ops->next = ftrace_list; 153 /* 154 * We are entering ops into the ftrace_list but another 155 * CPU might be walking that list. We need to make sure 156 * the ops->next pointer is valid before another CPU sees 157 * the ops pointer included into the ftrace_list. 158 */ 159 rcu_assign_pointer(ftrace_list, ops); 160 161 if (ftrace_enabled) { 162 ftrace_func_t func; 163 164 if (ops->next == &ftrace_list_end) 165 func = ops->func; 166 else 167 func = ftrace_list_func; 168 169 if (!list_empty(&ftrace_pids)) { 170 set_ftrace_pid_function(func); 171 func = ftrace_pid_func; 172 } 173 174 /* 175 * For one func, simply call it directly. 176 * For more than one func, call the chain. 177 */ 178 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 179 ftrace_trace_function = func; 180 #else 181 __ftrace_trace_function = func; 182 ftrace_trace_function = ftrace_test_stop_func; 183 #endif 184 } 185 186 return 0; 187 } 188 189 static int __unregister_ftrace_function(struct ftrace_ops *ops) 190 { 191 struct ftrace_ops **p; 192 193 /* 194 * If we are removing the last function, then simply point 195 * to the ftrace_stub. 196 */ 197 if (ftrace_list == ops && ops->next == &ftrace_list_end) { 198 ftrace_trace_function = ftrace_stub; 199 ftrace_list = &ftrace_list_end; 200 return 0; 201 } 202 203 for (p = &ftrace_list; *p != &ftrace_list_end; p = &(*p)->next) 204 if (*p == ops) 205 break; 206 207 if (*p != ops) 208 return -1; 209 210 *p = (*p)->next; 211 212 if (ftrace_enabled) { 213 /* If we only have one func left, then call that directly */ 214 if (ftrace_list->next == &ftrace_list_end) { 215 ftrace_func_t func = ftrace_list->func; 216 217 if (!list_empty(&ftrace_pids)) { 218 set_ftrace_pid_function(func); 219 func = ftrace_pid_func; 220 } 221 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 222 ftrace_trace_function = func; 223 #else 224 __ftrace_trace_function = func; 225 #endif 226 } 227 } 228 229 return 0; 230 } 231 232 static void ftrace_update_pid_func(void) 233 { 234 ftrace_func_t func; 235 236 if (ftrace_trace_function == ftrace_stub) 237 return; 238 239 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 240 func = ftrace_trace_function; 241 #else 242 func = __ftrace_trace_function; 243 #endif 244 245 if (!list_empty(&ftrace_pids)) { 246 set_ftrace_pid_function(func); 247 func = ftrace_pid_func; 248 } else { 249 if (func == ftrace_pid_func) 250 func = ftrace_pid_function; 251 } 252 253 #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 254 ftrace_trace_function = func; 255 #else 256 __ftrace_trace_function = func; 257 #endif 258 } 259 260 #ifdef CONFIG_FUNCTION_PROFILER 261 struct ftrace_profile { 262 struct hlist_node node; 263 unsigned long ip; 264 unsigned long counter; 265 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 266 unsigned long long time; 267 unsigned long long time_squared; 268 #endif 269 }; 270 271 struct ftrace_profile_page { 272 struct ftrace_profile_page *next; 273 unsigned long index; 274 struct ftrace_profile records[]; 275 }; 276 277 struct ftrace_profile_stat { 278 atomic_t disabled; 279 struct hlist_head *hash; 280 struct ftrace_profile_page *pages; 281 struct ftrace_profile_page *start; 282 struct tracer_stat stat; 283 }; 284 285 #define PROFILE_RECORDS_SIZE \ 286 (PAGE_SIZE - offsetof(struct ftrace_profile_page, records)) 287 288 #define PROFILES_PER_PAGE \ 289 (PROFILE_RECORDS_SIZE / sizeof(struct ftrace_profile)) 290 291 static int ftrace_profile_bits __read_mostly; 292 static int ftrace_profile_enabled __read_mostly; 293 294 /* ftrace_profile_lock - synchronize the enable and disable of the profiler */ 295 static DEFINE_MUTEX(ftrace_profile_lock); 296 297 static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats); 298 299 #define FTRACE_PROFILE_HASH_SIZE 1024 /* must be power of 2 */ 300 301 static void * 302 function_stat_next(void *v, int idx) 303 { 304 struct ftrace_profile *rec = v; 305 struct ftrace_profile_page *pg; 306 307 pg = (struct ftrace_profile_page *)((unsigned long)rec & PAGE_MASK); 308 309 again: 310 if (idx != 0) 311 rec++; 312 313 if ((void *)rec >= (void *)&pg->records[pg->index]) { 314 pg = pg->next; 315 if (!pg) 316 return NULL; 317 rec = &pg->records[0]; 318 if (!rec->counter) 319 goto again; 320 } 321 322 return rec; 323 } 324 325 static void *function_stat_start(struct tracer_stat *trace) 326 { 327 struct ftrace_profile_stat *stat = 328 container_of(trace, struct ftrace_profile_stat, stat); 329 330 if (!stat || !stat->start) 331 return NULL; 332 333 return function_stat_next(&stat->start->records[0], 0); 334 } 335 336 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 337 /* function graph compares on total time */ 338 static int function_stat_cmp(void *p1, void *p2) 339 { 340 struct ftrace_profile *a = p1; 341 struct ftrace_profile *b = p2; 342 343 if (a->time < b->time) 344 return -1; 345 if (a->time > b->time) 346 return 1; 347 else 348 return 0; 349 } 350 #else 351 /* not function graph compares against hits */ 352 static int function_stat_cmp(void *p1, void *p2) 353 { 354 struct ftrace_profile *a = p1; 355 struct ftrace_profile *b = p2; 356 357 if (a->counter < b->counter) 358 return -1; 359 if (a->counter > b->counter) 360 return 1; 361 else 362 return 0; 363 } 364 #endif 365 366 static int function_stat_headers(struct seq_file *m) 367 { 368 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 369 seq_printf(m, " Function " 370 "Hit Time Avg s^2\n" 371 " -------- " 372 "--- ---- --- ---\n"); 373 #else 374 seq_printf(m, " Function Hit\n" 375 " -------- ---\n"); 376 #endif 377 return 0; 378 } 379 380 static int function_stat_show(struct seq_file *m, void *v) 381 { 382 struct ftrace_profile *rec = v; 383 char str[KSYM_SYMBOL_LEN]; 384 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 385 static DEFINE_MUTEX(mutex); 386 static struct trace_seq s; 387 unsigned long long avg; 388 unsigned long long stddev; 389 #endif 390 391 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 392 seq_printf(m, " %-30.30s %10lu", str, rec->counter); 393 394 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 395 seq_printf(m, " "); 396 avg = rec->time; 397 do_div(avg, rec->counter); 398 399 /* Sample standard deviation (s^2) */ 400 if (rec->counter <= 1) 401 stddev = 0; 402 else { 403 stddev = rec->time_squared - rec->counter * avg * avg; 404 /* 405 * Divide only 1000 for ns^2 -> us^2 conversion. 406 * trace_print_graph_duration will divide 1000 again. 407 */ 408 do_div(stddev, (rec->counter - 1) * 1000); 409 } 410 411 mutex_lock(&mutex); 412 trace_seq_init(&s); 413 trace_print_graph_duration(rec->time, &s); 414 trace_seq_puts(&s, " "); 415 trace_print_graph_duration(avg, &s); 416 trace_seq_puts(&s, " "); 417 trace_print_graph_duration(stddev, &s); 418 trace_print_seq(m, &s); 419 mutex_unlock(&mutex); 420 #endif 421 seq_putc(m, '\n'); 422 423 return 0; 424 } 425 426 static void ftrace_profile_reset(struct ftrace_profile_stat *stat) 427 { 428 struct ftrace_profile_page *pg; 429 430 pg = stat->pages = stat->start; 431 432 while (pg) { 433 memset(pg->records, 0, PROFILE_RECORDS_SIZE); 434 pg->index = 0; 435 pg = pg->next; 436 } 437 438 memset(stat->hash, 0, 439 FTRACE_PROFILE_HASH_SIZE * sizeof(struct hlist_head)); 440 } 441 442 int ftrace_profile_pages_init(struct ftrace_profile_stat *stat) 443 { 444 struct ftrace_profile_page *pg; 445 int functions; 446 int pages; 447 int i; 448 449 /* If we already allocated, do nothing */ 450 if (stat->pages) 451 return 0; 452 453 stat->pages = (void *)get_zeroed_page(GFP_KERNEL); 454 if (!stat->pages) 455 return -ENOMEM; 456 457 #ifdef CONFIG_DYNAMIC_FTRACE 458 functions = ftrace_update_tot_cnt; 459 #else 460 /* 461 * We do not know the number of functions that exist because 462 * dynamic tracing is what counts them. With past experience 463 * we have around 20K functions. That should be more than enough. 464 * It is highly unlikely we will execute every function in 465 * the kernel. 466 */ 467 functions = 20000; 468 #endif 469 470 pg = stat->start = stat->pages; 471 472 pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE); 473 474 for (i = 0; i < pages; i++) { 475 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 476 if (!pg->next) 477 goto out_free; 478 pg = pg->next; 479 } 480 481 return 0; 482 483 out_free: 484 pg = stat->start; 485 while (pg) { 486 unsigned long tmp = (unsigned long)pg; 487 488 pg = pg->next; 489 free_page(tmp); 490 } 491 492 free_page((unsigned long)stat->pages); 493 stat->pages = NULL; 494 stat->start = NULL; 495 496 return -ENOMEM; 497 } 498 499 static int ftrace_profile_init_cpu(int cpu) 500 { 501 struct ftrace_profile_stat *stat; 502 int size; 503 504 stat = &per_cpu(ftrace_profile_stats, cpu); 505 506 if (stat->hash) { 507 /* If the profile is already created, simply reset it */ 508 ftrace_profile_reset(stat); 509 return 0; 510 } 511 512 /* 513 * We are profiling all functions, but usually only a few thousand 514 * functions are hit. We'll make a hash of 1024 items. 515 */ 516 size = FTRACE_PROFILE_HASH_SIZE; 517 518 stat->hash = kzalloc(sizeof(struct hlist_head) * size, GFP_KERNEL); 519 520 if (!stat->hash) 521 return -ENOMEM; 522 523 if (!ftrace_profile_bits) { 524 size--; 525 526 for (; size; size >>= 1) 527 ftrace_profile_bits++; 528 } 529 530 /* Preallocate the function profiling pages */ 531 if (ftrace_profile_pages_init(stat) < 0) { 532 kfree(stat->hash); 533 stat->hash = NULL; 534 return -ENOMEM; 535 } 536 537 return 0; 538 } 539 540 static int ftrace_profile_init(void) 541 { 542 int cpu; 543 int ret = 0; 544 545 for_each_online_cpu(cpu) { 546 ret = ftrace_profile_init_cpu(cpu); 547 if (ret) 548 break; 549 } 550 551 return ret; 552 } 553 554 /* interrupts must be disabled */ 555 static struct ftrace_profile * 556 ftrace_find_profiled_func(struct ftrace_profile_stat *stat, unsigned long ip) 557 { 558 struct ftrace_profile *rec; 559 struct hlist_head *hhd; 560 struct hlist_node *n; 561 unsigned long key; 562 563 key = hash_long(ip, ftrace_profile_bits); 564 hhd = &stat->hash[key]; 565 566 if (hlist_empty(hhd)) 567 return NULL; 568 569 hlist_for_each_entry_rcu(rec, n, hhd, node) { 570 if (rec->ip == ip) 571 return rec; 572 } 573 574 return NULL; 575 } 576 577 static void ftrace_add_profile(struct ftrace_profile_stat *stat, 578 struct ftrace_profile *rec) 579 { 580 unsigned long key; 581 582 key = hash_long(rec->ip, ftrace_profile_bits); 583 hlist_add_head_rcu(&rec->node, &stat->hash[key]); 584 } 585 586 /* 587 * The memory is already allocated, this simply finds a new record to use. 588 */ 589 static struct ftrace_profile * 590 ftrace_profile_alloc(struct ftrace_profile_stat *stat, unsigned long ip) 591 { 592 struct ftrace_profile *rec = NULL; 593 594 /* prevent recursion (from NMIs) */ 595 if (atomic_inc_return(&stat->disabled) != 1) 596 goto out; 597 598 /* 599 * Try to find the function again since an NMI 600 * could have added it 601 */ 602 rec = ftrace_find_profiled_func(stat, ip); 603 if (rec) 604 goto out; 605 606 if (stat->pages->index == PROFILES_PER_PAGE) { 607 if (!stat->pages->next) 608 goto out; 609 stat->pages = stat->pages->next; 610 } 611 612 rec = &stat->pages->records[stat->pages->index++]; 613 rec->ip = ip; 614 ftrace_add_profile(stat, rec); 615 616 out: 617 atomic_dec(&stat->disabled); 618 619 return rec; 620 } 621 622 static void 623 function_profile_call(unsigned long ip, unsigned long parent_ip) 624 { 625 struct ftrace_profile_stat *stat; 626 struct ftrace_profile *rec; 627 unsigned long flags; 628 629 if (!ftrace_profile_enabled) 630 return; 631 632 local_irq_save(flags); 633 634 stat = &__get_cpu_var(ftrace_profile_stats); 635 if (!stat->hash || !ftrace_profile_enabled) 636 goto out; 637 638 rec = ftrace_find_profiled_func(stat, ip); 639 if (!rec) { 640 rec = ftrace_profile_alloc(stat, ip); 641 if (!rec) 642 goto out; 643 } 644 645 rec->counter++; 646 out: 647 local_irq_restore(flags); 648 } 649 650 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 651 static int profile_graph_entry(struct ftrace_graph_ent *trace) 652 { 653 function_profile_call(trace->func, 0); 654 return 1; 655 } 656 657 static void profile_graph_return(struct ftrace_graph_ret *trace) 658 { 659 struct ftrace_profile_stat *stat; 660 unsigned long long calltime; 661 struct ftrace_profile *rec; 662 unsigned long flags; 663 664 local_irq_save(flags); 665 stat = &__get_cpu_var(ftrace_profile_stats); 666 if (!stat->hash || !ftrace_profile_enabled) 667 goto out; 668 669 /* If the calltime was zero'd ignore it */ 670 if (!trace->calltime) 671 goto out; 672 673 calltime = trace->rettime - trace->calltime; 674 675 if (!(trace_flags & TRACE_ITER_GRAPH_TIME)) { 676 int index; 677 678 index = trace->depth; 679 680 /* Append this call time to the parent time to subtract */ 681 if (index) 682 current->ret_stack[index - 1].subtime += calltime; 683 684 if (current->ret_stack[index].subtime < calltime) 685 calltime -= current->ret_stack[index].subtime; 686 else 687 calltime = 0; 688 } 689 690 rec = ftrace_find_profiled_func(stat, trace->func); 691 if (rec) { 692 rec->time += calltime; 693 rec->time_squared += calltime * calltime; 694 } 695 696 out: 697 local_irq_restore(flags); 698 } 699 700 static int register_ftrace_profiler(void) 701 { 702 return register_ftrace_graph(&profile_graph_return, 703 &profile_graph_entry); 704 } 705 706 static void unregister_ftrace_profiler(void) 707 { 708 unregister_ftrace_graph(); 709 } 710 #else 711 static struct ftrace_ops ftrace_profile_ops __read_mostly = 712 { 713 .func = function_profile_call, 714 }; 715 716 static int register_ftrace_profiler(void) 717 { 718 return register_ftrace_function(&ftrace_profile_ops); 719 } 720 721 static void unregister_ftrace_profiler(void) 722 { 723 unregister_ftrace_function(&ftrace_profile_ops); 724 } 725 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 726 727 static ssize_t 728 ftrace_profile_write(struct file *filp, const char __user *ubuf, 729 size_t cnt, loff_t *ppos) 730 { 731 unsigned long val; 732 char buf[64]; /* big enough to hold a number */ 733 int ret; 734 735 if (cnt >= sizeof(buf)) 736 return -EINVAL; 737 738 if (copy_from_user(&buf, ubuf, cnt)) 739 return -EFAULT; 740 741 buf[cnt] = 0; 742 743 ret = strict_strtoul(buf, 10, &val); 744 if (ret < 0) 745 return ret; 746 747 val = !!val; 748 749 mutex_lock(&ftrace_profile_lock); 750 if (ftrace_profile_enabled ^ val) { 751 if (val) { 752 ret = ftrace_profile_init(); 753 if (ret < 0) { 754 cnt = ret; 755 goto out; 756 } 757 758 ret = register_ftrace_profiler(); 759 if (ret < 0) { 760 cnt = ret; 761 goto out; 762 } 763 ftrace_profile_enabled = 1; 764 } else { 765 ftrace_profile_enabled = 0; 766 /* 767 * unregister_ftrace_profiler calls stop_machine 768 * so this acts like an synchronize_sched. 769 */ 770 unregister_ftrace_profiler(); 771 } 772 } 773 out: 774 mutex_unlock(&ftrace_profile_lock); 775 776 *ppos += cnt; 777 778 return cnt; 779 } 780 781 static ssize_t 782 ftrace_profile_read(struct file *filp, char __user *ubuf, 783 size_t cnt, loff_t *ppos) 784 { 785 char buf[64]; /* big enough to hold a number */ 786 int r; 787 788 r = sprintf(buf, "%u\n", ftrace_profile_enabled); 789 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 790 } 791 792 static const struct file_operations ftrace_profile_fops = { 793 .open = tracing_open_generic, 794 .read = ftrace_profile_read, 795 .write = ftrace_profile_write, 796 }; 797 798 /* used to initialize the real stat files */ 799 static struct tracer_stat function_stats __initdata = { 800 .name = "functions", 801 .stat_start = function_stat_start, 802 .stat_next = function_stat_next, 803 .stat_cmp = function_stat_cmp, 804 .stat_headers = function_stat_headers, 805 .stat_show = function_stat_show 806 }; 807 808 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 809 { 810 struct ftrace_profile_stat *stat; 811 struct dentry *entry; 812 char *name; 813 int ret; 814 int cpu; 815 816 for_each_possible_cpu(cpu) { 817 stat = &per_cpu(ftrace_profile_stats, cpu); 818 819 /* allocate enough for function name + cpu number */ 820 name = kmalloc(32, GFP_KERNEL); 821 if (!name) { 822 /* 823 * The files created are permanent, if something happens 824 * we still do not free memory. 825 */ 826 WARN(1, 827 "Could not allocate stat file for cpu %d\n", 828 cpu); 829 return; 830 } 831 stat->stat = function_stats; 832 snprintf(name, 32, "function%d", cpu); 833 stat->stat.name = name; 834 ret = register_stat_tracer(&stat->stat); 835 if (ret) { 836 WARN(1, 837 "Could not register function stat for cpu %d\n", 838 cpu); 839 kfree(name); 840 return; 841 } 842 } 843 844 entry = debugfs_create_file("function_profile_enabled", 0644, 845 d_tracer, NULL, &ftrace_profile_fops); 846 if (!entry) 847 pr_warning("Could not create debugfs " 848 "'function_profile_enabled' entry\n"); 849 } 850 851 #else /* CONFIG_FUNCTION_PROFILER */ 852 static __init void ftrace_profile_debugfs(struct dentry *d_tracer) 853 { 854 } 855 #endif /* CONFIG_FUNCTION_PROFILER */ 856 857 static struct pid * const ftrace_swapper_pid = &init_struct_pid; 858 859 #ifdef CONFIG_DYNAMIC_FTRACE 860 861 #ifndef CONFIG_FTRACE_MCOUNT_RECORD 862 # error Dynamic ftrace depends on MCOUNT_RECORD 863 #endif 864 865 static struct hlist_head ftrace_func_hash[FTRACE_FUNC_HASHSIZE] __read_mostly; 866 867 struct ftrace_func_probe { 868 struct hlist_node node; 869 struct ftrace_probe_ops *ops; 870 unsigned long flags; 871 unsigned long ip; 872 void *data; 873 struct rcu_head rcu; 874 }; 875 876 enum { 877 FTRACE_ENABLE_CALLS = (1 << 0), 878 FTRACE_DISABLE_CALLS = (1 << 1), 879 FTRACE_UPDATE_TRACE_FUNC = (1 << 2), 880 FTRACE_ENABLE_MCOUNT = (1 << 3), 881 FTRACE_DISABLE_MCOUNT = (1 << 4), 882 FTRACE_START_FUNC_RET = (1 << 5), 883 FTRACE_STOP_FUNC_RET = (1 << 6), 884 }; 885 886 static int ftrace_filtered; 887 888 static struct dyn_ftrace *ftrace_new_addrs; 889 890 static DEFINE_MUTEX(ftrace_regex_lock); 891 892 struct ftrace_page { 893 struct ftrace_page *next; 894 int index; 895 struct dyn_ftrace records[]; 896 }; 897 898 #define ENTRIES_PER_PAGE \ 899 ((PAGE_SIZE - sizeof(struct ftrace_page)) / sizeof(struct dyn_ftrace)) 900 901 /* estimate from running different kernels */ 902 #define NR_TO_INIT 10000 903 904 static struct ftrace_page *ftrace_pages_start; 905 static struct ftrace_page *ftrace_pages; 906 907 static struct dyn_ftrace *ftrace_free_records; 908 909 /* 910 * This is a double for. Do not use 'break' to break out of the loop, 911 * you must use a goto. 912 */ 913 #define do_for_each_ftrace_rec(pg, rec) \ 914 for (pg = ftrace_pages_start; pg; pg = pg->next) { \ 915 int _____i; \ 916 for (_____i = 0; _____i < pg->index; _____i++) { \ 917 rec = &pg->records[_____i]; 918 919 #define while_for_each_ftrace_rec() \ 920 } \ 921 } 922 923 static void ftrace_free_rec(struct dyn_ftrace *rec) 924 { 925 rec->freelist = ftrace_free_records; 926 ftrace_free_records = rec; 927 rec->flags |= FTRACE_FL_FREE; 928 } 929 930 static struct dyn_ftrace *ftrace_alloc_dyn_node(unsigned long ip) 931 { 932 struct dyn_ftrace *rec; 933 934 /* First check for freed records */ 935 if (ftrace_free_records) { 936 rec = ftrace_free_records; 937 938 if (unlikely(!(rec->flags & FTRACE_FL_FREE))) { 939 FTRACE_WARN_ON_ONCE(1); 940 ftrace_free_records = NULL; 941 return NULL; 942 } 943 944 ftrace_free_records = rec->freelist; 945 memset(rec, 0, sizeof(*rec)); 946 return rec; 947 } 948 949 if (ftrace_pages->index == ENTRIES_PER_PAGE) { 950 if (!ftrace_pages->next) { 951 /* allocate another page */ 952 ftrace_pages->next = 953 (void *)get_zeroed_page(GFP_KERNEL); 954 if (!ftrace_pages->next) 955 return NULL; 956 } 957 ftrace_pages = ftrace_pages->next; 958 } 959 960 return &ftrace_pages->records[ftrace_pages->index++]; 961 } 962 963 static struct dyn_ftrace * 964 ftrace_record_ip(unsigned long ip) 965 { 966 struct dyn_ftrace *rec; 967 968 if (ftrace_disabled) 969 return NULL; 970 971 rec = ftrace_alloc_dyn_node(ip); 972 if (!rec) 973 return NULL; 974 975 rec->ip = ip; 976 rec->newlist = ftrace_new_addrs; 977 ftrace_new_addrs = rec; 978 979 return rec; 980 } 981 982 static void print_ip_ins(const char *fmt, unsigned char *p) 983 { 984 int i; 985 986 printk(KERN_CONT "%s", fmt); 987 988 for (i = 0; i < MCOUNT_INSN_SIZE; i++) 989 printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); 990 } 991 992 static void ftrace_bug(int failed, unsigned long ip) 993 { 994 switch (failed) { 995 case -EFAULT: 996 FTRACE_WARN_ON_ONCE(1); 997 pr_info("ftrace faulted on modifying "); 998 print_ip_sym(ip); 999 break; 1000 case -EINVAL: 1001 FTRACE_WARN_ON_ONCE(1); 1002 pr_info("ftrace failed to modify "); 1003 print_ip_sym(ip); 1004 print_ip_ins(" actual: ", (unsigned char *)ip); 1005 printk(KERN_CONT "\n"); 1006 break; 1007 case -EPERM: 1008 FTRACE_WARN_ON_ONCE(1); 1009 pr_info("ftrace faulted on writing "); 1010 print_ip_sym(ip); 1011 break; 1012 default: 1013 FTRACE_WARN_ON_ONCE(1); 1014 pr_info("ftrace faulted on unknown error "); 1015 print_ip_sym(ip); 1016 } 1017 } 1018 1019 1020 /* Return 1 if the address range is reserved for ftrace */ 1021 int ftrace_text_reserved(void *start, void *end) 1022 { 1023 struct dyn_ftrace *rec; 1024 struct ftrace_page *pg; 1025 1026 do_for_each_ftrace_rec(pg, rec) { 1027 if (rec->ip <= (unsigned long)end && 1028 rec->ip + MCOUNT_INSN_SIZE > (unsigned long)start) 1029 return 1; 1030 } while_for_each_ftrace_rec(); 1031 return 0; 1032 } 1033 1034 1035 static int 1036 __ftrace_replace_code(struct dyn_ftrace *rec, int enable) 1037 { 1038 unsigned long ftrace_addr; 1039 unsigned long flag = 0UL; 1040 1041 ftrace_addr = (unsigned long)FTRACE_ADDR; 1042 1043 /* 1044 * If this record is not to be traced or we want to disable it, 1045 * then disable it. 1046 * 1047 * If we want to enable it and filtering is off, then enable it. 1048 * 1049 * If we want to enable it and filtering is on, enable it only if 1050 * it's filtered 1051 */ 1052 if (enable && !(rec->flags & FTRACE_FL_NOTRACE)) { 1053 if (!ftrace_filtered || (rec->flags & FTRACE_FL_FILTER)) 1054 flag = FTRACE_FL_ENABLED; 1055 } 1056 1057 /* If the state of this record hasn't changed, then do nothing */ 1058 if ((rec->flags & FTRACE_FL_ENABLED) == flag) 1059 return 0; 1060 1061 if (flag) { 1062 rec->flags |= FTRACE_FL_ENABLED; 1063 return ftrace_make_call(rec, ftrace_addr); 1064 } 1065 1066 rec->flags &= ~FTRACE_FL_ENABLED; 1067 return ftrace_make_nop(NULL, rec, ftrace_addr); 1068 } 1069 1070 static void ftrace_replace_code(int enable) 1071 { 1072 struct dyn_ftrace *rec; 1073 struct ftrace_page *pg; 1074 int failed; 1075 1076 do_for_each_ftrace_rec(pg, rec) { 1077 /* 1078 * Skip over free records, records that have 1079 * failed and not converted. 1080 */ 1081 if (rec->flags & FTRACE_FL_FREE || 1082 rec->flags & FTRACE_FL_FAILED || 1083 !(rec->flags & FTRACE_FL_CONVERTED)) 1084 continue; 1085 1086 failed = __ftrace_replace_code(rec, enable); 1087 if (failed) { 1088 rec->flags |= FTRACE_FL_FAILED; 1089 ftrace_bug(failed, rec->ip); 1090 /* Stop processing */ 1091 return; 1092 } 1093 } while_for_each_ftrace_rec(); 1094 } 1095 1096 static int 1097 ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) 1098 { 1099 unsigned long ip; 1100 int ret; 1101 1102 ip = rec->ip; 1103 1104 ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); 1105 if (ret) { 1106 ftrace_bug(ret, ip); 1107 rec->flags |= FTRACE_FL_FAILED; 1108 return 0; 1109 } 1110 return 1; 1111 } 1112 1113 /* 1114 * archs can override this function if they must do something 1115 * before the modifying code is performed. 1116 */ 1117 int __weak ftrace_arch_code_modify_prepare(void) 1118 { 1119 return 0; 1120 } 1121 1122 /* 1123 * archs can override this function if they must do something 1124 * after the modifying code is performed. 1125 */ 1126 int __weak ftrace_arch_code_modify_post_process(void) 1127 { 1128 return 0; 1129 } 1130 1131 static int __ftrace_modify_code(void *data) 1132 { 1133 int *command = data; 1134 1135 if (*command & FTRACE_ENABLE_CALLS) 1136 ftrace_replace_code(1); 1137 else if (*command & FTRACE_DISABLE_CALLS) 1138 ftrace_replace_code(0); 1139 1140 if (*command & FTRACE_UPDATE_TRACE_FUNC) 1141 ftrace_update_ftrace_func(ftrace_trace_function); 1142 1143 if (*command & FTRACE_START_FUNC_RET) 1144 ftrace_enable_ftrace_graph_caller(); 1145 else if (*command & FTRACE_STOP_FUNC_RET) 1146 ftrace_disable_ftrace_graph_caller(); 1147 1148 return 0; 1149 } 1150 1151 static void ftrace_run_update_code(int command) 1152 { 1153 int ret; 1154 1155 ret = ftrace_arch_code_modify_prepare(); 1156 FTRACE_WARN_ON(ret); 1157 if (ret) 1158 return; 1159 1160 stop_machine(__ftrace_modify_code, &command, NULL); 1161 1162 ret = ftrace_arch_code_modify_post_process(); 1163 FTRACE_WARN_ON(ret); 1164 } 1165 1166 static ftrace_func_t saved_ftrace_func; 1167 static int ftrace_start_up; 1168 1169 static void ftrace_startup_enable(int command) 1170 { 1171 if (saved_ftrace_func != ftrace_trace_function) { 1172 saved_ftrace_func = ftrace_trace_function; 1173 command |= FTRACE_UPDATE_TRACE_FUNC; 1174 } 1175 1176 if (!command || !ftrace_enabled) 1177 return; 1178 1179 ftrace_run_update_code(command); 1180 } 1181 1182 static void ftrace_startup(int command) 1183 { 1184 if (unlikely(ftrace_disabled)) 1185 return; 1186 1187 ftrace_start_up++; 1188 command |= FTRACE_ENABLE_CALLS; 1189 1190 ftrace_startup_enable(command); 1191 } 1192 1193 static void ftrace_shutdown(int command) 1194 { 1195 if (unlikely(ftrace_disabled)) 1196 return; 1197 1198 ftrace_start_up--; 1199 /* 1200 * Just warn in case of unbalance, no need to kill ftrace, it's not 1201 * critical but the ftrace_call callers may be never nopped again after 1202 * further ftrace uses. 1203 */ 1204 WARN_ON_ONCE(ftrace_start_up < 0); 1205 1206 if (!ftrace_start_up) 1207 command |= FTRACE_DISABLE_CALLS; 1208 1209 if (saved_ftrace_func != ftrace_trace_function) { 1210 saved_ftrace_func = ftrace_trace_function; 1211 command |= FTRACE_UPDATE_TRACE_FUNC; 1212 } 1213 1214 if (!command || !ftrace_enabled) 1215 return; 1216 1217 ftrace_run_update_code(command); 1218 } 1219 1220 static void ftrace_startup_sysctl(void) 1221 { 1222 int command = FTRACE_ENABLE_MCOUNT; 1223 1224 if (unlikely(ftrace_disabled)) 1225 return; 1226 1227 /* Force update next time */ 1228 saved_ftrace_func = NULL; 1229 /* ftrace_start_up is true if we want ftrace running */ 1230 if (ftrace_start_up) 1231 command |= FTRACE_ENABLE_CALLS; 1232 1233 ftrace_run_update_code(command); 1234 } 1235 1236 static void ftrace_shutdown_sysctl(void) 1237 { 1238 int command = FTRACE_DISABLE_MCOUNT; 1239 1240 if (unlikely(ftrace_disabled)) 1241 return; 1242 1243 /* ftrace_start_up is true if ftrace is running */ 1244 if (ftrace_start_up) 1245 command |= FTRACE_DISABLE_CALLS; 1246 1247 ftrace_run_update_code(command); 1248 } 1249 1250 static cycle_t ftrace_update_time; 1251 static unsigned long ftrace_update_cnt; 1252 unsigned long ftrace_update_tot_cnt; 1253 1254 static int ftrace_update_code(struct module *mod) 1255 { 1256 struct dyn_ftrace *p; 1257 cycle_t start, stop; 1258 1259 start = ftrace_now(raw_smp_processor_id()); 1260 ftrace_update_cnt = 0; 1261 1262 while (ftrace_new_addrs) { 1263 1264 /* If something went wrong, bail without enabling anything */ 1265 if (unlikely(ftrace_disabled)) 1266 return -1; 1267 1268 p = ftrace_new_addrs; 1269 ftrace_new_addrs = p->newlist; 1270 p->flags = 0L; 1271 1272 /* 1273 * Do the initial record convertion from mcount jump 1274 * to the NOP instructions. 1275 */ 1276 if (!ftrace_code_disable(mod, p)) { 1277 ftrace_free_rec(p); 1278 continue; 1279 } 1280 1281 p->flags |= FTRACE_FL_CONVERTED; 1282 ftrace_update_cnt++; 1283 1284 /* 1285 * If the tracing is enabled, go ahead and enable the record. 1286 * 1287 * The reason not to enable the record immediatelly is the 1288 * inherent check of ftrace_make_nop/ftrace_make_call for 1289 * correct previous instructions. Making first the NOP 1290 * conversion puts the module to the correct state, thus 1291 * passing the ftrace_make_call check. 1292 */ 1293 if (ftrace_start_up) { 1294 int failed = __ftrace_replace_code(p, 1); 1295 if (failed) { 1296 ftrace_bug(failed, p->ip); 1297 ftrace_free_rec(p); 1298 } 1299 } 1300 } 1301 1302 stop = ftrace_now(raw_smp_processor_id()); 1303 ftrace_update_time = stop - start; 1304 ftrace_update_tot_cnt += ftrace_update_cnt; 1305 1306 return 0; 1307 } 1308 1309 static int __init ftrace_dyn_table_alloc(unsigned long num_to_init) 1310 { 1311 struct ftrace_page *pg; 1312 int cnt; 1313 int i; 1314 1315 /* allocate a few pages */ 1316 ftrace_pages_start = (void *)get_zeroed_page(GFP_KERNEL); 1317 if (!ftrace_pages_start) 1318 return -1; 1319 1320 /* 1321 * Allocate a few more pages. 1322 * 1323 * TODO: have some parser search vmlinux before 1324 * final linking to find all calls to ftrace. 1325 * Then we can: 1326 * a) know how many pages to allocate. 1327 * and/or 1328 * b) set up the table then. 1329 * 1330 * The dynamic code is still necessary for 1331 * modules. 1332 */ 1333 1334 pg = ftrace_pages = ftrace_pages_start; 1335 1336 cnt = num_to_init / ENTRIES_PER_PAGE; 1337 pr_info("ftrace: allocating %ld entries in %d pages\n", 1338 num_to_init, cnt + 1); 1339 1340 for (i = 0; i < cnt; i++) { 1341 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 1342 1343 /* If we fail, we'll try later anyway */ 1344 if (!pg->next) 1345 break; 1346 1347 pg = pg->next; 1348 } 1349 1350 return 0; 1351 } 1352 1353 enum { 1354 FTRACE_ITER_FILTER = (1 << 0), 1355 FTRACE_ITER_NOTRACE = (1 << 1), 1356 FTRACE_ITER_FAILURES = (1 << 2), 1357 FTRACE_ITER_PRINTALL = (1 << 3), 1358 FTRACE_ITER_HASH = (1 << 4), 1359 }; 1360 1361 #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ 1362 1363 struct ftrace_iterator { 1364 struct ftrace_page *pg; 1365 int hidx; 1366 int idx; 1367 unsigned flags; 1368 struct trace_parser parser; 1369 }; 1370 1371 static void * 1372 t_hash_next(struct seq_file *m, void *v, loff_t *pos) 1373 { 1374 struct ftrace_iterator *iter = m->private; 1375 struct hlist_node *hnd = v; 1376 struct hlist_head *hhd; 1377 1378 WARN_ON(!(iter->flags & FTRACE_ITER_HASH)); 1379 1380 (*pos)++; 1381 1382 retry: 1383 if (iter->hidx >= FTRACE_FUNC_HASHSIZE) 1384 return NULL; 1385 1386 hhd = &ftrace_func_hash[iter->hidx]; 1387 1388 if (hlist_empty(hhd)) { 1389 iter->hidx++; 1390 hnd = NULL; 1391 goto retry; 1392 } 1393 1394 if (!hnd) 1395 hnd = hhd->first; 1396 else { 1397 hnd = hnd->next; 1398 if (!hnd) { 1399 iter->hidx++; 1400 goto retry; 1401 } 1402 } 1403 1404 return hnd; 1405 } 1406 1407 static void *t_hash_start(struct seq_file *m, loff_t *pos) 1408 { 1409 struct ftrace_iterator *iter = m->private; 1410 void *p = NULL; 1411 loff_t l; 1412 1413 if (!(iter->flags & FTRACE_ITER_HASH)) 1414 *pos = 0; 1415 1416 iter->flags |= FTRACE_ITER_HASH; 1417 1418 iter->hidx = 0; 1419 for (l = 0; l <= *pos; ) { 1420 p = t_hash_next(m, p, &l); 1421 if (!p) 1422 break; 1423 } 1424 return p; 1425 } 1426 1427 static int t_hash_show(struct seq_file *m, void *v) 1428 { 1429 struct ftrace_func_probe *rec; 1430 struct hlist_node *hnd = v; 1431 1432 rec = hlist_entry(hnd, struct ftrace_func_probe, node); 1433 1434 if (rec->ops->print) 1435 return rec->ops->print(m, rec->ip, rec->ops, rec->data); 1436 1437 seq_printf(m, "%ps:%ps", (void *)rec->ip, (void *)rec->ops->func); 1438 1439 if (rec->data) 1440 seq_printf(m, ":%p", rec->data); 1441 seq_putc(m, '\n'); 1442 1443 return 0; 1444 } 1445 1446 static void * 1447 t_next(struct seq_file *m, void *v, loff_t *pos) 1448 { 1449 struct ftrace_iterator *iter = m->private; 1450 struct dyn_ftrace *rec = NULL; 1451 1452 if (iter->flags & FTRACE_ITER_HASH) 1453 return t_hash_next(m, v, pos); 1454 1455 (*pos)++; 1456 1457 if (iter->flags & FTRACE_ITER_PRINTALL) 1458 return NULL; 1459 1460 retry: 1461 if (iter->idx >= iter->pg->index) { 1462 if (iter->pg->next) { 1463 iter->pg = iter->pg->next; 1464 iter->idx = 0; 1465 goto retry; 1466 } 1467 } else { 1468 rec = &iter->pg->records[iter->idx++]; 1469 if ((rec->flags & FTRACE_FL_FREE) || 1470 1471 (!(iter->flags & FTRACE_ITER_FAILURES) && 1472 (rec->flags & FTRACE_FL_FAILED)) || 1473 1474 ((iter->flags & FTRACE_ITER_FAILURES) && 1475 !(rec->flags & FTRACE_FL_FAILED)) || 1476 1477 ((iter->flags & FTRACE_ITER_FILTER) && 1478 !(rec->flags & FTRACE_FL_FILTER)) || 1479 1480 ((iter->flags & FTRACE_ITER_NOTRACE) && 1481 !(rec->flags & FTRACE_FL_NOTRACE))) { 1482 rec = NULL; 1483 goto retry; 1484 } 1485 } 1486 1487 return rec; 1488 } 1489 1490 static void *t_start(struct seq_file *m, loff_t *pos) 1491 { 1492 struct ftrace_iterator *iter = m->private; 1493 void *p = NULL; 1494 loff_t l; 1495 1496 mutex_lock(&ftrace_lock); 1497 /* 1498 * For set_ftrace_filter reading, if we have the filter 1499 * off, we can short cut and just print out that all 1500 * functions are enabled. 1501 */ 1502 if (iter->flags & FTRACE_ITER_FILTER && !ftrace_filtered) { 1503 if (*pos > 0) 1504 return t_hash_start(m, pos); 1505 iter->flags |= FTRACE_ITER_PRINTALL; 1506 return iter; 1507 } 1508 1509 if (iter->flags & FTRACE_ITER_HASH) 1510 return t_hash_start(m, pos); 1511 1512 iter->pg = ftrace_pages_start; 1513 iter->idx = 0; 1514 for (l = 0; l <= *pos; ) { 1515 p = t_next(m, p, &l); 1516 if (!p) 1517 break; 1518 } 1519 1520 if (!p && iter->flags & FTRACE_ITER_FILTER) 1521 return t_hash_start(m, pos); 1522 1523 return p; 1524 } 1525 1526 static void t_stop(struct seq_file *m, void *p) 1527 { 1528 mutex_unlock(&ftrace_lock); 1529 } 1530 1531 static int t_show(struct seq_file *m, void *v) 1532 { 1533 struct ftrace_iterator *iter = m->private; 1534 struct dyn_ftrace *rec = v; 1535 1536 if (iter->flags & FTRACE_ITER_HASH) 1537 return t_hash_show(m, v); 1538 1539 if (iter->flags & FTRACE_ITER_PRINTALL) { 1540 seq_printf(m, "#### all functions enabled ####\n"); 1541 return 0; 1542 } 1543 1544 if (!rec) 1545 return 0; 1546 1547 seq_printf(m, "%ps\n", (void *)rec->ip); 1548 1549 return 0; 1550 } 1551 1552 static const struct seq_operations show_ftrace_seq_ops = { 1553 .start = t_start, 1554 .next = t_next, 1555 .stop = t_stop, 1556 .show = t_show, 1557 }; 1558 1559 static int 1560 ftrace_avail_open(struct inode *inode, struct file *file) 1561 { 1562 struct ftrace_iterator *iter; 1563 int ret; 1564 1565 if (unlikely(ftrace_disabled)) 1566 return -ENODEV; 1567 1568 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 1569 if (!iter) 1570 return -ENOMEM; 1571 1572 iter->pg = ftrace_pages_start; 1573 1574 ret = seq_open(file, &show_ftrace_seq_ops); 1575 if (!ret) { 1576 struct seq_file *m = file->private_data; 1577 1578 m->private = iter; 1579 } else { 1580 kfree(iter); 1581 } 1582 1583 return ret; 1584 } 1585 1586 static int 1587 ftrace_failures_open(struct inode *inode, struct file *file) 1588 { 1589 int ret; 1590 struct seq_file *m; 1591 struct ftrace_iterator *iter; 1592 1593 ret = ftrace_avail_open(inode, file); 1594 if (!ret) { 1595 m = (struct seq_file *)file->private_data; 1596 iter = (struct ftrace_iterator *)m->private; 1597 iter->flags = FTRACE_ITER_FAILURES; 1598 } 1599 1600 return ret; 1601 } 1602 1603 1604 static void ftrace_filter_reset(int enable) 1605 { 1606 struct ftrace_page *pg; 1607 struct dyn_ftrace *rec; 1608 unsigned long type = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1609 1610 mutex_lock(&ftrace_lock); 1611 if (enable) 1612 ftrace_filtered = 0; 1613 do_for_each_ftrace_rec(pg, rec) { 1614 if (rec->flags & FTRACE_FL_FAILED) 1615 continue; 1616 rec->flags &= ~type; 1617 } while_for_each_ftrace_rec(); 1618 mutex_unlock(&ftrace_lock); 1619 } 1620 1621 static int 1622 ftrace_regex_open(struct inode *inode, struct file *file, int enable) 1623 { 1624 struct ftrace_iterator *iter; 1625 int ret = 0; 1626 1627 if (unlikely(ftrace_disabled)) 1628 return -ENODEV; 1629 1630 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 1631 if (!iter) 1632 return -ENOMEM; 1633 1634 if (trace_parser_get_init(&iter->parser, FTRACE_BUFF_MAX)) { 1635 kfree(iter); 1636 return -ENOMEM; 1637 } 1638 1639 mutex_lock(&ftrace_regex_lock); 1640 if ((file->f_mode & FMODE_WRITE) && 1641 (file->f_flags & O_TRUNC)) 1642 ftrace_filter_reset(enable); 1643 1644 if (file->f_mode & FMODE_READ) { 1645 iter->pg = ftrace_pages_start; 1646 iter->flags = enable ? FTRACE_ITER_FILTER : 1647 FTRACE_ITER_NOTRACE; 1648 1649 ret = seq_open(file, &show_ftrace_seq_ops); 1650 if (!ret) { 1651 struct seq_file *m = file->private_data; 1652 m->private = iter; 1653 } else { 1654 trace_parser_put(&iter->parser); 1655 kfree(iter); 1656 } 1657 } else 1658 file->private_data = iter; 1659 mutex_unlock(&ftrace_regex_lock); 1660 1661 return ret; 1662 } 1663 1664 static int 1665 ftrace_filter_open(struct inode *inode, struct file *file) 1666 { 1667 return ftrace_regex_open(inode, file, 1); 1668 } 1669 1670 static int 1671 ftrace_notrace_open(struct inode *inode, struct file *file) 1672 { 1673 return ftrace_regex_open(inode, file, 0); 1674 } 1675 1676 static loff_t 1677 ftrace_regex_lseek(struct file *file, loff_t offset, int origin) 1678 { 1679 loff_t ret; 1680 1681 if (file->f_mode & FMODE_READ) 1682 ret = seq_lseek(file, offset, origin); 1683 else 1684 file->f_pos = ret = 1; 1685 1686 return ret; 1687 } 1688 1689 static int ftrace_match(char *str, char *regex, int len, int type) 1690 { 1691 int matched = 0; 1692 int slen; 1693 1694 switch (type) { 1695 case MATCH_FULL: 1696 if (strcmp(str, regex) == 0) 1697 matched = 1; 1698 break; 1699 case MATCH_FRONT_ONLY: 1700 if (strncmp(str, regex, len) == 0) 1701 matched = 1; 1702 break; 1703 case MATCH_MIDDLE_ONLY: 1704 if (strstr(str, regex)) 1705 matched = 1; 1706 break; 1707 case MATCH_END_ONLY: 1708 slen = strlen(str); 1709 if (slen >= len && memcmp(str + slen - len, regex, len) == 0) 1710 matched = 1; 1711 break; 1712 } 1713 1714 return matched; 1715 } 1716 1717 static int 1718 ftrace_match_record(struct dyn_ftrace *rec, char *regex, int len, int type) 1719 { 1720 char str[KSYM_SYMBOL_LEN]; 1721 1722 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 1723 return ftrace_match(str, regex, len, type); 1724 } 1725 1726 static int ftrace_match_records(char *buff, int len, int enable) 1727 { 1728 unsigned int search_len; 1729 struct ftrace_page *pg; 1730 struct dyn_ftrace *rec; 1731 unsigned long flag; 1732 char *search; 1733 int type; 1734 int not; 1735 int found = 0; 1736 1737 flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1738 type = filter_parse_regex(buff, len, &search, ¬); 1739 1740 search_len = strlen(search); 1741 1742 mutex_lock(&ftrace_lock); 1743 do_for_each_ftrace_rec(pg, rec) { 1744 1745 if (rec->flags & FTRACE_FL_FAILED) 1746 continue; 1747 1748 if (ftrace_match_record(rec, search, search_len, type)) { 1749 if (not) 1750 rec->flags &= ~flag; 1751 else 1752 rec->flags |= flag; 1753 found = 1; 1754 } 1755 /* 1756 * Only enable filtering if we have a function that 1757 * is filtered on. 1758 */ 1759 if (enable && (rec->flags & FTRACE_FL_FILTER)) 1760 ftrace_filtered = 1; 1761 } while_for_each_ftrace_rec(); 1762 mutex_unlock(&ftrace_lock); 1763 1764 return found; 1765 } 1766 1767 static int 1768 ftrace_match_module_record(struct dyn_ftrace *rec, char *mod, 1769 char *regex, int len, int type) 1770 { 1771 char str[KSYM_SYMBOL_LEN]; 1772 char *modname; 1773 1774 kallsyms_lookup(rec->ip, NULL, NULL, &modname, str); 1775 1776 if (!modname || strcmp(modname, mod)) 1777 return 0; 1778 1779 /* blank search means to match all funcs in the mod */ 1780 if (len) 1781 return ftrace_match(str, regex, len, type); 1782 else 1783 return 1; 1784 } 1785 1786 static int ftrace_match_module_records(char *buff, char *mod, int enable) 1787 { 1788 unsigned search_len = 0; 1789 struct ftrace_page *pg; 1790 struct dyn_ftrace *rec; 1791 int type = MATCH_FULL; 1792 char *search = buff; 1793 unsigned long flag; 1794 int not = 0; 1795 int found = 0; 1796 1797 flag = enable ? FTRACE_FL_FILTER : FTRACE_FL_NOTRACE; 1798 1799 /* blank or '*' mean the same */ 1800 if (strcmp(buff, "*") == 0) 1801 buff[0] = 0; 1802 1803 /* handle the case of 'dont filter this module' */ 1804 if (strcmp(buff, "!") == 0 || strcmp(buff, "!*") == 0) { 1805 buff[0] = 0; 1806 not = 1; 1807 } 1808 1809 if (strlen(buff)) { 1810 type = filter_parse_regex(buff, strlen(buff), &search, ¬); 1811 search_len = strlen(search); 1812 } 1813 1814 mutex_lock(&ftrace_lock); 1815 do_for_each_ftrace_rec(pg, rec) { 1816 1817 if (rec->flags & FTRACE_FL_FAILED) 1818 continue; 1819 1820 if (ftrace_match_module_record(rec, mod, 1821 search, search_len, type)) { 1822 if (not) 1823 rec->flags &= ~flag; 1824 else 1825 rec->flags |= flag; 1826 found = 1; 1827 } 1828 if (enable && (rec->flags & FTRACE_FL_FILTER)) 1829 ftrace_filtered = 1; 1830 1831 } while_for_each_ftrace_rec(); 1832 mutex_unlock(&ftrace_lock); 1833 1834 return found; 1835 } 1836 1837 /* 1838 * We register the module command as a template to show others how 1839 * to register the a command as well. 1840 */ 1841 1842 static int 1843 ftrace_mod_callback(char *func, char *cmd, char *param, int enable) 1844 { 1845 char *mod; 1846 1847 /* 1848 * cmd == 'mod' because we only registered this func 1849 * for the 'mod' ftrace_func_command. 1850 * But if you register one func with multiple commands, 1851 * you can tell which command was used by the cmd 1852 * parameter. 1853 */ 1854 1855 /* we must have a module name */ 1856 if (!param) 1857 return -EINVAL; 1858 1859 mod = strsep(¶m, ":"); 1860 if (!strlen(mod)) 1861 return -EINVAL; 1862 1863 if (ftrace_match_module_records(func, mod, enable)) 1864 return 0; 1865 return -EINVAL; 1866 } 1867 1868 static struct ftrace_func_command ftrace_mod_cmd = { 1869 .name = "mod", 1870 .func = ftrace_mod_callback, 1871 }; 1872 1873 static int __init ftrace_mod_cmd_init(void) 1874 { 1875 return register_ftrace_command(&ftrace_mod_cmd); 1876 } 1877 device_initcall(ftrace_mod_cmd_init); 1878 1879 static void 1880 function_trace_probe_call(unsigned long ip, unsigned long parent_ip) 1881 { 1882 struct ftrace_func_probe *entry; 1883 struct hlist_head *hhd; 1884 struct hlist_node *n; 1885 unsigned long key; 1886 1887 key = hash_long(ip, FTRACE_HASH_BITS); 1888 1889 hhd = &ftrace_func_hash[key]; 1890 1891 if (hlist_empty(hhd)) 1892 return; 1893 1894 /* 1895 * Disable preemption for these calls to prevent a RCU grace 1896 * period. This syncs the hash iteration and freeing of items 1897 * on the hash. rcu_read_lock is too dangerous here. 1898 */ 1899 preempt_disable_notrace(); 1900 hlist_for_each_entry_rcu(entry, n, hhd, node) { 1901 if (entry->ip == ip) 1902 entry->ops->func(ip, parent_ip, &entry->data); 1903 } 1904 preempt_enable_notrace(); 1905 } 1906 1907 static struct ftrace_ops trace_probe_ops __read_mostly = 1908 { 1909 .func = function_trace_probe_call, 1910 }; 1911 1912 static int ftrace_probe_registered; 1913 1914 static void __enable_ftrace_function_probe(void) 1915 { 1916 int i; 1917 1918 if (ftrace_probe_registered) 1919 return; 1920 1921 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1922 struct hlist_head *hhd = &ftrace_func_hash[i]; 1923 if (hhd->first) 1924 break; 1925 } 1926 /* Nothing registered? */ 1927 if (i == FTRACE_FUNC_HASHSIZE) 1928 return; 1929 1930 __register_ftrace_function(&trace_probe_ops); 1931 ftrace_startup(0); 1932 ftrace_probe_registered = 1; 1933 } 1934 1935 static void __disable_ftrace_function_probe(void) 1936 { 1937 int i; 1938 1939 if (!ftrace_probe_registered) 1940 return; 1941 1942 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1943 struct hlist_head *hhd = &ftrace_func_hash[i]; 1944 if (hhd->first) 1945 return; 1946 } 1947 1948 /* no more funcs left */ 1949 __unregister_ftrace_function(&trace_probe_ops); 1950 ftrace_shutdown(0); 1951 ftrace_probe_registered = 0; 1952 } 1953 1954 1955 static void ftrace_free_entry_rcu(struct rcu_head *rhp) 1956 { 1957 struct ftrace_func_probe *entry = 1958 container_of(rhp, struct ftrace_func_probe, rcu); 1959 1960 if (entry->ops->free) 1961 entry->ops->free(&entry->data); 1962 kfree(entry); 1963 } 1964 1965 1966 int 1967 register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 1968 void *data) 1969 { 1970 struct ftrace_func_probe *entry; 1971 struct ftrace_page *pg; 1972 struct dyn_ftrace *rec; 1973 int type, len, not; 1974 unsigned long key; 1975 int count = 0; 1976 char *search; 1977 1978 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 1979 len = strlen(search); 1980 1981 /* we do not support '!' for function probes */ 1982 if (WARN_ON(not)) 1983 return -EINVAL; 1984 1985 mutex_lock(&ftrace_lock); 1986 do_for_each_ftrace_rec(pg, rec) { 1987 1988 if (rec->flags & FTRACE_FL_FAILED) 1989 continue; 1990 1991 if (!ftrace_match_record(rec, search, len, type)) 1992 continue; 1993 1994 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 1995 if (!entry) { 1996 /* If we did not process any, then return error */ 1997 if (!count) 1998 count = -ENOMEM; 1999 goto out_unlock; 2000 } 2001 2002 count++; 2003 2004 entry->data = data; 2005 2006 /* 2007 * The caller might want to do something special 2008 * for each function we find. We call the callback 2009 * to give the caller an opportunity to do so. 2010 */ 2011 if (ops->callback) { 2012 if (ops->callback(rec->ip, &entry->data) < 0) { 2013 /* caller does not like this func */ 2014 kfree(entry); 2015 continue; 2016 } 2017 } 2018 2019 entry->ops = ops; 2020 entry->ip = rec->ip; 2021 2022 key = hash_long(entry->ip, FTRACE_HASH_BITS); 2023 hlist_add_head_rcu(&entry->node, &ftrace_func_hash[key]); 2024 2025 } while_for_each_ftrace_rec(); 2026 __enable_ftrace_function_probe(); 2027 2028 out_unlock: 2029 mutex_unlock(&ftrace_lock); 2030 2031 return count; 2032 } 2033 2034 enum { 2035 PROBE_TEST_FUNC = 1, 2036 PROBE_TEST_DATA = 2 2037 }; 2038 2039 static void 2040 __unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2041 void *data, int flags) 2042 { 2043 struct ftrace_func_probe *entry; 2044 struct hlist_node *n, *tmp; 2045 char str[KSYM_SYMBOL_LEN]; 2046 int type = MATCH_FULL; 2047 int i, len = 0; 2048 char *search; 2049 2050 if (glob && (strcmp(glob, "*") == 0 || !strlen(glob))) 2051 glob = NULL; 2052 else if (glob) { 2053 int not; 2054 2055 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 2056 len = strlen(search); 2057 2058 /* we do not support '!' for function probes */ 2059 if (WARN_ON(not)) 2060 return; 2061 } 2062 2063 mutex_lock(&ftrace_lock); 2064 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2065 struct hlist_head *hhd = &ftrace_func_hash[i]; 2066 2067 hlist_for_each_entry_safe(entry, n, tmp, hhd, node) { 2068 2069 /* break up if statements for readability */ 2070 if ((flags & PROBE_TEST_FUNC) && entry->ops != ops) 2071 continue; 2072 2073 if ((flags & PROBE_TEST_DATA) && entry->data != data) 2074 continue; 2075 2076 /* do this last, since it is the most expensive */ 2077 if (glob) { 2078 kallsyms_lookup(entry->ip, NULL, NULL, 2079 NULL, str); 2080 if (!ftrace_match(str, glob, len, type)) 2081 continue; 2082 } 2083 2084 hlist_del(&entry->node); 2085 call_rcu(&entry->rcu, ftrace_free_entry_rcu); 2086 } 2087 } 2088 __disable_ftrace_function_probe(); 2089 mutex_unlock(&ftrace_lock); 2090 } 2091 2092 void 2093 unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2094 void *data) 2095 { 2096 __unregister_ftrace_function_probe(glob, ops, data, 2097 PROBE_TEST_FUNC | PROBE_TEST_DATA); 2098 } 2099 2100 void 2101 unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops) 2102 { 2103 __unregister_ftrace_function_probe(glob, ops, NULL, PROBE_TEST_FUNC); 2104 } 2105 2106 void unregister_ftrace_function_probe_all(char *glob) 2107 { 2108 __unregister_ftrace_function_probe(glob, NULL, NULL, 0); 2109 } 2110 2111 static LIST_HEAD(ftrace_commands); 2112 static DEFINE_MUTEX(ftrace_cmd_mutex); 2113 2114 int register_ftrace_command(struct ftrace_func_command *cmd) 2115 { 2116 struct ftrace_func_command *p; 2117 int ret = 0; 2118 2119 mutex_lock(&ftrace_cmd_mutex); 2120 list_for_each_entry(p, &ftrace_commands, list) { 2121 if (strcmp(cmd->name, p->name) == 0) { 2122 ret = -EBUSY; 2123 goto out_unlock; 2124 } 2125 } 2126 list_add(&cmd->list, &ftrace_commands); 2127 out_unlock: 2128 mutex_unlock(&ftrace_cmd_mutex); 2129 2130 return ret; 2131 } 2132 2133 int unregister_ftrace_command(struct ftrace_func_command *cmd) 2134 { 2135 struct ftrace_func_command *p, *n; 2136 int ret = -ENODEV; 2137 2138 mutex_lock(&ftrace_cmd_mutex); 2139 list_for_each_entry_safe(p, n, &ftrace_commands, list) { 2140 if (strcmp(cmd->name, p->name) == 0) { 2141 ret = 0; 2142 list_del_init(&p->list); 2143 goto out_unlock; 2144 } 2145 } 2146 out_unlock: 2147 mutex_unlock(&ftrace_cmd_mutex); 2148 2149 return ret; 2150 } 2151 2152 static int ftrace_process_regex(char *buff, int len, int enable) 2153 { 2154 char *func, *command, *next = buff; 2155 struct ftrace_func_command *p; 2156 int ret = -EINVAL; 2157 2158 func = strsep(&next, ":"); 2159 2160 if (!next) { 2161 if (ftrace_match_records(func, len, enable)) 2162 return 0; 2163 return ret; 2164 } 2165 2166 /* command found */ 2167 2168 command = strsep(&next, ":"); 2169 2170 mutex_lock(&ftrace_cmd_mutex); 2171 list_for_each_entry(p, &ftrace_commands, list) { 2172 if (strcmp(p->name, command) == 0) { 2173 ret = p->func(func, command, next, enable); 2174 goto out_unlock; 2175 } 2176 } 2177 out_unlock: 2178 mutex_unlock(&ftrace_cmd_mutex); 2179 2180 return ret; 2181 } 2182 2183 static ssize_t 2184 ftrace_regex_write(struct file *file, const char __user *ubuf, 2185 size_t cnt, loff_t *ppos, int enable) 2186 { 2187 struct ftrace_iterator *iter; 2188 struct trace_parser *parser; 2189 ssize_t ret, read; 2190 2191 if (!cnt) 2192 return 0; 2193 2194 mutex_lock(&ftrace_regex_lock); 2195 2196 if (file->f_mode & FMODE_READ) { 2197 struct seq_file *m = file->private_data; 2198 iter = m->private; 2199 } else 2200 iter = file->private_data; 2201 2202 parser = &iter->parser; 2203 read = trace_get_user(parser, ubuf, cnt, ppos); 2204 2205 if (read >= 0 && trace_parser_loaded(parser) && 2206 !trace_parser_cont(parser)) { 2207 ret = ftrace_process_regex(parser->buffer, 2208 parser->idx, enable); 2209 trace_parser_clear(parser); 2210 if (ret) 2211 goto out_unlock; 2212 } 2213 2214 ret = read; 2215 out_unlock: 2216 mutex_unlock(&ftrace_regex_lock); 2217 2218 return ret; 2219 } 2220 2221 static ssize_t 2222 ftrace_filter_write(struct file *file, const char __user *ubuf, 2223 size_t cnt, loff_t *ppos) 2224 { 2225 return ftrace_regex_write(file, ubuf, cnt, ppos, 1); 2226 } 2227 2228 static ssize_t 2229 ftrace_notrace_write(struct file *file, const char __user *ubuf, 2230 size_t cnt, loff_t *ppos) 2231 { 2232 return ftrace_regex_write(file, ubuf, cnt, ppos, 0); 2233 } 2234 2235 static void 2236 ftrace_set_regex(unsigned char *buf, int len, int reset, int enable) 2237 { 2238 if (unlikely(ftrace_disabled)) 2239 return; 2240 2241 mutex_lock(&ftrace_regex_lock); 2242 if (reset) 2243 ftrace_filter_reset(enable); 2244 if (buf) 2245 ftrace_match_records(buf, len, enable); 2246 mutex_unlock(&ftrace_regex_lock); 2247 } 2248 2249 /** 2250 * ftrace_set_filter - set a function to filter on in ftrace 2251 * @buf - the string that holds the function filter text. 2252 * @len - the length of the string. 2253 * @reset - non zero to reset all filters before applying this filter. 2254 * 2255 * Filters denote which functions should be enabled when tracing is enabled. 2256 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 2257 */ 2258 void ftrace_set_filter(unsigned char *buf, int len, int reset) 2259 { 2260 ftrace_set_regex(buf, len, reset, 1); 2261 } 2262 2263 /** 2264 * ftrace_set_notrace - set a function to not trace in ftrace 2265 * @buf - the string that holds the function notrace text. 2266 * @len - the length of the string. 2267 * @reset - non zero to reset all filters before applying this filter. 2268 * 2269 * Notrace Filters denote which functions should not be enabled when tracing 2270 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 2271 * for tracing. 2272 */ 2273 void ftrace_set_notrace(unsigned char *buf, int len, int reset) 2274 { 2275 ftrace_set_regex(buf, len, reset, 0); 2276 } 2277 2278 /* 2279 * command line interface to allow users to set filters on boot up. 2280 */ 2281 #define FTRACE_FILTER_SIZE COMMAND_LINE_SIZE 2282 static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 2283 static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata; 2284 2285 static int __init set_ftrace_notrace(char *str) 2286 { 2287 strncpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE); 2288 return 1; 2289 } 2290 __setup("ftrace_notrace=", set_ftrace_notrace); 2291 2292 static int __init set_ftrace_filter(char *str) 2293 { 2294 strncpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE); 2295 return 1; 2296 } 2297 __setup("ftrace_filter=", set_ftrace_filter); 2298 2299 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2300 static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata; 2301 static int ftrace_set_func(unsigned long *array, int *idx, char *buffer); 2302 2303 static int __init set_graph_function(char *str) 2304 { 2305 strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE); 2306 return 1; 2307 } 2308 __setup("ftrace_graph_filter=", set_graph_function); 2309 2310 static void __init set_ftrace_early_graph(char *buf) 2311 { 2312 int ret; 2313 char *func; 2314 2315 while (buf) { 2316 func = strsep(&buf, ","); 2317 /* we allow only one expression at a time */ 2318 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 2319 func); 2320 if (ret) 2321 printk(KERN_DEBUG "ftrace: function %s not " 2322 "traceable\n", func); 2323 } 2324 } 2325 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2326 2327 static void __init set_ftrace_early_filter(char *buf, int enable) 2328 { 2329 char *func; 2330 2331 while (buf) { 2332 func = strsep(&buf, ","); 2333 ftrace_set_regex(func, strlen(func), 0, enable); 2334 } 2335 } 2336 2337 static void __init set_ftrace_early_filters(void) 2338 { 2339 if (ftrace_filter_buf[0]) 2340 set_ftrace_early_filter(ftrace_filter_buf, 1); 2341 if (ftrace_notrace_buf[0]) 2342 set_ftrace_early_filter(ftrace_notrace_buf, 0); 2343 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2344 if (ftrace_graph_buf[0]) 2345 set_ftrace_early_graph(ftrace_graph_buf); 2346 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2347 } 2348 2349 static int 2350 ftrace_regex_release(struct inode *inode, struct file *file, int enable) 2351 { 2352 struct seq_file *m = (struct seq_file *)file->private_data; 2353 struct ftrace_iterator *iter; 2354 struct trace_parser *parser; 2355 2356 mutex_lock(&ftrace_regex_lock); 2357 if (file->f_mode & FMODE_READ) { 2358 iter = m->private; 2359 2360 seq_release(inode, file); 2361 } else 2362 iter = file->private_data; 2363 2364 parser = &iter->parser; 2365 if (trace_parser_loaded(parser)) { 2366 parser->buffer[parser->idx] = 0; 2367 ftrace_match_records(parser->buffer, parser->idx, enable); 2368 } 2369 2370 mutex_lock(&ftrace_lock); 2371 if (ftrace_start_up && ftrace_enabled) 2372 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 2373 mutex_unlock(&ftrace_lock); 2374 2375 trace_parser_put(parser); 2376 kfree(iter); 2377 2378 mutex_unlock(&ftrace_regex_lock); 2379 return 0; 2380 } 2381 2382 static int 2383 ftrace_filter_release(struct inode *inode, struct file *file) 2384 { 2385 return ftrace_regex_release(inode, file, 1); 2386 } 2387 2388 static int 2389 ftrace_notrace_release(struct inode *inode, struct file *file) 2390 { 2391 return ftrace_regex_release(inode, file, 0); 2392 } 2393 2394 static const struct file_operations ftrace_avail_fops = { 2395 .open = ftrace_avail_open, 2396 .read = seq_read, 2397 .llseek = seq_lseek, 2398 .release = seq_release_private, 2399 }; 2400 2401 static const struct file_operations ftrace_failures_fops = { 2402 .open = ftrace_failures_open, 2403 .read = seq_read, 2404 .llseek = seq_lseek, 2405 .release = seq_release_private, 2406 }; 2407 2408 static const struct file_operations ftrace_filter_fops = { 2409 .open = ftrace_filter_open, 2410 .read = seq_read, 2411 .write = ftrace_filter_write, 2412 .llseek = ftrace_regex_lseek, 2413 .release = ftrace_filter_release, 2414 }; 2415 2416 static const struct file_operations ftrace_notrace_fops = { 2417 .open = ftrace_notrace_open, 2418 .read = seq_read, 2419 .write = ftrace_notrace_write, 2420 .llseek = ftrace_regex_lseek, 2421 .release = ftrace_notrace_release, 2422 }; 2423 2424 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2425 2426 static DEFINE_MUTEX(graph_lock); 2427 2428 int ftrace_graph_count; 2429 int ftrace_graph_filter_enabled; 2430 unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly; 2431 2432 static void * 2433 __g_next(struct seq_file *m, loff_t *pos) 2434 { 2435 if (*pos >= ftrace_graph_count) 2436 return NULL; 2437 return &ftrace_graph_funcs[*pos]; 2438 } 2439 2440 static void * 2441 g_next(struct seq_file *m, void *v, loff_t *pos) 2442 { 2443 (*pos)++; 2444 return __g_next(m, pos); 2445 } 2446 2447 static void *g_start(struct seq_file *m, loff_t *pos) 2448 { 2449 mutex_lock(&graph_lock); 2450 2451 /* Nothing, tell g_show to print all functions are enabled */ 2452 if (!ftrace_graph_filter_enabled && !*pos) 2453 return (void *)1; 2454 2455 return __g_next(m, pos); 2456 } 2457 2458 static void g_stop(struct seq_file *m, void *p) 2459 { 2460 mutex_unlock(&graph_lock); 2461 } 2462 2463 static int g_show(struct seq_file *m, void *v) 2464 { 2465 unsigned long *ptr = v; 2466 2467 if (!ptr) 2468 return 0; 2469 2470 if (ptr == (unsigned long *)1) { 2471 seq_printf(m, "#### all functions enabled ####\n"); 2472 return 0; 2473 } 2474 2475 seq_printf(m, "%ps\n", (void *)*ptr); 2476 2477 return 0; 2478 } 2479 2480 static const struct seq_operations ftrace_graph_seq_ops = { 2481 .start = g_start, 2482 .next = g_next, 2483 .stop = g_stop, 2484 .show = g_show, 2485 }; 2486 2487 static int 2488 ftrace_graph_open(struct inode *inode, struct file *file) 2489 { 2490 int ret = 0; 2491 2492 if (unlikely(ftrace_disabled)) 2493 return -ENODEV; 2494 2495 mutex_lock(&graph_lock); 2496 if ((file->f_mode & FMODE_WRITE) && 2497 (file->f_flags & O_TRUNC)) { 2498 ftrace_graph_filter_enabled = 0; 2499 ftrace_graph_count = 0; 2500 memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); 2501 } 2502 mutex_unlock(&graph_lock); 2503 2504 if (file->f_mode & FMODE_READ) 2505 ret = seq_open(file, &ftrace_graph_seq_ops); 2506 2507 return ret; 2508 } 2509 2510 static int 2511 ftrace_graph_release(struct inode *inode, struct file *file) 2512 { 2513 if (file->f_mode & FMODE_READ) 2514 seq_release(inode, file); 2515 return 0; 2516 } 2517 2518 static int 2519 ftrace_set_func(unsigned long *array, int *idx, char *buffer) 2520 { 2521 struct dyn_ftrace *rec; 2522 struct ftrace_page *pg; 2523 int search_len; 2524 int fail = 1; 2525 int type, not; 2526 char *search; 2527 bool exists; 2528 int i; 2529 2530 if (ftrace_disabled) 2531 return -ENODEV; 2532 2533 /* decode regex */ 2534 type = filter_parse_regex(buffer, strlen(buffer), &search, ¬); 2535 if (!not && *idx >= FTRACE_GRAPH_MAX_FUNCS) 2536 return -EBUSY; 2537 2538 search_len = strlen(search); 2539 2540 mutex_lock(&ftrace_lock); 2541 do_for_each_ftrace_rec(pg, rec) { 2542 2543 if (rec->flags & (FTRACE_FL_FAILED | FTRACE_FL_FREE)) 2544 continue; 2545 2546 if (ftrace_match_record(rec, search, search_len, type)) { 2547 /* if it is in the array */ 2548 exists = false; 2549 for (i = 0; i < *idx; i++) { 2550 if (array[i] == rec->ip) { 2551 exists = true; 2552 break; 2553 } 2554 } 2555 2556 if (!not) { 2557 fail = 0; 2558 if (!exists) { 2559 array[(*idx)++] = rec->ip; 2560 if (*idx >= FTRACE_GRAPH_MAX_FUNCS) 2561 goto out; 2562 } 2563 } else { 2564 if (exists) { 2565 array[i] = array[--(*idx)]; 2566 array[*idx] = 0; 2567 fail = 0; 2568 } 2569 } 2570 } 2571 } while_for_each_ftrace_rec(); 2572 out: 2573 mutex_unlock(&ftrace_lock); 2574 2575 if (fail) 2576 return -EINVAL; 2577 2578 ftrace_graph_filter_enabled = 1; 2579 return 0; 2580 } 2581 2582 static ssize_t 2583 ftrace_graph_write(struct file *file, const char __user *ubuf, 2584 size_t cnt, loff_t *ppos) 2585 { 2586 struct trace_parser parser; 2587 ssize_t read, ret; 2588 2589 if (!cnt) 2590 return 0; 2591 2592 mutex_lock(&graph_lock); 2593 2594 if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) { 2595 ret = -ENOMEM; 2596 goto out_unlock; 2597 } 2598 2599 read = trace_get_user(&parser, ubuf, cnt, ppos); 2600 2601 if (read >= 0 && trace_parser_loaded((&parser))) { 2602 parser.buffer[parser.idx] = 0; 2603 2604 /* we allow only one expression at a time */ 2605 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 2606 parser.buffer); 2607 if (ret) 2608 goto out_free; 2609 } 2610 2611 ret = read; 2612 2613 out_free: 2614 trace_parser_put(&parser); 2615 out_unlock: 2616 mutex_unlock(&graph_lock); 2617 2618 return ret; 2619 } 2620 2621 static const struct file_operations ftrace_graph_fops = { 2622 .open = ftrace_graph_open, 2623 .read = seq_read, 2624 .write = ftrace_graph_write, 2625 .release = ftrace_graph_release, 2626 }; 2627 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2628 2629 static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer) 2630 { 2631 2632 trace_create_file("available_filter_functions", 0444, 2633 d_tracer, NULL, &ftrace_avail_fops); 2634 2635 trace_create_file("failures", 0444, 2636 d_tracer, NULL, &ftrace_failures_fops); 2637 2638 trace_create_file("set_ftrace_filter", 0644, d_tracer, 2639 NULL, &ftrace_filter_fops); 2640 2641 trace_create_file("set_ftrace_notrace", 0644, d_tracer, 2642 NULL, &ftrace_notrace_fops); 2643 2644 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2645 trace_create_file("set_graph_function", 0444, d_tracer, 2646 NULL, 2647 &ftrace_graph_fops); 2648 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2649 2650 return 0; 2651 } 2652 2653 static int ftrace_process_locs(struct module *mod, 2654 unsigned long *start, 2655 unsigned long *end) 2656 { 2657 unsigned long *p; 2658 unsigned long addr; 2659 unsigned long flags; 2660 2661 mutex_lock(&ftrace_lock); 2662 p = start; 2663 while (p < end) { 2664 addr = ftrace_call_adjust(*p++); 2665 /* 2666 * Some architecture linkers will pad between 2667 * the different mcount_loc sections of different 2668 * object files to satisfy alignments. 2669 * Skip any NULL pointers. 2670 */ 2671 if (!addr) 2672 continue; 2673 ftrace_record_ip(addr); 2674 } 2675 2676 /* disable interrupts to prevent kstop machine */ 2677 local_irq_save(flags); 2678 ftrace_update_code(mod); 2679 local_irq_restore(flags); 2680 mutex_unlock(&ftrace_lock); 2681 2682 return 0; 2683 } 2684 2685 #ifdef CONFIG_MODULES 2686 void ftrace_release_mod(struct module *mod) 2687 { 2688 struct dyn_ftrace *rec; 2689 struct ftrace_page *pg; 2690 2691 if (ftrace_disabled) 2692 return; 2693 2694 mutex_lock(&ftrace_lock); 2695 do_for_each_ftrace_rec(pg, rec) { 2696 if (within_module_core(rec->ip, mod)) { 2697 /* 2698 * rec->ip is changed in ftrace_free_rec() 2699 * It should not between s and e if record was freed. 2700 */ 2701 FTRACE_WARN_ON(rec->flags & FTRACE_FL_FREE); 2702 ftrace_free_rec(rec); 2703 } 2704 } while_for_each_ftrace_rec(); 2705 mutex_unlock(&ftrace_lock); 2706 } 2707 2708 static void ftrace_init_module(struct module *mod, 2709 unsigned long *start, unsigned long *end) 2710 { 2711 if (ftrace_disabled || start == end) 2712 return; 2713 ftrace_process_locs(mod, start, end); 2714 } 2715 2716 static int ftrace_module_notify(struct notifier_block *self, 2717 unsigned long val, void *data) 2718 { 2719 struct module *mod = data; 2720 2721 switch (val) { 2722 case MODULE_STATE_COMING: 2723 ftrace_init_module(mod, mod->ftrace_callsites, 2724 mod->ftrace_callsites + 2725 mod->num_ftrace_callsites); 2726 break; 2727 case MODULE_STATE_GOING: 2728 ftrace_release_mod(mod); 2729 break; 2730 } 2731 2732 return 0; 2733 } 2734 #else 2735 static int ftrace_module_notify(struct notifier_block *self, 2736 unsigned long val, void *data) 2737 { 2738 return 0; 2739 } 2740 #endif /* CONFIG_MODULES */ 2741 2742 struct notifier_block ftrace_module_nb = { 2743 .notifier_call = ftrace_module_notify, 2744 .priority = 0, 2745 }; 2746 2747 extern unsigned long __start_mcount_loc[]; 2748 extern unsigned long __stop_mcount_loc[]; 2749 2750 void __init ftrace_init(void) 2751 { 2752 unsigned long count, addr, flags; 2753 int ret; 2754 2755 /* Keep the ftrace pointer to the stub */ 2756 addr = (unsigned long)ftrace_stub; 2757 2758 local_irq_save(flags); 2759 ftrace_dyn_arch_init(&addr); 2760 local_irq_restore(flags); 2761 2762 /* ftrace_dyn_arch_init places the return code in addr */ 2763 if (addr) 2764 goto failed; 2765 2766 count = __stop_mcount_loc - __start_mcount_loc; 2767 2768 ret = ftrace_dyn_table_alloc(count); 2769 if (ret) 2770 goto failed; 2771 2772 last_ftrace_enabled = ftrace_enabled = 1; 2773 2774 ret = ftrace_process_locs(NULL, 2775 __start_mcount_loc, 2776 __stop_mcount_loc); 2777 2778 ret = register_module_notifier(&ftrace_module_nb); 2779 if (ret) 2780 pr_warning("Failed to register trace ftrace module notifier\n"); 2781 2782 set_ftrace_early_filters(); 2783 2784 return; 2785 failed: 2786 ftrace_disabled = 1; 2787 } 2788 2789 #else 2790 2791 static int __init ftrace_nodyn_init(void) 2792 { 2793 ftrace_enabled = 1; 2794 return 0; 2795 } 2796 device_initcall(ftrace_nodyn_init); 2797 2798 static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; } 2799 static inline void ftrace_startup_enable(int command) { } 2800 /* Keep as macros so we do not need to define the commands */ 2801 # define ftrace_startup(command) do { } while (0) 2802 # define ftrace_shutdown(command) do { } while (0) 2803 # define ftrace_startup_sysctl() do { } while (0) 2804 # define ftrace_shutdown_sysctl() do { } while (0) 2805 #endif /* CONFIG_DYNAMIC_FTRACE */ 2806 2807 static void clear_ftrace_swapper(void) 2808 { 2809 struct task_struct *p; 2810 int cpu; 2811 2812 get_online_cpus(); 2813 for_each_online_cpu(cpu) { 2814 p = idle_task(cpu); 2815 clear_tsk_trace_trace(p); 2816 } 2817 put_online_cpus(); 2818 } 2819 2820 static void set_ftrace_swapper(void) 2821 { 2822 struct task_struct *p; 2823 int cpu; 2824 2825 get_online_cpus(); 2826 for_each_online_cpu(cpu) { 2827 p = idle_task(cpu); 2828 set_tsk_trace_trace(p); 2829 } 2830 put_online_cpus(); 2831 } 2832 2833 static void clear_ftrace_pid(struct pid *pid) 2834 { 2835 struct task_struct *p; 2836 2837 rcu_read_lock(); 2838 do_each_pid_task(pid, PIDTYPE_PID, p) { 2839 clear_tsk_trace_trace(p); 2840 } while_each_pid_task(pid, PIDTYPE_PID, p); 2841 rcu_read_unlock(); 2842 2843 put_pid(pid); 2844 } 2845 2846 static void set_ftrace_pid(struct pid *pid) 2847 { 2848 struct task_struct *p; 2849 2850 rcu_read_lock(); 2851 do_each_pid_task(pid, PIDTYPE_PID, p) { 2852 set_tsk_trace_trace(p); 2853 } while_each_pid_task(pid, PIDTYPE_PID, p); 2854 rcu_read_unlock(); 2855 } 2856 2857 static void clear_ftrace_pid_task(struct pid *pid) 2858 { 2859 if (pid == ftrace_swapper_pid) 2860 clear_ftrace_swapper(); 2861 else 2862 clear_ftrace_pid(pid); 2863 } 2864 2865 static void set_ftrace_pid_task(struct pid *pid) 2866 { 2867 if (pid == ftrace_swapper_pid) 2868 set_ftrace_swapper(); 2869 else 2870 set_ftrace_pid(pid); 2871 } 2872 2873 static int ftrace_pid_add(int p) 2874 { 2875 struct pid *pid; 2876 struct ftrace_pid *fpid; 2877 int ret = -EINVAL; 2878 2879 mutex_lock(&ftrace_lock); 2880 2881 if (!p) 2882 pid = ftrace_swapper_pid; 2883 else 2884 pid = find_get_pid(p); 2885 2886 if (!pid) 2887 goto out; 2888 2889 ret = 0; 2890 2891 list_for_each_entry(fpid, &ftrace_pids, list) 2892 if (fpid->pid == pid) 2893 goto out_put; 2894 2895 ret = -ENOMEM; 2896 2897 fpid = kmalloc(sizeof(*fpid), GFP_KERNEL); 2898 if (!fpid) 2899 goto out_put; 2900 2901 list_add(&fpid->list, &ftrace_pids); 2902 fpid->pid = pid; 2903 2904 set_ftrace_pid_task(pid); 2905 2906 ftrace_update_pid_func(); 2907 ftrace_startup_enable(0); 2908 2909 mutex_unlock(&ftrace_lock); 2910 return 0; 2911 2912 out_put: 2913 if (pid != ftrace_swapper_pid) 2914 put_pid(pid); 2915 2916 out: 2917 mutex_unlock(&ftrace_lock); 2918 return ret; 2919 } 2920 2921 static void ftrace_pid_reset(void) 2922 { 2923 struct ftrace_pid *fpid, *safe; 2924 2925 mutex_lock(&ftrace_lock); 2926 list_for_each_entry_safe(fpid, safe, &ftrace_pids, list) { 2927 struct pid *pid = fpid->pid; 2928 2929 clear_ftrace_pid_task(pid); 2930 2931 list_del(&fpid->list); 2932 kfree(fpid); 2933 } 2934 2935 ftrace_update_pid_func(); 2936 ftrace_startup_enable(0); 2937 2938 mutex_unlock(&ftrace_lock); 2939 } 2940 2941 static void *fpid_start(struct seq_file *m, loff_t *pos) 2942 { 2943 mutex_lock(&ftrace_lock); 2944 2945 if (list_empty(&ftrace_pids) && (!*pos)) 2946 return (void *) 1; 2947 2948 return seq_list_start(&ftrace_pids, *pos); 2949 } 2950 2951 static void *fpid_next(struct seq_file *m, void *v, loff_t *pos) 2952 { 2953 if (v == (void *)1) 2954 return NULL; 2955 2956 return seq_list_next(v, &ftrace_pids, pos); 2957 } 2958 2959 static void fpid_stop(struct seq_file *m, void *p) 2960 { 2961 mutex_unlock(&ftrace_lock); 2962 } 2963 2964 static int fpid_show(struct seq_file *m, void *v) 2965 { 2966 const struct ftrace_pid *fpid = list_entry(v, struct ftrace_pid, list); 2967 2968 if (v == (void *)1) { 2969 seq_printf(m, "no pid\n"); 2970 return 0; 2971 } 2972 2973 if (fpid->pid == ftrace_swapper_pid) 2974 seq_printf(m, "swapper tasks\n"); 2975 else 2976 seq_printf(m, "%u\n", pid_vnr(fpid->pid)); 2977 2978 return 0; 2979 } 2980 2981 static const struct seq_operations ftrace_pid_sops = { 2982 .start = fpid_start, 2983 .next = fpid_next, 2984 .stop = fpid_stop, 2985 .show = fpid_show, 2986 }; 2987 2988 static int 2989 ftrace_pid_open(struct inode *inode, struct file *file) 2990 { 2991 int ret = 0; 2992 2993 if ((file->f_mode & FMODE_WRITE) && 2994 (file->f_flags & O_TRUNC)) 2995 ftrace_pid_reset(); 2996 2997 if (file->f_mode & FMODE_READ) 2998 ret = seq_open(file, &ftrace_pid_sops); 2999 3000 return ret; 3001 } 3002 3003 static ssize_t 3004 ftrace_pid_write(struct file *filp, const char __user *ubuf, 3005 size_t cnt, loff_t *ppos) 3006 { 3007 char buf[64], *tmp; 3008 long val; 3009 int ret; 3010 3011 if (cnt >= sizeof(buf)) 3012 return -EINVAL; 3013 3014 if (copy_from_user(&buf, ubuf, cnt)) 3015 return -EFAULT; 3016 3017 buf[cnt] = 0; 3018 3019 /* 3020 * Allow "echo > set_ftrace_pid" or "echo -n '' > set_ftrace_pid" 3021 * to clean the filter quietly. 3022 */ 3023 tmp = strstrip(buf); 3024 if (strlen(tmp) == 0) 3025 return 1; 3026 3027 ret = strict_strtol(tmp, 10, &val); 3028 if (ret < 0) 3029 return ret; 3030 3031 ret = ftrace_pid_add(val); 3032 3033 return ret ? ret : cnt; 3034 } 3035 3036 static int 3037 ftrace_pid_release(struct inode *inode, struct file *file) 3038 { 3039 if (file->f_mode & FMODE_READ) 3040 seq_release(inode, file); 3041 3042 return 0; 3043 } 3044 3045 static const struct file_operations ftrace_pid_fops = { 3046 .open = ftrace_pid_open, 3047 .write = ftrace_pid_write, 3048 .read = seq_read, 3049 .llseek = seq_lseek, 3050 .release = ftrace_pid_release, 3051 }; 3052 3053 static __init int ftrace_init_debugfs(void) 3054 { 3055 struct dentry *d_tracer; 3056 3057 d_tracer = tracing_init_dentry(); 3058 if (!d_tracer) 3059 return 0; 3060 3061 ftrace_init_dyn_debugfs(d_tracer); 3062 3063 trace_create_file("set_ftrace_pid", 0644, d_tracer, 3064 NULL, &ftrace_pid_fops); 3065 3066 ftrace_profile_debugfs(d_tracer); 3067 3068 return 0; 3069 } 3070 fs_initcall(ftrace_init_debugfs); 3071 3072 /** 3073 * ftrace_kill - kill ftrace 3074 * 3075 * This function should be used by panic code. It stops ftrace 3076 * but in a not so nice way. If you need to simply kill ftrace 3077 * from a non-atomic section, use ftrace_kill. 3078 */ 3079 void ftrace_kill(void) 3080 { 3081 ftrace_disabled = 1; 3082 ftrace_enabled = 0; 3083 clear_ftrace_function(); 3084 } 3085 3086 /** 3087 * register_ftrace_function - register a function for profiling 3088 * @ops - ops structure that holds the function for profiling. 3089 * 3090 * Register a function to be called by all functions in the 3091 * kernel. 3092 * 3093 * Note: @ops->func and all the functions it calls must be labeled 3094 * with "notrace", otherwise it will go into a 3095 * recursive loop. 3096 */ 3097 int register_ftrace_function(struct ftrace_ops *ops) 3098 { 3099 int ret; 3100 3101 if (unlikely(ftrace_disabled)) 3102 return -1; 3103 3104 mutex_lock(&ftrace_lock); 3105 3106 ret = __register_ftrace_function(ops); 3107 ftrace_startup(0); 3108 3109 mutex_unlock(&ftrace_lock); 3110 return ret; 3111 } 3112 3113 /** 3114 * unregister_ftrace_function - unregister a function for profiling. 3115 * @ops - ops structure that holds the function to unregister 3116 * 3117 * Unregister a function that was added to be called by ftrace profiling. 3118 */ 3119 int unregister_ftrace_function(struct ftrace_ops *ops) 3120 { 3121 int ret; 3122 3123 mutex_lock(&ftrace_lock); 3124 ret = __unregister_ftrace_function(ops); 3125 ftrace_shutdown(0); 3126 mutex_unlock(&ftrace_lock); 3127 3128 return ret; 3129 } 3130 3131 int 3132 ftrace_enable_sysctl(struct ctl_table *table, int write, 3133 void __user *buffer, size_t *lenp, 3134 loff_t *ppos) 3135 { 3136 int ret; 3137 3138 if (unlikely(ftrace_disabled)) 3139 return -ENODEV; 3140 3141 mutex_lock(&ftrace_lock); 3142 3143 ret = proc_dointvec(table, write, buffer, lenp, ppos); 3144 3145 if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) 3146 goto out; 3147 3148 last_ftrace_enabled = !!ftrace_enabled; 3149 3150 if (ftrace_enabled) { 3151 3152 ftrace_startup_sysctl(); 3153 3154 /* we are starting ftrace again */ 3155 if (ftrace_list != &ftrace_list_end) { 3156 if (ftrace_list->next == &ftrace_list_end) 3157 ftrace_trace_function = ftrace_list->func; 3158 else 3159 ftrace_trace_function = ftrace_list_func; 3160 } 3161 3162 } else { 3163 /* stopping ftrace calls (just send to ftrace_stub) */ 3164 ftrace_trace_function = ftrace_stub; 3165 3166 ftrace_shutdown_sysctl(); 3167 } 3168 3169 out: 3170 mutex_unlock(&ftrace_lock); 3171 return ret; 3172 } 3173 3174 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3175 3176 static int ftrace_graph_active; 3177 static struct notifier_block ftrace_suspend_notifier; 3178 3179 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 3180 { 3181 return 0; 3182 } 3183 3184 /* The callbacks that hook a function */ 3185 trace_func_graph_ret_t ftrace_graph_return = 3186 (trace_func_graph_ret_t)ftrace_stub; 3187 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; 3188 3189 /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ 3190 static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) 3191 { 3192 int i; 3193 int ret = 0; 3194 unsigned long flags; 3195 int start = 0, end = FTRACE_RETSTACK_ALLOC_SIZE; 3196 struct task_struct *g, *t; 3197 3198 for (i = 0; i < FTRACE_RETSTACK_ALLOC_SIZE; i++) { 3199 ret_stack_list[i] = kmalloc(FTRACE_RETFUNC_DEPTH 3200 * sizeof(struct ftrace_ret_stack), 3201 GFP_KERNEL); 3202 if (!ret_stack_list[i]) { 3203 start = 0; 3204 end = i; 3205 ret = -ENOMEM; 3206 goto free; 3207 } 3208 } 3209 3210 read_lock_irqsave(&tasklist_lock, flags); 3211 do_each_thread(g, t) { 3212 if (start == end) { 3213 ret = -EAGAIN; 3214 goto unlock; 3215 } 3216 3217 if (t->ret_stack == NULL) { 3218 atomic_set(&t->tracing_graph_pause, 0); 3219 atomic_set(&t->trace_overrun, 0); 3220 t->curr_ret_stack = -1; 3221 /* Make sure the tasks see the -1 first: */ 3222 smp_wmb(); 3223 t->ret_stack = ret_stack_list[start++]; 3224 } 3225 } while_each_thread(g, t); 3226 3227 unlock: 3228 read_unlock_irqrestore(&tasklist_lock, flags); 3229 free: 3230 for (i = start; i < end; i++) 3231 kfree(ret_stack_list[i]); 3232 return ret; 3233 } 3234 3235 static void 3236 ftrace_graph_probe_sched_switch(void *ignore, 3237 struct task_struct *prev, struct task_struct *next) 3238 { 3239 unsigned long long timestamp; 3240 int index; 3241 3242 /* 3243 * Does the user want to count the time a function was asleep. 3244 * If so, do not update the time stamps. 3245 */ 3246 if (trace_flags & TRACE_ITER_SLEEP_TIME) 3247 return; 3248 3249 timestamp = trace_clock_local(); 3250 3251 prev->ftrace_timestamp = timestamp; 3252 3253 /* only process tasks that we timestamped */ 3254 if (!next->ftrace_timestamp) 3255 return; 3256 3257 /* 3258 * Update all the counters in next to make up for the 3259 * time next was sleeping. 3260 */ 3261 timestamp -= next->ftrace_timestamp; 3262 3263 for (index = next->curr_ret_stack; index >= 0; index--) 3264 next->ret_stack[index].calltime += timestamp; 3265 } 3266 3267 /* Allocate a return stack for each task */ 3268 static int start_graph_tracing(void) 3269 { 3270 struct ftrace_ret_stack **ret_stack_list; 3271 int ret, cpu; 3272 3273 ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * 3274 sizeof(struct ftrace_ret_stack *), 3275 GFP_KERNEL); 3276 3277 if (!ret_stack_list) 3278 return -ENOMEM; 3279 3280 /* The cpu_boot init_task->ret_stack will never be freed */ 3281 for_each_online_cpu(cpu) { 3282 if (!idle_task(cpu)->ret_stack) 3283 ftrace_graph_init_task(idle_task(cpu)); 3284 } 3285 3286 do { 3287 ret = alloc_retstack_tasklist(ret_stack_list); 3288 } while (ret == -EAGAIN); 3289 3290 if (!ret) { 3291 ret = register_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 3292 if (ret) 3293 pr_info("ftrace_graph: Couldn't activate tracepoint" 3294 " probe to kernel_sched_switch\n"); 3295 } 3296 3297 kfree(ret_stack_list); 3298 return ret; 3299 } 3300 3301 /* 3302 * Hibernation protection. 3303 * The state of the current task is too much unstable during 3304 * suspend/restore to disk. We want to protect against that. 3305 */ 3306 static int 3307 ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, 3308 void *unused) 3309 { 3310 switch (state) { 3311 case PM_HIBERNATION_PREPARE: 3312 pause_graph_tracing(); 3313 break; 3314 3315 case PM_POST_HIBERNATION: 3316 unpause_graph_tracing(); 3317 break; 3318 } 3319 return NOTIFY_DONE; 3320 } 3321 3322 int register_ftrace_graph(trace_func_graph_ret_t retfunc, 3323 trace_func_graph_ent_t entryfunc) 3324 { 3325 int ret = 0; 3326 3327 mutex_lock(&ftrace_lock); 3328 3329 /* we currently allow only one tracer registered at a time */ 3330 if (ftrace_graph_active) { 3331 ret = -EBUSY; 3332 goto out; 3333 } 3334 3335 ftrace_suspend_notifier.notifier_call = ftrace_suspend_notifier_call; 3336 register_pm_notifier(&ftrace_suspend_notifier); 3337 3338 ftrace_graph_active++; 3339 ret = start_graph_tracing(); 3340 if (ret) { 3341 ftrace_graph_active--; 3342 goto out; 3343 } 3344 3345 ftrace_graph_return = retfunc; 3346 ftrace_graph_entry = entryfunc; 3347 3348 ftrace_startup(FTRACE_START_FUNC_RET); 3349 3350 out: 3351 mutex_unlock(&ftrace_lock); 3352 return ret; 3353 } 3354 3355 void unregister_ftrace_graph(void) 3356 { 3357 mutex_lock(&ftrace_lock); 3358 3359 if (unlikely(!ftrace_graph_active)) 3360 goto out; 3361 3362 ftrace_graph_active--; 3363 ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub; 3364 ftrace_graph_entry = ftrace_graph_entry_stub; 3365 ftrace_shutdown(FTRACE_STOP_FUNC_RET); 3366 unregister_pm_notifier(&ftrace_suspend_notifier); 3367 unregister_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 3368 3369 out: 3370 mutex_unlock(&ftrace_lock); 3371 } 3372 3373 /* Allocate a return stack for newly created task */ 3374 void ftrace_graph_init_task(struct task_struct *t) 3375 { 3376 /* Make sure we do not use the parent ret_stack */ 3377 t->ret_stack = NULL; 3378 t->curr_ret_stack = -1; 3379 3380 if (ftrace_graph_active) { 3381 struct ftrace_ret_stack *ret_stack; 3382 3383 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 3384 * sizeof(struct ftrace_ret_stack), 3385 GFP_KERNEL); 3386 if (!ret_stack) 3387 return; 3388 atomic_set(&t->tracing_graph_pause, 0); 3389 atomic_set(&t->trace_overrun, 0); 3390 t->ftrace_timestamp = 0; 3391 /* make curr_ret_stack visable before we add the ret_stack */ 3392 smp_wmb(); 3393 t->ret_stack = ret_stack; 3394 } 3395 } 3396 3397 void ftrace_graph_exit_task(struct task_struct *t) 3398 { 3399 struct ftrace_ret_stack *ret_stack = t->ret_stack; 3400 3401 t->ret_stack = NULL; 3402 /* NULL must become visible to IRQs before we free it: */ 3403 barrier(); 3404 3405 kfree(ret_stack); 3406 } 3407 3408 void ftrace_graph_stop(void) 3409 { 3410 ftrace_stop(); 3411 } 3412 #endif 3413