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 int resched; 1887 1888 key = hash_long(ip, FTRACE_HASH_BITS); 1889 1890 hhd = &ftrace_func_hash[key]; 1891 1892 if (hlist_empty(hhd)) 1893 return; 1894 1895 /* 1896 * Disable preemption for these calls to prevent a RCU grace 1897 * period. This syncs the hash iteration and freeing of items 1898 * on the hash. rcu_read_lock is too dangerous here. 1899 */ 1900 resched = ftrace_preempt_disable(); 1901 hlist_for_each_entry_rcu(entry, n, hhd, node) { 1902 if (entry->ip == ip) 1903 entry->ops->func(ip, parent_ip, &entry->data); 1904 } 1905 ftrace_preempt_enable(resched); 1906 } 1907 1908 static struct ftrace_ops trace_probe_ops __read_mostly = 1909 { 1910 .func = function_trace_probe_call, 1911 }; 1912 1913 static int ftrace_probe_registered; 1914 1915 static void __enable_ftrace_function_probe(void) 1916 { 1917 int i; 1918 1919 if (ftrace_probe_registered) 1920 return; 1921 1922 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1923 struct hlist_head *hhd = &ftrace_func_hash[i]; 1924 if (hhd->first) 1925 break; 1926 } 1927 /* Nothing registered? */ 1928 if (i == FTRACE_FUNC_HASHSIZE) 1929 return; 1930 1931 __register_ftrace_function(&trace_probe_ops); 1932 ftrace_startup(0); 1933 ftrace_probe_registered = 1; 1934 } 1935 1936 static void __disable_ftrace_function_probe(void) 1937 { 1938 int i; 1939 1940 if (!ftrace_probe_registered) 1941 return; 1942 1943 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 1944 struct hlist_head *hhd = &ftrace_func_hash[i]; 1945 if (hhd->first) 1946 return; 1947 } 1948 1949 /* no more funcs left */ 1950 __unregister_ftrace_function(&trace_probe_ops); 1951 ftrace_shutdown(0); 1952 ftrace_probe_registered = 0; 1953 } 1954 1955 1956 static void ftrace_free_entry_rcu(struct rcu_head *rhp) 1957 { 1958 struct ftrace_func_probe *entry = 1959 container_of(rhp, struct ftrace_func_probe, rcu); 1960 1961 if (entry->ops->free) 1962 entry->ops->free(&entry->data); 1963 kfree(entry); 1964 } 1965 1966 1967 int 1968 register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 1969 void *data) 1970 { 1971 struct ftrace_func_probe *entry; 1972 struct ftrace_page *pg; 1973 struct dyn_ftrace *rec; 1974 int type, len, not; 1975 unsigned long key; 1976 int count = 0; 1977 char *search; 1978 1979 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 1980 len = strlen(search); 1981 1982 /* we do not support '!' for function probes */ 1983 if (WARN_ON(not)) 1984 return -EINVAL; 1985 1986 mutex_lock(&ftrace_lock); 1987 do_for_each_ftrace_rec(pg, rec) { 1988 1989 if (rec->flags & FTRACE_FL_FAILED) 1990 continue; 1991 1992 if (!ftrace_match_record(rec, search, len, type)) 1993 continue; 1994 1995 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 1996 if (!entry) { 1997 /* If we did not process any, then return error */ 1998 if (!count) 1999 count = -ENOMEM; 2000 goto out_unlock; 2001 } 2002 2003 count++; 2004 2005 entry->data = data; 2006 2007 /* 2008 * The caller might want to do something special 2009 * for each function we find. We call the callback 2010 * to give the caller an opportunity to do so. 2011 */ 2012 if (ops->callback) { 2013 if (ops->callback(rec->ip, &entry->data) < 0) { 2014 /* caller does not like this func */ 2015 kfree(entry); 2016 continue; 2017 } 2018 } 2019 2020 entry->ops = ops; 2021 entry->ip = rec->ip; 2022 2023 key = hash_long(entry->ip, FTRACE_HASH_BITS); 2024 hlist_add_head_rcu(&entry->node, &ftrace_func_hash[key]); 2025 2026 } while_for_each_ftrace_rec(); 2027 __enable_ftrace_function_probe(); 2028 2029 out_unlock: 2030 mutex_unlock(&ftrace_lock); 2031 2032 return count; 2033 } 2034 2035 enum { 2036 PROBE_TEST_FUNC = 1, 2037 PROBE_TEST_DATA = 2 2038 }; 2039 2040 static void 2041 __unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2042 void *data, int flags) 2043 { 2044 struct ftrace_func_probe *entry; 2045 struct hlist_node *n, *tmp; 2046 char str[KSYM_SYMBOL_LEN]; 2047 int type = MATCH_FULL; 2048 int i, len = 0; 2049 char *search; 2050 2051 if (glob && (strcmp(glob, "*") == 0 || !strlen(glob))) 2052 glob = NULL; 2053 else if (glob) { 2054 int not; 2055 2056 type = filter_parse_regex(glob, strlen(glob), &search, ¬); 2057 len = strlen(search); 2058 2059 /* we do not support '!' for function probes */ 2060 if (WARN_ON(not)) 2061 return; 2062 } 2063 2064 mutex_lock(&ftrace_lock); 2065 for (i = 0; i < FTRACE_FUNC_HASHSIZE; i++) { 2066 struct hlist_head *hhd = &ftrace_func_hash[i]; 2067 2068 hlist_for_each_entry_safe(entry, n, tmp, hhd, node) { 2069 2070 /* break up if statements for readability */ 2071 if ((flags & PROBE_TEST_FUNC) && entry->ops != ops) 2072 continue; 2073 2074 if ((flags & PROBE_TEST_DATA) && entry->data != data) 2075 continue; 2076 2077 /* do this last, since it is the most expensive */ 2078 if (glob) { 2079 kallsyms_lookup(entry->ip, NULL, NULL, 2080 NULL, str); 2081 if (!ftrace_match(str, glob, len, type)) 2082 continue; 2083 } 2084 2085 hlist_del(&entry->node); 2086 call_rcu(&entry->rcu, ftrace_free_entry_rcu); 2087 } 2088 } 2089 __disable_ftrace_function_probe(); 2090 mutex_unlock(&ftrace_lock); 2091 } 2092 2093 void 2094 unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, 2095 void *data) 2096 { 2097 __unregister_ftrace_function_probe(glob, ops, data, 2098 PROBE_TEST_FUNC | PROBE_TEST_DATA); 2099 } 2100 2101 void 2102 unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops) 2103 { 2104 __unregister_ftrace_function_probe(glob, ops, NULL, PROBE_TEST_FUNC); 2105 } 2106 2107 void unregister_ftrace_function_probe_all(char *glob) 2108 { 2109 __unregister_ftrace_function_probe(glob, NULL, NULL, 0); 2110 } 2111 2112 static LIST_HEAD(ftrace_commands); 2113 static DEFINE_MUTEX(ftrace_cmd_mutex); 2114 2115 int register_ftrace_command(struct ftrace_func_command *cmd) 2116 { 2117 struct ftrace_func_command *p; 2118 int ret = 0; 2119 2120 mutex_lock(&ftrace_cmd_mutex); 2121 list_for_each_entry(p, &ftrace_commands, list) { 2122 if (strcmp(cmd->name, p->name) == 0) { 2123 ret = -EBUSY; 2124 goto out_unlock; 2125 } 2126 } 2127 list_add(&cmd->list, &ftrace_commands); 2128 out_unlock: 2129 mutex_unlock(&ftrace_cmd_mutex); 2130 2131 return ret; 2132 } 2133 2134 int unregister_ftrace_command(struct ftrace_func_command *cmd) 2135 { 2136 struct ftrace_func_command *p, *n; 2137 int ret = -ENODEV; 2138 2139 mutex_lock(&ftrace_cmd_mutex); 2140 list_for_each_entry_safe(p, n, &ftrace_commands, list) { 2141 if (strcmp(cmd->name, p->name) == 0) { 2142 ret = 0; 2143 list_del_init(&p->list); 2144 goto out_unlock; 2145 } 2146 } 2147 out_unlock: 2148 mutex_unlock(&ftrace_cmd_mutex); 2149 2150 return ret; 2151 } 2152 2153 static int ftrace_process_regex(char *buff, int len, int enable) 2154 { 2155 char *func, *command, *next = buff; 2156 struct ftrace_func_command *p; 2157 int ret = -EINVAL; 2158 2159 func = strsep(&next, ":"); 2160 2161 if (!next) { 2162 if (ftrace_match_records(func, len, enable)) 2163 return 0; 2164 return ret; 2165 } 2166 2167 /* command found */ 2168 2169 command = strsep(&next, ":"); 2170 2171 mutex_lock(&ftrace_cmd_mutex); 2172 list_for_each_entry(p, &ftrace_commands, list) { 2173 if (strcmp(p->name, command) == 0) { 2174 ret = p->func(func, command, next, enable); 2175 goto out_unlock; 2176 } 2177 } 2178 out_unlock: 2179 mutex_unlock(&ftrace_cmd_mutex); 2180 2181 return ret; 2182 } 2183 2184 static ssize_t 2185 ftrace_regex_write(struct file *file, const char __user *ubuf, 2186 size_t cnt, loff_t *ppos, int enable) 2187 { 2188 struct ftrace_iterator *iter; 2189 struct trace_parser *parser; 2190 ssize_t ret, read; 2191 2192 if (!cnt) 2193 return 0; 2194 2195 mutex_lock(&ftrace_regex_lock); 2196 2197 if (file->f_mode & FMODE_READ) { 2198 struct seq_file *m = file->private_data; 2199 iter = m->private; 2200 } else 2201 iter = file->private_data; 2202 2203 parser = &iter->parser; 2204 read = trace_get_user(parser, ubuf, cnt, ppos); 2205 2206 if (read >= 0 && trace_parser_loaded(parser) && 2207 !trace_parser_cont(parser)) { 2208 ret = ftrace_process_regex(parser->buffer, 2209 parser->idx, enable); 2210 trace_parser_clear(parser); 2211 if (ret) 2212 goto out_unlock; 2213 } 2214 2215 ret = read; 2216 out_unlock: 2217 mutex_unlock(&ftrace_regex_lock); 2218 2219 return ret; 2220 } 2221 2222 static ssize_t 2223 ftrace_filter_write(struct file *file, const char __user *ubuf, 2224 size_t cnt, loff_t *ppos) 2225 { 2226 return ftrace_regex_write(file, ubuf, cnt, ppos, 1); 2227 } 2228 2229 static ssize_t 2230 ftrace_notrace_write(struct file *file, const char __user *ubuf, 2231 size_t cnt, loff_t *ppos) 2232 { 2233 return ftrace_regex_write(file, ubuf, cnt, ppos, 0); 2234 } 2235 2236 static void 2237 ftrace_set_regex(unsigned char *buf, int len, int reset, int enable) 2238 { 2239 if (unlikely(ftrace_disabled)) 2240 return; 2241 2242 mutex_lock(&ftrace_regex_lock); 2243 if (reset) 2244 ftrace_filter_reset(enable); 2245 if (buf) 2246 ftrace_match_records(buf, len, enable); 2247 mutex_unlock(&ftrace_regex_lock); 2248 } 2249 2250 /** 2251 * ftrace_set_filter - set a function to filter on in ftrace 2252 * @buf - the string that holds the function filter text. 2253 * @len - the length of the string. 2254 * @reset - non zero to reset all filters before applying this filter. 2255 * 2256 * Filters denote which functions should be enabled when tracing is enabled. 2257 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 2258 */ 2259 void ftrace_set_filter(unsigned char *buf, int len, int reset) 2260 { 2261 ftrace_set_regex(buf, len, reset, 1); 2262 } 2263 2264 /** 2265 * ftrace_set_notrace - set a function to not trace in ftrace 2266 * @buf - the string that holds the function notrace text. 2267 * @len - the length of the string. 2268 * @reset - non zero to reset all filters before applying this filter. 2269 * 2270 * Notrace Filters denote which functions should not be enabled when tracing 2271 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 2272 * for tracing. 2273 */ 2274 void ftrace_set_notrace(unsigned char *buf, int len, int reset) 2275 { 2276 ftrace_set_regex(buf, len, reset, 0); 2277 } 2278 2279 /* 2280 * command line interface to allow users to set filters on boot up. 2281 */ 2282 #define FTRACE_FILTER_SIZE COMMAND_LINE_SIZE 2283 static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 2284 static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata; 2285 2286 static int __init set_ftrace_notrace(char *str) 2287 { 2288 strncpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE); 2289 return 1; 2290 } 2291 __setup("ftrace_notrace=", set_ftrace_notrace); 2292 2293 static int __init set_ftrace_filter(char *str) 2294 { 2295 strncpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE); 2296 return 1; 2297 } 2298 __setup("ftrace_filter=", set_ftrace_filter); 2299 2300 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2301 static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata; 2302 static int ftrace_set_func(unsigned long *array, int *idx, char *buffer); 2303 2304 static int __init set_graph_function(char *str) 2305 { 2306 strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE); 2307 return 1; 2308 } 2309 __setup("ftrace_graph_filter=", set_graph_function); 2310 2311 static void __init set_ftrace_early_graph(char *buf) 2312 { 2313 int ret; 2314 char *func; 2315 2316 while (buf) { 2317 func = strsep(&buf, ","); 2318 /* we allow only one expression at a time */ 2319 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 2320 func); 2321 if (ret) 2322 printk(KERN_DEBUG "ftrace: function %s not " 2323 "traceable\n", func); 2324 } 2325 } 2326 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2327 2328 static void __init set_ftrace_early_filter(char *buf, int enable) 2329 { 2330 char *func; 2331 2332 while (buf) { 2333 func = strsep(&buf, ","); 2334 ftrace_set_regex(func, strlen(func), 0, enable); 2335 } 2336 } 2337 2338 static void __init set_ftrace_early_filters(void) 2339 { 2340 if (ftrace_filter_buf[0]) 2341 set_ftrace_early_filter(ftrace_filter_buf, 1); 2342 if (ftrace_notrace_buf[0]) 2343 set_ftrace_early_filter(ftrace_notrace_buf, 0); 2344 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2345 if (ftrace_graph_buf[0]) 2346 set_ftrace_early_graph(ftrace_graph_buf); 2347 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2348 } 2349 2350 static int 2351 ftrace_regex_release(struct inode *inode, struct file *file, int enable) 2352 { 2353 struct seq_file *m = (struct seq_file *)file->private_data; 2354 struct ftrace_iterator *iter; 2355 struct trace_parser *parser; 2356 2357 mutex_lock(&ftrace_regex_lock); 2358 if (file->f_mode & FMODE_READ) { 2359 iter = m->private; 2360 2361 seq_release(inode, file); 2362 } else 2363 iter = file->private_data; 2364 2365 parser = &iter->parser; 2366 if (trace_parser_loaded(parser)) { 2367 parser->buffer[parser->idx] = 0; 2368 ftrace_match_records(parser->buffer, parser->idx, enable); 2369 } 2370 2371 mutex_lock(&ftrace_lock); 2372 if (ftrace_start_up && ftrace_enabled) 2373 ftrace_run_update_code(FTRACE_ENABLE_CALLS); 2374 mutex_unlock(&ftrace_lock); 2375 2376 trace_parser_put(parser); 2377 kfree(iter); 2378 2379 mutex_unlock(&ftrace_regex_lock); 2380 return 0; 2381 } 2382 2383 static int 2384 ftrace_filter_release(struct inode *inode, struct file *file) 2385 { 2386 return ftrace_regex_release(inode, file, 1); 2387 } 2388 2389 static int 2390 ftrace_notrace_release(struct inode *inode, struct file *file) 2391 { 2392 return ftrace_regex_release(inode, file, 0); 2393 } 2394 2395 static const struct file_operations ftrace_avail_fops = { 2396 .open = ftrace_avail_open, 2397 .read = seq_read, 2398 .llseek = seq_lseek, 2399 .release = seq_release_private, 2400 }; 2401 2402 static const struct file_operations ftrace_failures_fops = { 2403 .open = ftrace_failures_open, 2404 .read = seq_read, 2405 .llseek = seq_lseek, 2406 .release = seq_release_private, 2407 }; 2408 2409 static const struct file_operations ftrace_filter_fops = { 2410 .open = ftrace_filter_open, 2411 .read = seq_read, 2412 .write = ftrace_filter_write, 2413 .llseek = ftrace_regex_lseek, 2414 .release = ftrace_filter_release, 2415 }; 2416 2417 static const struct file_operations ftrace_notrace_fops = { 2418 .open = ftrace_notrace_open, 2419 .read = seq_read, 2420 .write = ftrace_notrace_write, 2421 .llseek = ftrace_regex_lseek, 2422 .release = ftrace_notrace_release, 2423 }; 2424 2425 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2426 2427 static DEFINE_MUTEX(graph_lock); 2428 2429 int ftrace_graph_count; 2430 int ftrace_graph_filter_enabled; 2431 unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly; 2432 2433 static void * 2434 __g_next(struct seq_file *m, loff_t *pos) 2435 { 2436 if (*pos >= ftrace_graph_count) 2437 return NULL; 2438 return &ftrace_graph_funcs[*pos]; 2439 } 2440 2441 static void * 2442 g_next(struct seq_file *m, void *v, loff_t *pos) 2443 { 2444 (*pos)++; 2445 return __g_next(m, pos); 2446 } 2447 2448 static void *g_start(struct seq_file *m, loff_t *pos) 2449 { 2450 mutex_lock(&graph_lock); 2451 2452 /* Nothing, tell g_show to print all functions are enabled */ 2453 if (!ftrace_graph_filter_enabled && !*pos) 2454 return (void *)1; 2455 2456 return __g_next(m, pos); 2457 } 2458 2459 static void g_stop(struct seq_file *m, void *p) 2460 { 2461 mutex_unlock(&graph_lock); 2462 } 2463 2464 static int g_show(struct seq_file *m, void *v) 2465 { 2466 unsigned long *ptr = v; 2467 2468 if (!ptr) 2469 return 0; 2470 2471 if (ptr == (unsigned long *)1) { 2472 seq_printf(m, "#### all functions enabled ####\n"); 2473 return 0; 2474 } 2475 2476 seq_printf(m, "%ps\n", (void *)*ptr); 2477 2478 return 0; 2479 } 2480 2481 static const struct seq_operations ftrace_graph_seq_ops = { 2482 .start = g_start, 2483 .next = g_next, 2484 .stop = g_stop, 2485 .show = g_show, 2486 }; 2487 2488 static int 2489 ftrace_graph_open(struct inode *inode, struct file *file) 2490 { 2491 int ret = 0; 2492 2493 if (unlikely(ftrace_disabled)) 2494 return -ENODEV; 2495 2496 mutex_lock(&graph_lock); 2497 if ((file->f_mode & FMODE_WRITE) && 2498 (file->f_flags & O_TRUNC)) { 2499 ftrace_graph_filter_enabled = 0; 2500 ftrace_graph_count = 0; 2501 memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); 2502 } 2503 mutex_unlock(&graph_lock); 2504 2505 if (file->f_mode & FMODE_READ) 2506 ret = seq_open(file, &ftrace_graph_seq_ops); 2507 2508 return ret; 2509 } 2510 2511 static int 2512 ftrace_graph_release(struct inode *inode, struct file *file) 2513 { 2514 if (file->f_mode & FMODE_READ) 2515 seq_release(inode, file); 2516 return 0; 2517 } 2518 2519 static int 2520 ftrace_set_func(unsigned long *array, int *idx, char *buffer) 2521 { 2522 struct dyn_ftrace *rec; 2523 struct ftrace_page *pg; 2524 int search_len; 2525 int fail = 1; 2526 int type, not; 2527 char *search; 2528 bool exists; 2529 int i; 2530 2531 if (ftrace_disabled) 2532 return -ENODEV; 2533 2534 /* decode regex */ 2535 type = filter_parse_regex(buffer, strlen(buffer), &search, ¬); 2536 if (!not && *idx >= FTRACE_GRAPH_MAX_FUNCS) 2537 return -EBUSY; 2538 2539 search_len = strlen(search); 2540 2541 mutex_lock(&ftrace_lock); 2542 do_for_each_ftrace_rec(pg, rec) { 2543 2544 if (rec->flags & (FTRACE_FL_FAILED | FTRACE_FL_FREE)) 2545 continue; 2546 2547 if (ftrace_match_record(rec, search, search_len, type)) { 2548 /* if it is in the array */ 2549 exists = false; 2550 for (i = 0; i < *idx; i++) { 2551 if (array[i] == rec->ip) { 2552 exists = true; 2553 break; 2554 } 2555 } 2556 2557 if (!not) { 2558 fail = 0; 2559 if (!exists) { 2560 array[(*idx)++] = rec->ip; 2561 if (*idx >= FTRACE_GRAPH_MAX_FUNCS) 2562 goto out; 2563 } 2564 } else { 2565 if (exists) { 2566 array[i] = array[--(*idx)]; 2567 array[*idx] = 0; 2568 fail = 0; 2569 } 2570 } 2571 } 2572 } while_for_each_ftrace_rec(); 2573 out: 2574 mutex_unlock(&ftrace_lock); 2575 2576 if (fail) 2577 return -EINVAL; 2578 2579 ftrace_graph_filter_enabled = 1; 2580 return 0; 2581 } 2582 2583 static ssize_t 2584 ftrace_graph_write(struct file *file, const char __user *ubuf, 2585 size_t cnt, loff_t *ppos) 2586 { 2587 struct trace_parser parser; 2588 ssize_t read, ret; 2589 2590 if (!cnt) 2591 return 0; 2592 2593 mutex_lock(&graph_lock); 2594 2595 if (trace_parser_get_init(&parser, FTRACE_BUFF_MAX)) { 2596 ret = -ENOMEM; 2597 goto out_unlock; 2598 } 2599 2600 read = trace_get_user(&parser, ubuf, cnt, ppos); 2601 2602 if (read >= 0 && trace_parser_loaded((&parser))) { 2603 parser.buffer[parser.idx] = 0; 2604 2605 /* we allow only one expression at a time */ 2606 ret = ftrace_set_func(ftrace_graph_funcs, &ftrace_graph_count, 2607 parser.buffer); 2608 if (ret) 2609 goto out_free; 2610 } 2611 2612 ret = read; 2613 2614 out_free: 2615 trace_parser_put(&parser); 2616 out_unlock: 2617 mutex_unlock(&graph_lock); 2618 2619 return ret; 2620 } 2621 2622 static const struct file_operations ftrace_graph_fops = { 2623 .open = ftrace_graph_open, 2624 .read = seq_read, 2625 .write = ftrace_graph_write, 2626 .release = ftrace_graph_release, 2627 }; 2628 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2629 2630 static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer) 2631 { 2632 2633 trace_create_file("available_filter_functions", 0444, 2634 d_tracer, NULL, &ftrace_avail_fops); 2635 2636 trace_create_file("failures", 0444, 2637 d_tracer, NULL, &ftrace_failures_fops); 2638 2639 trace_create_file("set_ftrace_filter", 0644, d_tracer, 2640 NULL, &ftrace_filter_fops); 2641 2642 trace_create_file("set_ftrace_notrace", 0644, d_tracer, 2643 NULL, &ftrace_notrace_fops); 2644 2645 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 2646 trace_create_file("set_graph_function", 0444, d_tracer, 2647 NULL, 2648 &ftrace_graph_fops); 2649 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 2650 2651 return 0; 2652 } 2653 2654 static int ftrace_process_locs(struct module *mod, 2655 unsigned long *start, 2656 unsigned long *end) 2657 { 2658 unsigned long *p; 2659 unsigned long addr; 2660 unsigned long flags; 2661 2662 mutex_lock(&ftrace_lock); 2663 p = start; 2664 while (p < end) { 2665 addr = ftrace_call_adjust(*p++); 2666 /* 2667 * Some architecture linkers will pad between 2668 * the different mcount_loc sections of different 2669 * object files to satisfy alignments. 2670 * Skip any NULL pointers. 2671 */ 2672 if (!addr) 2673 continue; 2674 ftrace_record_ip(addr); 2675 } 2676 2677 /* disable interrupts to prevent kstop machine */ 2678 local_irq_save(flags); 2679 ftrace_update_code(mod); 2680 local_irq_restore(flags); 2681 mutex_unlock(&ftrace_lock); 2682 2683 return 0; 2684 } 2685 2686 #ifdef CONFIG_MODULES 2687 void ftrace_release_mod(struct module *mod) 2688 { 2689 struct dyn_ftrace *rec; 2690 struct ftrace_page *pg; 2691 2692 if (ftrace_disabled) 2693 return; 2694 2695 mutex_lock(&ftrace_lock); 2696 do_for_each_ftrace_rec(pg, rec) { 2697 if (within_module_core(rec->ip, mod)) { 2698 /* 2699 * rec->ip is changed in ftrace_free_rec() 2700 * It should not between s and e if record was freed. 2701 */ 2702 FTRACE_WARN_ON(rec->flags & FTRACE_FL_FREE); 2703 ftrace_free_rec(rec); 2704 } 2705 } while_for_each_ftrace_rec(); 2706 mutex_unlock(&ftrace_lock); 2707 } 2708 2709 static void ftrace_init_module(struct module *mod, 2710 unsigned long *start, unsigned long *end) 2711 { 2712 if (ftrace_disabled || start == end) 2713 return; 2714 ftrace_process_locs(mod, start, end); 2715 } 2716 2717 static int ftrace_module_notify(struct notifier_block *self, 2718 unsigned long val, void *data) 2719 { 2720 struct module *mod = data; 2721 2722 switch (val) { 2723 case MODULE_STATE_COMING: 2724 ftrace_init_module(mod, mod->ftrace_callsites, 2725 mod->ftrace_callsites + 2726 mod->num_ftrace_callsites); 2727 break; 2728 case MODULE_STATE_GOING: 2729 ftrace_release_mod(mod); 2730 break; 2731 } 2732 2733 return 0; 2734 } 2735 #else 2736 static int ftrace_module_notify(struct notifier_block *self, 2737 unsigned long val, void *data) 2738 { 2739 return 0; 2740 } 2741 #endif /* CONFIG_MODULES */ 2742 2743 struct notifier_block ftrace_module_nb = { 2744 .notifier_call = ftrace_module_notify, 2745 .priority = 0, 2746 }; 2747 2748 extern unsigned long __start_mcount_loc[]; 2749 extern unsigned long __stop_mcount_loc[]; 2750 2751 void __init ftrace_init(void) 2752 { 2753 unsigned long count, addr, flags; 2754 int ret; 2755 2756 /* Keep the ftrace pointer to the stub */ 2757 addr = (unsigned long)ftrace_stub; 2758 2759 local_irq_save(flags); 2760 ftrace_dyn_arch_init(&addr); 2761 local_irq_restore(flags); 2762 2763 /* ftrace_dyn_arch_init places the return code in addr */ 2764 if (addr) 2765 goto failed; 2766 2767 count = __stop_mcount_loc - __start_mcount_loc; 2768 2769 ret = ftrace_dyn_table_alloc(count); 2770 if (ret) 2771 goto failed; 2772 2773 last_ftrace_enabled = ftrace_enabled = 1; 2774 2775 ret = ftrace_process_locs(NULL, 2776 __start_mcount_loc, 2777 __stop_mcount_loc); 2778 2779 ret = register_module_notifier(&ftrace_module_nb); 2780 if (ret) 2781 pr_warning("Failed to register trace ftrace module notifier\n"); 2782 2783 set_ftrace_early_filters(); 2784 2785 return; 2786 failed: 2787 ftrace_disabled = 1; 2788 } 2789 2790 #else 2791 2792 static int __init ftrace_nodyn_init(void) 2793 { 2794 ftrace_enabled = 1; 2795 return 0; 2796 } 2797 device_initcall(ftrace_nodyn_init); 2798 2799 static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; } 2800 static inline void ftrace_startup_enable(int command) { } 2801 /* Keep as macros so we do not need to define the commands */ 2802 # define ftrace_startup(command) do { } while (0) 2803 # define ftrace_shutdown(command) do { } while (0) 2804 # define ftrace_startup_sysctl() do { } while (0) 2805 # define ftrace_shutdown_sysctl() do { } while (0) 2806 #endif /* CONFIG_DYNAMIC_FTRACE */ 2807 2808 static void clear_ftrace_swapper(void) 2809 { 2810 struct task_struct *p; 2811 int cpu; 2812 2813 get_online_cpus(); 2814 for_each_online_cpu(cpu) { 2815 p = idle_task(cpu); 2816 clear_tsk_trace_trace(p); 2817 } 2818 put_online_cpus(); 2819 } 2820 2821 static void set_ftrace_swapper(void) 2822 { 2823 struct task_struct *p; 2824 int cpu; 2825 2826 get_online_cpus(); 2827 for_each_online_cpu(cpu) { 2828 p = idle_task(cpu); 2829 set_tsk_trace_trace(p); 2830 } 2831 put_online_cpus(); 2832 } 2833 2834 static void clear_ftrace_pid(struct pid *pid) 2835 { 2836 struct task_struct *p; 2837 2838 rcu_read_lock(); 2839 do_each_pid_task(pid, PIDTYPE_PID, p) { 2840 clear_tsk_trace_trace(p); 2841 } while_each_pid_task(pid, PIDTYPE_PID, p); 2842 rcu_read_unlock(); 2843 2844 put_pid(pid); 2845 } 2846 2847 static void set_ftrace_pid(struct pid *pid) 2848 { 2849 struct task_struct *p; 2850 2851 rcu_read_lock(); 2852 do_each_pid_task(pid, PIDTYPE_PID, p) { 2853 set_tsk_trace_trace(p); 2854 } while_each_pid_task(pid, PIDTYPE_PID, p); 2855 rcu_read_unlock(); 2856 } 2857 2858 static void clear_ftrace_pid_task(struct pid *pid) 2859 { 2860 if (pid == ftrace_swapper_pid) 2861 clear_ftrace_swapper(); 2862 else 2863 clear_ftrace_pid(pid); 2864 } 2865 2866 static void set_ftrace_pid_task(struct pid *pid) 2867 { 2868 if (pid == ftrace_swapper_pid) 2869 set_ftrace_swapper(); 2870 else 2871 set_ftrace_pid(pid); 2872 } 2873 2874 static int ftrace_pid_add(int p) 2875 { 2876 struct pid *pid; 2877 struct ftrace_pid *fpid; 2878 int ret = -EINVAL; 2879 2880 mutex_lock(&ftrace_lock); 2881 2882 if (!p) 2883 pid = ftrace_swapper_pid; 2884 else 2885 pid = find_get_pid(p); 2886 2887 if (!pid) 2888 goto out; 2889 2890 ret = 0; 2891 2892 list_for_each_entry(fpid, &ftrace_pids, list) 2893 if (fpid->pid == pid) 2894 goto out_put; 2895 2896 ret = -ENOMEM; 2897 2898 fpid = kmalloc(sizeof(*fpid), GFP_KERNEL); 2899 if (!fpid) 2900 goto out_put; 2901 2902 list_add(&fpid->list, &ftrace_pids); 2903 fpid->pid = pid; 2904 2905 set_ftrace_pid_task(pid); 2906 2907 ftrace_update_pid_func(); 2908 ftrace_startup_enable(0); 2909 2910 mutex_unlock(&ftrace_lock); 2911 return 0; 2912 2913 out_put: 2914 if (pid != ftrace_swapper_pid) 2915 put_pid(pid); 2916 2917 out: 2918 mutex_unlock(&ftrace_lock); 2919 return ret; 2920 } 2921 2922 static void ftrace_pid_reset(void) 2923 { 2924 struct ftrace_pid *fpid, *safe; 2925 2926 mutex_lock(&ftrace_lock); 2927 list_for_each_entry_safe(fpid, safe, &ftrace_pids, list) { 2928 struct pid *pid = fpid->pid; 2929 2930 clear_ftrace_pid_task(pid); 2931 2932 list_del(&fpid->list); 2933 kfree(fpid); 2934 } 2935 2936 ftrace_update_pid_func(); 2937 ftrace_startup_enable(0); 2938 2939 mutex_unlock(&ftrace_lock); 2940 } 2941 2942 static void *fpid_start(struct seq_file *m, loff_t *pos) 2943 { 2944 mutex_lock(&ftrace_lock); 2945 2946 if (list_empty(&ftrace_pids) && (!*pos)) 2947 return (void *) 1; 2948 2949 return seq_list_start(&ftrace_pids, *pos); 2950 } 2951 2952 static void *fpid_next(struct seq_file *m, void *v, loff_t *pos) 2953 { 2954 if (v == (void *)1) 2955 return NULL; 2956 2957 return seq_list_next(v, &ftrace_pids, pos); 2958 } 2959 2960 static void fpid_stop(struct seq_file *m, void *p) 2961 { 2962 mutex_unlock(&ftrace_lock); 2963 } 2964 2965 static int fpid_show(struct seq_file *m, void *v) 2966 { 2967 const struct ftrace_pid *fpid = list_entry(v, struct ftrace_pid, list); 2968 2969 if (v == (void *)1) { 2970 seq_printf(m, "no pid\n"); 2971 return 0; 2972 } 2973 2974 if (fpid->pid == ftrace_swapper_pid) 2975 seq_printf(m, "swapper tasks\n"); 2976 else 2977 seq_printf(m, "%u\n", pid_vnr(fpid->pid)); 2978 2979 return 0; 2980 } 2981 2982 static const struct seq_operations ftrace_pid_sops = { 2983 .start = fpid_start, 2984 .next = fpid_next, 2985 .stop = fpid_stop, 2986 .show = fpid_show, 2987 }; 2988 2989 static int 2990 ftrace_pid_open(struct inode *inode, struct file *file) 2991 { 2992 int ret = 0; 2993 2994 if ((file->f_mode & FMODE_WRITE) && 2995 (file->f_flags & O_TRUNC)) 2996 ftrace_pid_reset(); 2997 2998 if (file->f_mode & FMODE_READ) 2999 ret = seq_open(file, &ftrace_pid_sops); 3000 3001 return ret; 3002 } 3003 3004 static ssize_t 3005 ftrace_pid_write(struct file *filp, const char __user *ubuf, 3006 size_t cnt, loff_t *ppos) 3007 { 3008 char buf[64], *tmp; 3009 long val; 3010 int ret; 3011 3012 if (cnt >= sizeof(buf)) 3013 return -EINVAL; 3014 3015 if (copy_from_user(&buf, ubuf, cnt)) 3016 return -EFAULT; 3017 3018 buf[cnt] = 0; 3019 3020 /* 3021 * Allow "echo > set_ftrace_pid" or "echo -n '' > set_ftrace_pid" 3022 * to clean the filter quietly. 3023 */ 3024 tmp = strstrip(buf); 3025 if (strlen(tmp) == 0) 3026 return 1; 3027 3028 ret = strict_strtol(tmp, 10, &val); 3029 if (ret < 0) 3030 return ret; 3031 3032 ret = ftrace_pid_add(val); 3033 3034 return ret ? ret : cnt; 3035 } 3036 3037 static int 3038 ftrace_pid_release(struct inode *inode, struct file *file) 3039 { 3040 if (file->f_mode & FMODE_READ) 3041 seq_release(inode, file); 3042 3043 return 0; 3044 } 3045 3046 static const struct file_operations ftrace_pid_fops = { 3047 .open = ftrace_pid_open, 3048 .write = ftrace_pid_write, 3049 .read = seq_read, 3050 .llseek = seq_lseek, 3051 .release = ftrace_pid_release, 3052 }; 3053 3054 static __init int ftrace_init_debugfs(void) 3055 { 3056 struct dentry *d_tracer; 3057 3058 d_tracer = tracing_init_dentry(); 3059 if (!d_tracer) 3060 return 0; 3061 3062 ftrace_init_dyn_debugfs(d_tracer); 3063 3064 trace_create_file("set_ftrace_pid", 0644, d_tracer, 3065 NULL, &ftrace_pid_fops); 3066 3067 ftrace_profile_debugfs(d_tracer); 3068 3069 return 0; 3070 } 3071 fs_initcall(ftrace_init_debugfs); 3072 3073 /** 3074 * ftrace_kill - kill ftrace 3075 * 3076 * This function should be used by panic code. It stops ftrace 3077 * but in a not so nice way. If you need to simply kill ftrace 3078 * from a non-atomic section, use ftrace_kill. 3079 */ 3080 void ftrace_kill(void) 3081 { 3082 ftrace_disabled = 1; 3083 ftrace_enabled = 0; 3084 clear_ftrace_function(); 3085 } 3086 3087 /** 3088 * register_ftrace_function - register a function for profiling 3089 * @ops - ops structure that holds the function for profiling. 3090 * 3091 * Register a function to be called by all functions in the 3092 * kernel. 3093 * 3094 * Note: @ops->func and all the functions it calls must be labeled 3095 * with "notrace", otherwise it will go into a 3096 * recursive loop. 3097 */ 3098 int register_ftrace_function(struct ftrace_ops *ops) 3099 { 3100 int ret; 3101 3102 if (unlikely(ftrace_disabled)) 3103 return -1; 3104 3105 mutex_lock(&ftrace_lock); 3106 3107 ret = __register_ftrace_function(ops); 3108 ftrace_startup(0); 3109 3110 mutex_unlock(&ftrace_lock); 3111 return ret; 3112 } 3113 3114 /** 3115 * unregister_ftrace_function - unregister a function for profiling. 3116 * @ops - ops structure that holds the function to unregister 3117 * 3118 * Unregister a function that was added to be called by ftrace profiling. 3119 */ 3120 int unregister_ftrace_function(struct ftrace_ops *ops) 3121 { 3122 int ret; 3123 3124 mutex_lock(&ftrace_lock); 3125 ret = __unregister_ftrace_function(ops); 3126 ftrace_shutdown(0); 3127 mutex_unlock(&ftrace_lock); 3128 3129 return ret; 3130 } 3131 3132 int 3133 ftrace_enable_sysctl(struct ctl_table *table, int write, 3134 void __user *buffer, size_t *lenp, 3135 loff_t *ppos) 3136 { 3137 int ret; 3138 3139 if (unlikely(ftrace_disabled)) 3140 return -ENODEV; 3141 3142 mutex_lock(&ftrace_lock); 3143 3144 ret = proc_dointvec(table, write, buffer, lenp, ppos); 3145 3146 if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) 3147 goto out; 3148 3149 last_ftrace_enabled = !!ftrace_enabled; 3150 3151 if (ftrace_enabled) { 3152 3153 ftrace_startup_sysctl(); 3154 3155 /* we are starting ftrace again */ 3156 if (ftrace_list != &ftrace_list_end) { 3157 if (ftrace_list->next == &ftrace_list_end) 3158 ftrace_trace_function = ftrace_list->func; 3159 else 3160 ftrace_trace_function = ftrace_list_func; 3161 } 3162 3163 } else { 3164 /* stopping ftrace calls (just send to ftrace_stub) */ 3165 ftrace_trace_function = ftrace_stub; 3166 3167 ftrace_shutdown_sysctl(); 3168 } 3169 3170 out: 3171 mutex_unlock(&ftrace_lock); 3172 return ret; 3173 } 3174 3175 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 3176 3177 static int ftrace_graph_active; 3178 static struct notifier_block ftrace_suspend_notifier; 3179 3180 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 3181 { 3182 return 0; 3183 } 3184 3185 /* The callbacks that hook a function */ 3186 trace_func_graph_ret_t ftrace_graph_return = 3187 (trace_func_graph_ret_t)ftrace_stub; 3188 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; 3189 3190 /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ 3191 static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) 3192 { 3193 int i; 3194 int ret = 0; 3195 unsigned long flags; 3196 int start = 0, end = FTRACE_RETSTACK_ALLOC_SIZE; 3197 struct task_struct *g, *t; 3198 3199 for (i = 0; i < FTRACE_RETSTACK_ALLOC_SIZE; i++) { 3200 ret_stack_list[i] = kmalloc(FTRACE_RETFUNC_DEPTH 3201 * sizeof(struct ftrace_ret_stack), 3202 GFP_KERNEL); 3203 if (!ret_stack_list[i]) { 3204 start = 0; 3205 end = i; 3206 ret = -ENOMEM; 3207 goto free; 3208 } 3209 } 3210 3211 read_lock_irqsave(&tasklist_lock, flags); 3212 do_each_thread(g, t) { 3213 if (start == end) { 3214 ret = -EAGAIN; 3215 goto unlock; 3216 } 3217 3218 if (t->ret_stack == NULL) { 3219 atomic_set(&t->tracing_graph_pause, 0); 3220 atomic_set(&t->trace_overrun, 0); 3221 t->curr_ret_stack = -1; 3222 /* Make sure the tasks see the -1 first: */ 3223 smp_wmb(); 3224 t->ret_stack = ret_stack_list[start++]; 3225 } 3226 } while_each_thread(g, t); 3227 3228 unlock: 3229 read_unlock_irqrestore(&tasklist_lock, flags); 3230 free: 3231 for (i = start; i < end; i++) 3232 kfree(ret_stack_list[i]); 3233 return ret; 3234 } 3235 3236 static void 3237 ftrace_graph_probe_sched_switch(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); 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); 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