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 Nadia Yvette Chambers 14 */ 15 16 #include <linux/stop_machine.h> 17 #include <linux/clocksource.h> 18 #include <linux/sched/task.h> 19 #include <linux/kallsyms.h> 20 #include <linux/seq_file.h> 21 #include <linux/suspend.h> 22 #include <linux/tracefs.h> 23 #include <linux/hardirq.h> 24 #include <linux/kthread.h> 25 #include <linux/uaccess.h> 26 #include <linux/bsearch.h> 27 #include <linux/module.h> 28 #include <linux/ftrace.h> 29 #include <linux/sysctl.h> 30 #include <linux/slab.h> 31 #include <linux/ctype.h> 32 #include <linux/sort.h> 33 #include <linux/list.h> 34 #include <linux/hash.h> 35 #include <linux/rcupdate.h> 36 37 #include <trace/events/sched.h> 38 39 #include <asm/sections.h> 40 #include <asm/setup.h> 41 42 #include "trace_output.h" 43 #include "trace_stat.h" 44 45 #define FTRACE_WARN_ON(cond) \ 46 ({ \ 47 int ___r = cond; \ 48 if (WARN_ON(___r)) \ 49 ftrace_kill(); \ 50 ___r; \ 51 }) 52 53 #define FTRACE_WARN_ON_ONCE(cond) \ 54 ({ \ 55 int ___r = cond; \ 56 if (WARN_ON_ONCE(___r)) \ 57 ftrace_kill(); \ 58 ___r; \ 59 }) 60 61 /* hash bits for specific function selection */ 62 #define FTRACE_HASH_BITS 7 63 #define FTRACE_FUNC_HASHSIZE (1 << FTRACE_HASH_BITS) 64 #define FTRACE_HASH_DEFAULT_BITS 10 65 #define FTRACE_HASH_MAX_BITS 12 66 67 #ifdef CONFIG_DYNAMIC_FTRACE 68 #define INIT_OPS_HASH(opsname) \ 69 .func_hash = &opsname.local_hash, \ 70 .local_hash.regex_lock = __MUTEX_INITIALIZER(opsname.local_hash.regex_lock), 71 #define ASSIGN_OPS_HASH(opsname, val) \ 72 .func_hash = val, \ 73 .local_hash.regex_lock = __MUTEX_INITIALIZER(opsname.local_hash.regex_lock), 74 #else 75 #define INIT_OPS_HASH(opsname) 76 #define ASSIGN_OPS_HASH(opsname, val) 77 #endif 78 79 static struct ftrace_ops ftrace_list_end __read_mostly = { 80 .func = ftrace_stub, 81 .flags = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_STUB, 82 INIT_OPS_HASH(ftrace_list_end) 83 }; 84 85 /* ftrace_enabled is a method to turn ftrace on or off */ 86 int ftrace_enabled __read_mostly; 87 static int last_ftrace_enabled; 88 89 /* Current function tracing op */ 90 struct ftrace_ops *function_trace_op __read_mostly = &ftrace_list_end; 91 /* What to set function_trace_op to */ 92 static struct ftrace_ops *set_function_trace_op; 93 94 static bool ftrace_pids_enabled(struct ftrace_ops *ops) 95 { 96 struct trace_array *tr; 97 98 if (!(ops->flags & FTRACE_OPS_FL_PID) || !ops->private) 99 return false; 100 101 tr = ops->private; 102 103 return tr->function_pids != NULL; 104 } 105 106 static void ftrace_update_trampoline(struct ftrace_ops *ops); 107 108 /* 109 * ftrace_disabled is set when an anomaly is discovered. 110 * ftrace_disabled is much stronger than ftrace_enabled. 111 */ 112 static int ftrace_disabled __read_mostly; 113 114 static DEFINE_MUTEX(ftrace_lock); 115 116 static struct ftrace_ops __rcu *ftrace_ops_list __read_mostly = &ftrace_list_end; 117 ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; 118 static struct ftrace_ops global_ops; 119 120 #if ARCH_SUPPORTS_FTRACE_OPS 121 static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, 122 struct ftrace_ops *op, struct pt_regs *regs); 123 #else 124 /* See comment below, where ftrace_ops_list_func is defined */ 125 static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip); 126 #define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops) 127 #endif 128 129 /* 130 * Traverse the ftrace_global_list, invoking all entries. The reason that we 131 * can use rcu_dereference_raw_notrace() is that elements removed from this list 132 * are simply leaked, so there is no need to interact with a grace-period 133 * mechanism. The rcu_dereference_raw_notrace() calls are needed to handle 134 * concurrent insertions into the ftrace_global_list. 135 * 136 * Silly Alpha and silly pointer-speculation compiler optimizations! 137 */ 138 #define do_for_each_ftrace_op(op, list) \ 139 op = rcu_dereference_raw_notrace(list); \ 140 do 141 142 /* 143 * Optimized for just a single item in the list (as that is the normal case). 144 */ 145 #define while_for_each_ftrace_op(op) \ 146 while (likely(op = rcu_dereference_raw_notrace((op)->next)) && \ 147 unlikely((op) != &ftrace_list_end)) 148 149 static inline void ftrace_ops_init(struct ftrace_ops *ops) 150 { 151 #ifdef CONFIG_DYNAMIC_FTRACE 152 if (!(ops->flags & FTRACE_OPS_FL_INITIALIZED)) { 153 mutex_init(&ops->local_hash.regex_lock); 154 ops->func_hash = &ops->local_hash; 155 ops->flags |= FTRACE_OPS_FL_INITIALIZED; 156 } 157 #endif 158 } 159 160 /** 161 * ftrace_nr_registered_ops - return number of ops registered 162 * 163 * Returns the number of ftrace_ops registered and tracing functions 164 */ 165 int ftrace_nr_registered_ops(void) 166 { 167 struct ftrace_ops *ops; 168 int cnt = 0; 169 170 mutex_lock(&ftrace_lock); 171 172 for (ops = rcu_dereference_protected(ftrace_ops_list, 173 lockdep_is_held(&ftrace_lock)); 174 ops != &ftrace_list_end; 175 ops = rcu_dereference_protected(ops->next, 176 lockdep_is_held(&ftrace_lock))) 177 cnt++; 178 179 mutex_unlock(&ftrace_lock); 180 181 return cnt; 182 } 183 184 static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip, 185 struct ftrace_ops *op, struct pt_regs *regs) 186 { 187 struct trace_array *tr = op->private; 188 189 if (tr && this_cpu_read(tr->trace_buffer.data->ftrace_ignore_pid)) 190 return; 191 192 op->saved_func(ip, parent_ip, op, regs); 193 } 194 195 /** 196 * clear_ftrace_function - reset the ftrace function 197 * 198 * This NULLs the ftrace function and in essence stops 199 * tracing. There may be lag 200 */ 201 void clear_ftrace_function(void) 202 { 203 ftrace_trace_function = ftrace_stub; 204 } 205 206 static void ftrace_sync(struct work_struct *work) 207 { 208 /* 209 * This function is just a stub to implement a hard force 210 * of synchronize_sched(). This requires synchronizing 211 * tasks even in userspace and idle. 212 * 213 * Yes, function tracing is rude. 214 */ 215 } 216 217 static void ftrace_sync_ipi(void *data) 218 { 219 /* Probably not needed, but do it anyway */ 220 smp_rmb(); 221 } 222 223 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 224 static void update_function_graph_func(void); 225 226 /* Both enabled by default (can be cleared by function_graph tracer flags */ 227 static bool fgraph_sleep_time = true; 228 static bool fgraph_graph_time = true; 229 230 #else 231 static inline void update_function_graph_func(void) { } 232 #endif 233 234 235 static ftrace_func_t ftrace_ops_get_list_func(struct ftrace_ops *ops) 236 { 237 /* 238 * If this is a dynamic, RCU, or per CPU ops, or we force list func, 239 * then it needs to call the list anyway. 240 */ 241 if (ops->flags & (FTRACE_OPS_FL_DYNAMIC | FTRACE_OPS_FL_RCU) || 242 FTRACE_FORCE_LIST_FUNC) 243 return ftrace_ops_list_func; 244 245 return ftrace_ops_get_func(ops); 246 } 247 248 static void update_ftrace_function(void) 249 { 250 ftrace_func_t func; 251 252 /* 253 * Prepare the ftrace_ops that the arch callback will use. 254 * If there's only one ftrace_ops registered, the ftrace_ops_list 255 * will point to the ops we want. 256 */ 257 set_function_trace_op = rcu_dereference_protected(ftrace_ops_list, 258 lockdep_is_held(&ftrace_lock)); 259 260 /* If there's no ftrace_ops registered, just call the stub function */ 261 if (set_function_trace_op == &ftrace_list_end) { 262 func = ftrace_stub; 263 264 /* 265 * If we are at the end of the list and this ops is 266 * recursion safe and not dynamic and the arch supports passing ops, 267 * then have the mcount trampoline call the function directly. 268 */ 269 } else if (rcu_dereference_protected(ftrace_ops_list->next, 270 lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) { 271 func = ftrace_ops_get_list_func(ftrace_ops_list); 272 273 } else { 274 /* Just use the default ftrace_ops */ 275 set_function_trace_op = &ftrace_list_end; 276 func = ftrace_ops_list_func; 277 } 278 279 update_function_graph_func(); 280 281 /* If there's no change, then do nothing more here */ 282 if (ftrace_trace_function == func) 283 return; 284 285 /* 286 * If we are using the list function, it doesn't care 287 * about the function_trace_ops. 288 */ 289 if (func == ftrace_ops_list_func) { 290 ftrace_trace_function = func; 291 /* 292 * Don't even bother setting function_trace_ops, 293 * it would be racy to do so anyway. 294 */ 295 return; 296 } 297 298 #ifndef CONFIG_DYNAMIC_FTRACE 299 /* 300 * For static tracing, we need to be a bit more careful. 301 * The function change takes affect immediately. Thus, 302 * we need to coorditate the setting of the function_trace_ops 303 * with the setting of the ftrace_trace_function. 304 * 305 * Set the function to the list ops, which will call the 306 * function we want, albeit indirectly, but it handles the 307 * ftrace_ops and doesn't depend on function_trace_op. 308 */ 309 ftrace_trace_function = ftrace_ops_list_func; 310 /* 311 * Make sure all CPUs see this. Yes this is slow, but static 312 * tracing is slow and nasty to have enabled. 313 */ 314 schedule_on_each_cpu(ftrace_sync); 315 /* Now all cpus are using the list ops. */ 316 function_trace_op = set_function_trace_op; 317 /* Make sure the function_trace_op is visible on all CPUs */ 318 smp_wmb(); 319 /* Nasty way to force a rmb on all cpus */ 320 smp_call_function(ftrace_sync_ipi, NULL, 1); 321 /* OK, we are all set to update the ftrace_trace_function now! */ 322 #endif /* !CONFIG_DYNAMIC_FTRACE */ 323 324 ftrace_trace_function = func; 325 } 326 327 int using_ftrace_ops_list_func(void) 328 { 329 return ftrace_trace_function == ftrace_ops_list_func; 330 } 331 332 static void add_ftrace_ops(struct ftrace_ops __rcu **list, 333 struct ftrace_ops *ops) 334 { 335 rcu_assign_pointer(ops->next, *list); 336 337 /* 338 * We are entering ops into the list but another 339 * CPU might be walking that list. We need to make sure 340 * the ops->next pointer is valid before another CPU sees 341 * the ops pointer included into the list. 342 */ 343 rcu_assign_pointer(*list, ops); 344 } 345 346 static int remove_ftrace_ops(struct ftrace_ops __rcu **list, 347 struct ftrace_ops *ops) 348 { 349 struct ftrace_ops **p; 350 351 /* 352 * If we are removing the last function, then simply point 353 * to the ftrace_stub. 354 */ 355 if (rcu_dereference_protected(*list, 356 lockdep_is_held(&ftrace_lock)) == ops && 357 rcu_dereference_protected(ops->next, 358 lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) { 359 *list = &ftrace_list_end; 360 return 0; 361 } 362 363 for (p = list; *p != &ftrace_list_end; p = &(*p)->next) 364 if (*p == ops) 365 break; 366 367 if (*p != ops) 368 return -1; 369 370 *p = (*p)->next; 371 return 0; 372 } 373 374 static void ftrace_update_trampoline(struct ftrace_ops *ops); 375 376 static int __register_ftrace_function(struct ftrace_ops *ops) 377 { 378 if (ops->flags & FTRACE_OPS_FL_DELETED) 379 return -EINVAL; 380 381 if (WARN_ON(ops->flags & FTRACE_OPS_FL_ENABLED)) 382 return -EBUSY; 383 384 #ifndef CONFIG_DYNAMIC_FTRACE_WITH_REGS 385 /* 386 * If the ftrace_ops specifies SAVE_REGS, then it only can be used 387 * if the arch supports it, or SAVE_REGS_IF_SUPPORTED is also set. 388 * Setting SAVE_REGS_IF_SUPPORTED makes SAVE_REGS irrelevant. 389 */ 390 if (ops->flags & FTRACE_OPS_FL_SAVE_REGS && 391 !(ops->flags & FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED)) 392 return -EINVAL; 393 394 if (ops->flags & FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED) 395 ops->flags |= FTRACE_OPS_FL_SAVE_REGS; 396 #endif 397 398 if (!core_kernel_data((unsigned long)ops)) 399 ops->flags |= FTRACE_OPS_FL_DYNAMIC; 400 401 add_ftrace_ops(&ftrace_ops_list, ops); 402 403 /* Always save the function, and reset at unregistering */ 404 ops->saved_func = ops->func; 405 406 if (ftrace_pids_enabled(ops)) 407 ops->func = ftrace_pid_func; 408 409 ftrace_update_trampoline(ops); 410 411 if (ftrace_enabled) 412 update_ftrace_function(); 413 414 return 0; 415 } 416 417 static int __unregister_ftrace_function(struct ftrace_ops *ops) 418 { 419 int ret; 420 421 if (WARN_ON(!(ops->flags & FTRACE_OPS_FL_ENABLED))) 422 return -EBUSY; 423 424 ret = remove_ftrace_ops(&ftrace_ops_list, ops); 425 426 if (ret < 0) 427 return ret; 428 429 if (ftrace_enabled) 430 update_ftrace_function(); 431 432 ops->func = ops->saved_func; 433 434 return 0; 435 } 436 437 static void ftrace_update_pid_func(void) 438 { 439 struct ftrace_ops *op; 440 441 /* Only do something if we are tracing something */ 442 if (ftrace_trace_function == ftrace_stub) 443 return; 444 445 do_for_each_ftrace_op(op, ftrace_ops_list) { 446 if (op->flags & FTRACE_OPS_FL_PID) { 447 op->func = ftrace_pids_enabled(op) ? 448 ftrace_pid_func : op->saved_func; 449 ftrace_update_trampoline(op); 450 } 451 } while_for_each_ftrace_op(op); 452 453 update_ftrace_function(); 454 } 455 456 #ifdef CONFIG_FUNCTION_PROFILER 457 struct ftrace_profile { 458 struct hlist_node node; 459 unsigned long ip; 460 unsigned long counter; 461 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 462 unsigned long long time; 463 unsigned long long time_squared; 464 #endif 465 }; 466 467 struct ftrace_profile_page { 468 struct ftrace_profile_page *next; 469 unsigned long index; 470 struct ftrace_profile records[]; 471 }; 472 473 struct ftrace_profile_stat { 474 atomic_t disabled; 475 struct hlist_head *hash; 476 struct ftrace_profile_page *pages; 477 struct ftrace_profile_page *start; 478 struct tracer_stat stat; 479 }; 480 481 #define PROFILE_RECORDS_SIZE \ 482 (PAGE_SIZE - offsetof(struct ftrace_profile_page, records)) 483 484 #define PROFILES_PER_PAGE \ 485 (PROFILE_RECORDS_SIZE / sizeof(struct ftrace_profile)) 486 487 static int ftrace_profile_enabled __read_mostly; 488 489 /* ftrace_profile_lock - synchronize the enable and disable of the profiler */ 490 static DEFINE_MUTEX(ftrace_profile_lock); 491 492 static DEFINE_PER_CPU(struct ftrace_profile_stat, ftrace_profile_stats); 493 494 #define FTRACE_PROFILE_HASH_BITS 10 495 #define FTRACE_PROFILE_HASH_SIZE (1 << FTRACE_PROFILE_HASH_BITS) 496 497 static void * 498 function_stat_next(void *v, int idx) 499 { 500 struct ftrace_profile *rec = v; 501 struct ftrace_profile_page *pg; 502 503 pg = (struct ftrace_profile_page *)((unsigned long)rec & PAGE_MASK); 504 505 again: 506 if (idx != 0) 507 rec++; 508 509 if ((void *)rec >= (void *)&pg->records[pg->index]) { 510 pg = pg->next; 511 if (!pg) 512 return NULL; 513 rec = &pg->records[0]; 514 if (!rec->counter) 515 goto again; 516 } 517 518 return rec; 519 } 520 521 static void *function_stat_start(struct tracer_stat *trace) 522 { 523 struct ftrace_profile_stat *stat = 524 container_of(trace, struct ftrace_profile_stat, stat); 525 526 if (!stat || !stat->start) 527 return NULL; 528 529 return function_stat_next(&stat->start->records[0], 0); 530 } 531 532 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 533 /* function graph compares on total time */ 534 static int function_stat_cmp(void *p1, void *p2) 535 { 536 struct ftrace_profile *a = p1; 537 struct ftrace_profile *b = p2; 538 539 if (a->time < b->time) 540 return -1; 541 if (a->time > b->time) 542 return 1; 543 else 544 return 0; 545 } 546 #else 547 /* not function graph compares against hits */ 548 static int function_stat_cmp(void *p1, void *p2) 549 { 550 struct ftrace_profile *a = p1; 551 struct ftrace_profile *b = p2; 552 553 if (a->counter < b->counter) 554 return -1; 555 if (a->counter > b->counter) 556 return 1; 557 else 558 return 0; 559 } 560 #endif 561 562 static int function_stat_headers(struct seq_file *m) 563 { 564 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 565 seq_puts(m, " Function " 566 "Hit Time Avg s^2\n" 567 " -------- " 568 "--- ---- --- ---\n"); 569 #else 570 seq_puts(m, " Function Hit\n" 571 " -------- ---\n"); 572 #endif 573 return 0; 574 } 575 576 static int function_stat_show(struct seq_file *m, void *v) 577 { 578 struct ftrace_profile *rec = v; 579 char str[KSYM_SYMBOL_LEN]; 580 int ret = 0; 581 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 582 static struct trace_seq s; 583 unsigned long long avg; 584 unsigned long long stddev; 585 #endif 586 mutex_lock(&ftrace_profile_lock); 587 588 /* we raced with function_profile_reset() */ 589 if (unlikely(rec->counter == 0)) { 590 ret = -EBUSY; 591 goto out; 592 } 593 594 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 595 avg = rec->time; 596 do_div(avg, rec->counter); 597 if (tracing_thresh && (avg < tracing_thresh)) 598 goto out; 599 #endif 600 601 kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); 602 seq_printf(m, " %-30.30s %10lu", str, rec->counter); 603 604 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 605 seq_puts(m, " "); 606 607 /* Sample standard deviation (s^2) */ 608 if (rec->counter <= 1) 609 stddev = 0; 610 else { 611 /* 612 * Apply Welford's method: 613 * s^2 = 1 / (n * (n-1)) * (n * \Sum (x_i)^2 - (\Sum x_i)^2) 614 */ 615 stddev = rec->counter * rec->time_squared - 616 rec->time * rec->time; 617 618 /* 619 * Divide only 1000 for ns^2 -> us^2 conversion. 620 * trace_print_graph_duration will divide 1000 again. 621 */ 622 do_div(stddev, rec->counter * (rec->counter - 1) * 1000); 623 } 624 625 trace_seq_init(&s); 626 trace_print_graph_duration(rec->time, &s); 627 trace_seq_puts(&s, " "); 628 trace_print_graph_duration(avg, &s); 629 trace_seq_puts(&s, " "); 630 trace_print_graph_duration(stddev, &s); 631 trace_print_seq(m, &s); 632 #endif 633 seq_putc(m, '\n'); 634 out: 635 mutex_unlock(&ftrace_profile_lock); 636 637 return ret; 638 } 639 640 static void ftrace_profile_reset(struct ftrace_profile_stat *stat) 641 { 642 struct ftrace_profile_page *pg; 643 644 pg = stat->pages = stat->start; 645 646 while (pg) { 647 memset(pg->records, 0, PROFILE_RECORDS_SIZE); 648 pg->index = 0; 649 pg = pg->next; 650 } 651 652 memset(stat->hash, 0, 653 FTRACE_PROFILE_HASH_SIZE * sizeof(struct hlist_head)); 654 } 655 656 int ftrace_profile_pages_init(struct ftrace_profile_stat *stat) 657 { 658 struct ftrace_profile_page *pg; 659 int functions; 660 int pages; 661 int i; 662 663 /* If we already allocated, do nothing */ 664 if (stat->pages) 665 return 0; 666 667 stat->pages = (void *)get_zeroed_page(GFP_KERNEL); 668 if (!stat->pages) 669 return -ENOMEM; 670 671 #ifdef CONFIG_DYNAMIC_FTRACE 672 functions = ftrace_update_tot_cnt; 673 #else 674 /* 675 * We do not know the number of functions that exist because 676 * dynamic tracing is what counts them. With past experience 677 * we have around 20K functions. That should be more than enough. 678 * It is highly unlikely we will execute every function in 679 * the kernel. 680 */ 681 functions = 20000; 682 #endif 683 684 pg = stat->start = stat->pages; 685 686 pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE); 687 688 for (i = 1; i < pages; i++) { 689 pg->next = (void *)get_zeroed_page(GFP_KERNEL); 690 if (!pg->next) 691 goto out_free; 692 pg = pg->next; 693 } 694 695 return 0; 696 697 out_free: 698 pg = stat->start; 699 while (pg) { 700 unsigned long tmp = (unsigned long)pg; 701 702 pg = pg->next; 703 free_page(tmp); 704 } 705 706 stat->pages = NULL; 707 stat->start = NULL; 708 709 return -ENOMEM; 710 } 711 712 static int ftrace_profile_init_cpu(int cpu) 713 { 714 struct ftrace_profile_stat *stat; 715 int size; 716 717 stat = &per_cpu(ftrace_profile_stats, cpu); 718 719 if (stat->hash) { 720 /* If the profile is already created, simply reset it */ 721 ftrace_profile_reset(stat); 722 return 0; 723 } 724 725 /* 726 * We are profiling all functions, but usually only a few thousand 727 * functions are hit. We'll make a hash of 1024 items. 728 */ 729 size = FTRACE_PROFILE_HASH_SIZE; 730 731 stat->hash = kzalloc(sizeof(struct hlist_head) * size, GFP_KERNEL); 732 733 if (!stat->hash) 734 return -ENOMEM; 735 736 /* Preallocate the function profiling pages */ 737 if (ftrace_profile_pages_init(stat) < 0) { 738 kfree(stat->hash); 739 stat->hash = NULL; 740 return -ENOMEM; 741 } 742 743 return 0; 744 } 745 746 static int ftrace_profile_init(void) 747 { 748 int cpu; 749 int ret = 0; 750 751 for_each_possible_cpu(cpu) { 752 ret = ftrace_profile_init_cpu(cpu); 753 if (ret) 754 break; 755 } 756 757 return ret; 758 } 759 760 /* interrupts must be disabled */ 761 static struct ftrace_profile * 762 ftrace_find_profiled_func(struct ftrace_profile_stat *stat, unsigned long ip) 763 { 764 struct ftrace_profile *rec; 765 struct hlist_head *hhd; 766 unsigned long key; 767 768 key = hash_long(ip, FTRACE_PROFILE_HASH_BITS); 769 hhd = &stat->hash[key]; 770 771 if (hlist_empty(hhd)) 772 return NULL; 773 774 hlist_for_each_entry_rcu_notrace(rec, hhd, node) { 775 if (rec->ip == ip) 776 return rec; 777 } 778 779 return NULL; 780 } 781 782 static void ftrace_add_profile(struct ftrace_profile_stat *stat, 783 struct ftrace_profile *rec) 784 { 785 unsigned long key; 786 787 key = hash_long(rec->ip, FTRACE_PROFILE_HASH_BITS); 788 hlist_add_head_rcu(&rec->node, &stat->hash[key]); 789 } 790 791 /* 792 * The memory is already allocated, this simply finds a new record to use. 793 */ 794 static struct ftrace_profile * 795 ftrace_profile_alloc(struct ftrace_profile_stat *stat, unsigned long ip) 796 { 797 struct ftrace_profile *rec = NULL; 798 799 /* prevent recursion (from NMIs) */ 800 if (atomic_inc_return(&stat->disabled) != 1) 801 goto out; 802 803 /* 804 * Try to find the function again since an NMI 805 * could have added it 806 */ 807 rec = ftrace_find_profiled_func(stat, ip); 808 if (rec) 809 goto out; 810 811 if (stat->pages->index == PROFILES_PER_PAGE) { 812 if (!stat->pages->next) 813 goto out; 814 stat->pages = stat->pages->next; 815 } 816 817 rec = &stat->pages->records[stat->pages->index++]; 818 rec->ip = ip; 819 ftrace_add_profile(stat, rec); 820 821 out: 822 atomic_dec(&stat->disabled); 823 824 return rec; 825 } 826 827 static void 828 function_profile_call(unsigned long ip, unsigned long parent_ip, 829 struct ftrace_ops *ops, struct pt_regs *regs) 830 { 831 struct ftrace_profile_stat *stat; 832 struct ftrace_profile *rec; 833 unsigned long flags; 834 835 if (!ftrace_profile_enabled) 836 return; 837 838 local_irq_save(flags); 839 840 stat = this_cpu_ptr(&ftrace_profile_stats); 841 if (!stat->hash || !ftrace_profile_enabled) 842 goto out; 843 844 rec = ftrace_find_profiled_func(stat, ip); 845 if (!rec) { 846 rec = ftrace_profile_alloc(stat, ip); 847 if (!rec) 848 goto out; 849 } 850 851 rec->counter++; 852 out: 853 local_irq_restore(flags); 854 } 855 856 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 857 static int profile_graph_entry(struct ftrace_graph_ent *trace) 858 { 859 int index = trace->depth; 860 861 function_profile_call(trace->func, 0, NULL, NULL); 862 863 /* If function graph is shutting down, ret_stack can be NULL */ 864 if (!current->ret_stack) 865 return 0; 866 867 if (index >= 0 && index < FTRACE_RETFUNC_DEPTH) 868 current->ret_stack[index].subtime = 0; 869 870 return 1; 871 } 872 873 static void profile_graph_return(struct ftrace_graph_ret *trace) 874 { 875 struct ftrace_profile_stat *stat; 876 unsigned long long calltime; 877 struct ftrace_profile *rec; 878 unsigned long flags; 879 880 local_irq_save(flags); 881 stat = this_cpu_ptr(&ftrace_profile_stats); 882 if (!stat->hash || !ftrace_profile_enabled) 883 goto out; 884 885 /* If the calltime was zero'd ignore it */ 886 if (!trace->calltime) 887 goto out; 888 889 calltime = trace->rettime - trace->calltime; 890 891 if (!fgraph_graph_time) { 892 int index; 893 894 index = trace->depth; 895 896 /* Append this call time to the parent time to subtract */ 897 if (index) 898 current->ret_stack[index - 1].subtime += calltime; 899 900 if (current->ret_stack[index].subtime < calltime) 901 calltime -= current->ret_stack[index].subtime; 902 else 903 calltime = 0; 904 } 905 906 rec = ftrace_find_profiled_func(stat, trace->func); 907 if (rec) { 908 rec->time += calltime; 909 rec->time_squared += calltime * calltime; 910 } 911 912 out: 913 local_irq_restore(flags); 914 } 915 916 static int register_ftrace_profiler(void) 917 { 918 return register_ftrace_graph(&profile_graph_return, 919 &profile_graph_entry); 920 } 921 922 static void unregister_ftrace_profiler(void) 923 { 924 unregister_ftrace_graph(); 925 } 926 #else 927 static struct ftrace_ops ftrace_profile_ops __read_mostly = { 928 .func = function_profile_call, 929 .flags = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_INITIALIZED, 930 INIT_OPS_HASH(ftrace_profile_ops) 931 }; 932 933 static int register_ftrace_profiler(void) 934 { 935 return register_ftrace_function(&ftrace_profile_ops); 936 } 937 938 static void unregister_ftrace_profiler(void) 939 { 940 unregister_ftrace_function(&ftrace_profile_ops); 941 } 942 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 943 944 static ssize_t 945 ftrace_profile_write(struct file *filp, const char __user *ubuf, 946 size_t cnt, loff_t *ppos) 947 { 948 unsigned long val; 949 int ret; 950 951 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 952 if (ret) 953 return ret; 954 955 val = !!val; 956 957 mutex_lock(&ftrace_profile_lock); 958 if (ftrace_profile_enabled ^ val) { 959 if (val) { 960 ret = ftrace_profile_init(); 961 if (ret < 0) { 962 cnt = ret; 963 goto out; 964 } 965 966 ret = register_ftrace_profiler(); 967 if (ret < 0) { 968 cnt = ret; 969 goto out; 970 } 971 ftrace_profile_enabled = 1; 972 } else { 973 ftrace_profile_enabled = 0; 974 /* 975 * unregister_ftrace_profiler calls stop_machine 976 * so this acts like an synchronize_sched. 977 */ 978 unregister_ftrace_profiler(); 979 } 980 } 981 out: 982 mutex_unlock(&ftrace_profile_lock); 983 984 *ppos += cnt; 985 986 return cnt; 987 } 988 989 static ssize_t 990 ftrace_profile_read(struct file *filp, char __user *ubuf, 991 size_t cnt, loff_t *ppos) 992 { 993 char buf[64]; /* big enough to hold a number */ 994 int r; 995 996 r = sprintf(buf, "%u\n", ftrace_profile_enabled); 997 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); 998 } 999 1000 static const struct file_operations ftrace_profile_fops = { 1001 .open = tracing_open_generic, 1002 .read = ftrace_profile_read, 1003 .write = ftrace_profile_write, 1004 .llseek = default_llseek, 1005 }; 1006 1007 /* used to initialize the real stat files */ 1008 static struct tracer_stat function_stats __initdata = { 1009 .name = "functions", 1010 .stat_start = function_stat_start, 1011 .stat_next = function_stat_next, 1012 .stat_cmp = function_stat_cmp, 1013 .stat_headers = function_stat_headers, 1014 .stat_show = function_stat_show 1015 }; 1016 1017 static __init void ftrace_profile_tracefs(struct dentry *d_tracer) 1018 { 1019 struct ftrace_profile_stat *stat; 1020 struct dentry *entry; 1021 char *name; 1022 int ret; 1023 int cpu; 1024 1025 for_each_possible_cpu(cpu) { 1026 stat = &per_cpu(ftrace_profile_stats, cpu); 1027 1028 name = kasprintf(GFP_KERNEL, "function%d", cpu); 1029 if (!name) { 1030 /* 1031 * The files created are permanent, if something happens 1032 * we still do not free memory. 1033 */ 1034 WARN(1, 1035 "Could not allocate stat file for cpu %d\n", 1036 cpu); 1037 return; 1038 } 1039 stat->stat = function_stats; 1040 stat->stat.name = name; 1041 ret = register_stat_tracer(&stat->stat); 1042 if (ret) { 1043 WARN(1, 1044 "Could not register function stat for cpu %d\n", 1045 cpu); 1046 kfree(name); 1047 return; 1048 } 1049 } 1050 1051 entry = tracefs_create_file("function_profile_enabled", 0644, 1052 d_tracer, NULL, &ftrace_profile_fops); 1053 if (!entry) 1054 pr_warn("Could not create tracefs 'function_profile_enabled' entry\n"); 1055 } 1056 1057 #else /* CONFIG_FUNCTION_PROFILER */ 1058 static __init void ftrace_profile_tracefs(struct dentry *d_tracer) 1059 { 1060 } 1061 #endif /* CONFIG_FUNCTION_PROFILER */ 1062 1063 static struct pid * const ftrace_swapper_pid = &init_struct_pid; 1064 1065 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 1066 static int ftrace_graph_active; 1067 #else 1068 # define ftrace_graph_active 0 1069 #endif 1070 1071 #ifdef CONFIG_DYNAMIC_FTRACE 1072 1073 static struct ftrace_ops *removed_ops; 1074 1075 /* 1076 * Set when doing a global update, like enabling all recs or disabling them. 1077 * It is not set when just updating a single ftrace_ops. 1078 */ 1079 static bool update_all_ops; 1080 1081 #ifndef CONFIG_FTRACE_MCOUNT_RECORD 1082 # error Dynamic ftrace depends on MCOUNT_RECORD 1083 #endif 1084 1085 struct ftrace_func_entry { 1086 struct hlist_node hlist; 1087 unsigned long ip; 1088 }; 1089 1090 struct ftrace_func_probe { 1091 struct ftrace_probe_ops *probe_ops; 1092 struct ftrace_ops ops; 1093 struct trace_array *tr; 1094 struct list_head list; 1095 void *data; 1096 int ref; 1097 }; 1098 1099 /* 1100 * We make these constant because no one should touch them, 1101 * but they are used as the default "empty hash", to avoid allocating 1102 * it all the time. These are in a read only section such that if 1103 * anyone does try to modify it, it will cause an exception. 1104 */ 1105 static const struct hlist_head empty_buckets[1]; 1106 static const struct ftrace_hash empty_hash = { 1107 .buckets = (struct hlist_head *)empty_buckets, 1108 }; 1109 #define EMPTY_HASH ((struct ftrace_hash *)&empty_hash) 1110 1111 static struct ftrace_ops global_ops = { 1112 .func = ftrace_stub, 1113 .local_hash.notrace_hash = EMPTY_HASH, 1114 .local_hash.filter_hash = EMPTY_HASH, 1115 INIT_OPS_HASH(global_ops) 1116 .flags = FTRACE_OPS_FL_RECURSION_SAFE | 1117 FTRACE_OPS_FL_INITIALIZED | 1118 FTRACE_OPS_FL_PID, 1119 }; 1120 1121 /* 1122 * This is used by __kernel_text_address() to return true if the 1123 * address is on a dynamically allocated trampoline that would 1124 * not return true for either core_kernel_text() or 1125 * is_module_text_address(). 1126 */ 1127 bool is_ftrace_trampoline(unsigned long addr) 1128 { 1129 struct ftrace_ops *op; 1130 bool ret = false; 1131 1132 /* 1133 * Some of the ops may be dynamically allocated, 1134 * they are freed after a synchronize_sched(). 1135 */ 1136 preempt_disable_notrace(); 1137 1138 do_for_each_ftrace_op(op, ftrace_ops_list) { 1139 /* 1140 * This is to check for dynamically allocated trampolines. 1141 * Trampolines that are in kernel text will have 1142 * core_kernel_text() return true. 1143 */ 1144 if (op->trampoline && op->trampoline_size) 1145 if (addr >= op->trampoline && 1146 addr < op->trampoline + op->trampoline_size) { 1147 ret = true; 1148 goto out; 1149 } 1150 } while_for_each_ftrace_op(op); 1151 1152 out: 1153 preempt_enable_notrace(); 1154 1155 return ret; 1156 } 1157 1158 struct ftrace_page { 1159 struct ftrace_page *next; 1160 struct dyn_ftrace *records; 1161 int index; 1162 int size; 1163 }; 1164 1165 #define ENTRY_SIZE sizeof(struct dyn_ftrace) 1166 #define ENTRIES_PER_PAGE (PAGE_SIZE / ENTRY_SIZE) 1167 1168 /* estimate from running different kernels */ 1169 #define NR_TO_INIT 10000 1170 1171 static struct ftrace_page *ftrace_pages_start; 1172 static struct ftrace_page *ftrace_pages; 1173 1174 static __always_inline unsigned long 1175 ftrace_hash_key(struct ftrace_hash *hash, unsigned long ip) 1176 { 1177 if (hash->size_bits > 0) 1178 return hash_long(ip, hash->size_bits); 1179 1180 return 0; 1181 } 1182 1183 /* Only use this function if ftrace_hash_empty() has already been tested */ 1184 static __always_inline struct ftrace_func_entry * 1185 __ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip) 1186 { 1187 unsigned long key; 1188 struct ftrace_func_entry *entry; 1189 struct hlist_head *hhd; 1190 1191 key = ftrace_hash_key(hash, ip); 1192 hhd = &hash->buckets[key]; 1193 1194 hlist_for_each_entry_rcu_notrace(entry, hhd, hlist) { 1195 if (entry->ip == ip) 1196 return entry; 1197 } 1198 return NULL; 1199 } 1200 1201 /** 1202 * ftrace_lookup_ip - Test to see if an ip exists in an ftrace_hash 1203 * @hash: The hash to look at 1204 * @ip: The instruction pointer to test 1205 * 1206 * Search a given @hash to see if a given instruction pointer (@ip) 1207 * exists in it. 1208 * 1209 * Returns the entry that holds the @ip if found. NULL otherwise. 1210 */ 1211 struct ftrace_func_entry * 1212 ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip) 1213 { 1214 if (ftrace_hash_empty(hash)) 1215 return NULL; 1216 1217 return __ftrace_lookup_ip(hash, ip); 1218 } 1219 1220 static void __add_hash_entry(struct ftrace_hash *hash, 1221 struct ftrace_func_entry *entry) 1222 { 1223 struct hlist_head *hhd; 1224 unsigned long key; 1225 1226 key = ftrace_hash_key(hash, entry->ip); 1227 hhd = &hash->buckets[key]; 1228 hlist_add_head(&entry->hlist, hhd); 1229 hash->count++; 1230 } 1231 1232 static int add_hash_entry(struct ftrace_hash *hash, unsigned long ip) 1233 { 1234 struct ftrace_func_entry *entry; 1235 1236 entry = kmalloc(sizeof(*entry), GFP_KERNEL); 1237 if (!entry) 1238 return -ENOMEM; 1239 1240 entry->ip = ip; 1241 __add_hash_entry(hash, entry); 1242 1243 return 0; 1244 } 1245 1246 static void 1247 free_hash_entry(struct ftrace_hash *hash, 1248 struct ftrace_func_entry *entry) 1249 { 1250 hlist_del(&entry->hlist); 1251 kfree(entry); 1252 hash->count--; 1253 } 1254 1255 static void 1256 remove_hash_entry(struct ftrace_hash *hash, 1257 struct ftrace_func_entry *entry) 1258 { 1259 hlist_del_rcu(&entry->hlist); 1260 hash->count--; 1261 } 1262 1263 static void ftrace_hash_clear(struct ftrace_hash *hash) 1264 { 1265 struct hlist_head *hhd; 1266 struct hlist_node *tn; 1267 struct ftrace_func_entry *entry; 1268 int size = 1 << hash->size_bits; 1269 int i; 1270 1271 if (!hash->count) 1272 return; 1273 1274 for (i = 0; i < size; i++) { 1275 hhd = &hash->buckets[i]; 1276 hlist_for_each_entry_safe(entry, tn, hhd, hlist) 1277 free_hash_entry(hash, entry); 1278 } 1279 FTRACE_WARN_ON(hash->count); 1280 } 1281 1282 static void free_ftrace_mod(struct ftrace_mod_load *ftrace_mod) 1283 { 1284 list_del(&ftrace_mod->list); 1285 kfree(ftrace_mod->module); 1286 kfree(ftrace_mod->func); 1287 kfree(ftrace_mod); 1288 } 1289 1290 static void clear_ftrace_mod_list(struct list_head *head) 1291 { 1292 struct ftrace_mod_load *p, *n; 1293 1294 /* stack tracer isn't supported yet */ 1295 if (!head) 1296 return; 1297 1298 mutex_lock(&ftrace_lock); 1299 list_for_each_entry_safe(p, n, head, list) 1300 free_ftrace_mod(p); 1301 mutex_unlock(&ftrace_lock); 1302 } 1303 1304 static void free_ftrace_hash(struct ftrace_hash *hash) 1305 { 1306 if (!hash || hash == EMPTY_HASH) 1307 return; 1308 ftrace_hash_clear(hash); 1309 kfree(hash->buckets); 1310 kfree(hash); 1311 } 1312 1313 static void __free_ftrace_hash_rcu(struct rcu_head *rcu) 1314 { 1315 struct ftrace_hash *hash; 1316 1317 hash = container_of(rcu, struct ftrace_hash, rcu); 1318 free_ftrace_hash(hash); 1319 } 1320 1321 static void free_ftrace_hash_rcu(struct ftrace_hash *hash) 1322 { 1323 if (!hash || hash == EMPTY_HASH) 1324 return; 1325 call_rcu_sched(&hash->rcu, __free_ftrace_hash_rcu); 1326 } 1327 1328 void ftrace_free_filter(struct ftrace_ops *ops) 1329 { 1330 ftrace_ops_init(ops); 1331 free_ftrace_hash(ops->func_hash->filter_hash); 1332 free_ftrace_hash(ops->func_hash->notrace_hash); 1333 } 1334 1335 static struct ftrace_hash *alloc_ftrace_hash(int size_bits) 1336 { 1337 struct ftrace_hash *hash; 1338 int size; 1339 1340 hash = kzalloc(sizeof(*hash), GFP_KERNEL); 1341 if (!hash) 1342 return NULL; 1343 1344 size = 1 << size_bits; 1345 hash->buckets = kcalloc(size, sizeof(*hash->buckets), GFP_KERNEL); 1346 1347 if (!hash->buckets) { 1348 kfree(hash); 1349 return NULL; 1350 } 1351 1352 hash->size_bits = size_bits; 1353 1354 return hash; 1355 } 1356 1357 1358 static int ftrace_add_mod(struct trace_array *tr, 1359 const char *func, const char *module, 1360 int enable) 1361 { 1362 struct ftrace_mod_load *ftrace_mod; 1363 struct list_head *mod_head = enable ? &tr->mod_trace : &tr->mod_notrace; 1364 1365 ftrace_mod = kzalloc(sizeof(*ftrace_mod), GFP_KERNEL); 1366 if (!ftrace_mod) 1367 return -ENOMEM; 1368 1369 ftrace_mod->func = kstrdup(func, GFP_KERNEL); 1370 ftrace_mod->module = kstrdup(module, GFP_KERNEL); 1371 ftrace_mod->enable = enable; 1372 1373 if (!ftrace_mod->func || !ftrace_mod->module) 1374 goto out_free; 1375 1376 list_add(&ftrace_mod->list, mod_head); 1377 1378 return 0; 1379 1380 out_free: 1381 free_ftrace_mod(ftrace_mod); 1382 1383 return -ENOMEM; 1384 } 1385 1386 static struct ftrace_hash * 1387 alloc_and_copy_ftrace_hash(int size_bits, struct ftrace_hash *hash) 1388 { 1389 struct ftrace_func_entry *entry; 1390 struct ftrace_hash *new_hash; 1391 int size; 1392 int ret; 1393 int i; 1394 1395 new_hash = alloc_ftrace_hash(size_bits); 1396 if (!new_hash) 1397 return NULL; 1398 1399 if (hash) 1400 new_hash->flags = hash->flags; 1401 1402 /* Empty hash? */ 1403 if (ftrace_hash_empty(hash)) 1404 return new_hash; 1405 1406 size = 1 << hash->size_bits; 1407 for (i = 0; i < size; i++) { 1408 hlist_for_each_entry(entry, &hash->buckets[i], hlist) { 1409 ret = add_hash_entry(new_hash, entry->ip); 1410 if (ret < 0) 1411 goto free_hash; 1412 } 1413 } 1414 1415 FTRACE_WARN_ON(new_hash->count != hash->count); 1416 1417 return new_hash; 1418 1419 free_hash: 1420 free_ftrace_hash(new_hash); 1421 return NULL; 1422 } 1423 1424 static void 1425 ftrace_hash_rec_disable_modify(struct ftrace_ops *ops, int filter_hash); 1426 static void 1427 ftrace_hash_rec_enable_modify(struct ftrace_ops *ops, int filter_hash); 1428 1429 static int ftrace_hash_ipmodify_update(struct ftrace_ops *ops, 1430 struct ftrace_hash *new_hash); 1431 1432 static struct ftrace_hash * 1433 __ftrace_hash_move(struct ftrace_hash *src) 1434 { 1435 struct ftrace_func_entry *entry; 1436 struct hlist_node *tn; 1437 struct hlist_head *hhd; 1438 struct ftrace_hash *new_hash; 1439 int size = src->count; 1440 int bits = 0; 1441 int i; 1442 1443 /* 1444 * If the new source is empty, just return the empty_hash. 1445 */ 1446 if (ftrace_hash_empty(src)) 1447 return EMPTY_HASH; 1448 1449 /* 1450 * Make the hash size about 1/2 the # found 1451 */ 1452 for (size /= 2; size; size >>= 1) 1453 bits++; 1454 1455 /* Don't allocate too much */ 1456 if (bits > FTRACE_HASH_MAX_BITS) 1457 bits = FTRACE_HASH_MAX_BITS; 1458 1459 new_hash = alloc_ftrace_hash(bits); 1460 if (!new_hash) 1461 return NULL; 1462 1463 new_hash->flags = src->flags; 1464 1465 size = 1 << src->size_bits; 1466 for (i = 0; i < size; i++) { 1467 hhd = &src->buckets[i]; 1468 hlist_for_each_entry_safe(entry, tn, hhd, hlist) { 1469 remove_hash_entry(src, entry); 1470 __add_hash_entry(new_hash, entry); 1471 } 1472 } 1473 1474 return new_hash; 1475 } 1476 1477 static int 1478 ftrace_hash_move(struct ftrace_ops *ops, int enable, 1479 struct ftrace_hash **dst, struct ftrace_hash *src) 1480 { 1481 struct ftrace_hash *new_hash; 1482 int ret; 1483 1484 /* Reject setting notrace hash on IPMODIFY ftrace_ops */ 1485 if (ops->flags & FTRACE_OPS_FL_IPMODIFY && !enable) 1486 return -EINVAL; 1487 1488 new_hash = __ftrace_hash_move(src); 1489 if (!new_hash) 1490 return -ENOMEM; 1491 1492 /* Make sure this can be applied if it is IPMODIFY ftrace_ops */ 1493 if (enable) { 1494 /* IPMODIFY should be updated only when filter_hash updating */ 1495 ret = ftrace_hash_ipmodify_update(ops, new_hash); 1496 if (ret < 0) { 1497 free_ftrace_hash(new_hash); 1498 return ret; 1499 } 1500 } 1501 1502 /* 1503 * Remove the current set, update the hash and add 1504 * them back. 1505 */ 1506 ftrace_hash_rec_disable_modify(ops, enable); 1507 1508 rcu_assign_pointer(*dst, new_hash); 1509 1510 ftrace_hash_rec_enable_modify(ops, enable); 1511 1512 return 0; 1513 } 1514 1515 static bool hash_contains_ip(unsigned long ip, 1516 struct ftrace_ops_hash *hash) 1517 { 1518 /* 1519 * The function record is a match if it exists in the filter 1520 * hash and not in the notrace hash. Note, an emty hash is 1521 * considered a match for the filter hash, but an empty 1522 * notrace hash is considered not in the notrace hash. 1523 */ 1524 return (ftrace_hash_empty(hash->filter_hash) || 1525 __ftrace_lookup_ip(hash->filter_hash, ip)) && 1526 (ftrace_hash_empty(hash->notrace_hash) || 1527 !__ftrace_lookup_ip(hash->notrace_hash, ip)); 1528 } 1529 1530 /* 1531 * Test the hashes for this ops to see if we want to call 1532 * the ops->func or not. 1533 * 1534 * It's a match if the ip is in the ops->filter_hash or 1535 * the filter_hash does not exist or is empty, 1536 * AND 1537 * the ip is not in the ops->notrace_hash. 1538 * 1539 * This needs to be called with preemption disabled as 1540 * the hashes are freed with call_rcu_sched(). 1541 */ 1542 static int 1543 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs) 1544 { 1545 struct ftrace_ops_hash hash; 1546 int ret; 1547 1548 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS 1549 /* 1550 * There's a small race when adding ops that the ftrace handler 1551 * that wants regs, may be called without them. We can not 1552 * allow that handler to be called if regs is NULL. 1553 */ 1554 if (regs == NULL && (ops->flags & FTRACE_OPS_FL_SAVE_REGS)) 1555 return 0; 1556 #endif 1557 1558 rcu_assign_pointer(hash.filter_hash, ops->func_hash->filter_hash); 1559 rcu_assign_pointer(hash.notrace_hash, ops->func_hash->notrace_hash); 1560 1561 if (hash_contains_ip(ip, &hash)) 1562 ret = 1; 1563 else 1564 ret = 0; 1565 1566 return ret; 1567 } 1568 1569 /* 1570 * This is a double for. Do not use 'break' to break out of the loop, 1571 * you must use a goto. 1572 */ 1573 #define do_for_each_ftrace_rec(pg, rec) \ 1574 for (pg = ftrace_pages_start; pg; pg = pg->next) { \ 1575 int _____i; \ 1576 for (_____i = 0; _____i < pg->index; _____i++) { \ 1577 rec = &pg->records[_____i]; 1578 1579 #define while_for_each_ftrace_rec() \ 1580 } \ 1581 } 1582 1583 1584 static int ftrace_cmp_recs(const void *a, const void *b) 1585 { 1586 const struct dyn_ftrace *key = a; 1587 const struct dyn_ftrace *rec = b; 1588 1589 if (key->flags < rec->ip) 1590 return -1; 1591 if (key->ip >= rec->ip + MCOUNT_INSN_SIZE) 1592 return 1; 1593 return 0; 1594 } 1595 1596 /** 1597 * ftrace_location_range - return the first address of a traced location 1598 * if it touches the given ip range 1599 * @start: start of range to search. 1600 * @end: end of range to search (inclusive). @end points to the last byte 1601 * to check. 1602 * 1603 * Returns rec->ip if the related ftrace location is a least partly within 1604 * the given address range. That is, the first address of the instruction 1605 * that is either a NOP or call to the function tracer. It checks the ftrace 1606 * internal tables to determine if the address belongs or not. 1607 */ 1608 unsigned long ftrace_location_range(unsigned long start, unsigned long end) 1609 { 1610 struct ftrace_page *pg; 1611 struct dyn_ftrace *rec; 1612 struct dyn_ftrace key; 1613 1614 key.ip = start; 1615 key.flags = end; /* overload flags, as it is unsigned long */ 1616 1617 for (pg = ftrace_pages_start; pg; pg = pg->next) { 1618 if (end < pg->records[0].ip || 1619 start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE)) 1620 continue; 1621 rec = bsearch(&key, pg->records, pg->index, 1622 sizeof(struct dyn_ftrace), 1623 ftrace_cmp_recs); 1624 if (rec) 1625 return rec->ip; 1626 } 1627 1628 return 0; 1629 } 1630 1631 /** 1632 * ftrace_location - return true if the ip giving is a traced location 1633 * @ip: the instruction pointer to check 1634 * 1635 * Returns rec->ip if @ip given is a pointer to a ftrace location. 1636 * That is, the instruction that is either a NOP or call to 1637 * the function tracer. It checks the ftrace internal tables to 1638 * determine if the address belongs or not. 1639 */ 1640 unsigned long ftrace_location(unsigned long ip) 1641 { 1642 return ftrace_location_range(ip, ip); 1643 } 1644 1645 /** 1646 * ftrace_text_reserved - return true if range contains an ftrace location 1647 * @start: start of range to search 1648 * @end: end of range to search (inclusive). @end points to the last byte to check. 1649 * 1650 * Returns 1 if @start and @end contains a ftrace location. 1651 * That is, the instruction that is either a NOP or call to 1652 * the function tracer. It checks the ftrace internal tables to 1653 * determine if the address belongs or not. 1654 */ 1655 int ftrace_text_reserved(const void *start, const void *end) 1656 { 1657 unsigned long ret; 1658 1659 ret = ftrace_location_range((unsigned long)start, 1660 (unsigned long)end); 1661 1662 return (int)!!ret; 1663 } 1664 1665 /* Test if ops registered to this rec needs regs */ 1666 static bool test_rec_ops_needs_regs(struct dyn_ftrace *rec) 1667 { 1668 struct ftrace_ops *ops; 1669 bool keep_regs = false; 1670 1671 for (ops = ftrace_ops_list; 1672 ops != &ftrace_list_end; ops = ops->next) { 1673 /* pass rec in as regs to have non-NULL val */ 1674 if (ftrace_ops_test(ops, rec->ip, rec)) { 1675 if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) { 1676 keep_regs = true; 1677 break; 1678 } 1679 } 1680 } 1681 1682 return keep_regs; 1683 } 1684 1685 static bool __ftrace_hash_rec_update(struct ftrace_ops *ops, 1686 int filter_hash, 1687 bool inc) 1688 { 1689 struct ftrace_hash *hash; 1690 struct ftrace_hash *other_hash; 1691 struct ftrace_page *pg; 1692 struct dyn_ftrace *rec; 1693 bool update = false; 1694 int count = 0; 1695 int all = false; 1696 1697 /* Only update if the ops has been registered */ 1698 if (!(ops->flags & FTRACE_OPS_FL_ENABLED)) 1699 return false; 1700 1701 /* 1702 * In the filter_hash case: 1703 * If the count is zero, we update all records. 1704 * Otherwise we just update the items in the hash. 1705 * 1706 * In the notrace_hash case: 1707 * We enable the update in the hash. 1708 * As disabling notrace means enabling the tracing, 1709 * and enabling notrace means disabling, the inc variable 1710 * gets inversed. 1711 */ 1712 if (filter_hash) { 1713 hash = ops->func_hash->filter_hash; 1714 other_hash = ops->func_hash->notrace_hash; 1715 if (ftrace_hash_empty(hash)) 1716 all = true; 1717 } else { 1718 inc = !inc; 1719 hash = ops->func_hash->notrace_hash; 1720 other_hash = ops->func_hash->filter_hash; 1721 /* 1722 * If the notrace hash has no items, 1723 * then there's nothing to do. 1724 */ 1725 if (ftrace_hash_empty(hash)) 1726 return false; 1727 } 1728 1729 do_for_each_ftrace_rec(pg, rec) { 1730 int in_other_hash = 0; 1731 int in_hash = 0; 1732 int match = 0; 1733 1734 if (rec->flags & FTRACE_FL_DISABLED) 1735 continue; 1736 1737 if (all) { 1738 /* 1739 * Only the filter_hash affects all records. 1740 * Update if the record is not in the notrace hash. 1741 */ 1742 if (!other_hash || !ftrace_lookup_ip(other_hash, rec->ip)) 1743 match = 1; 1744 } else { 1745 in_hash = !!ftrace_lookup_ip(hash, rec->ip); 1746 in_other_hash = !!ftrace_lookup_ip(other_hash, rec->ip); 1747 1748 /* 1749 * If filter_hash is set, we want to match all functions 1750 * that are in the hash but not in the other hash. 1751 * 1752 * If filter_hash is not set, then we are decrementing. 1753 * That means we match anything that is in the hash 1754 * and also in the other_hash. That is, we need to turn 1755 * off functions in the other hash because they are disabled 1756 * by this hash. 1757 */ 1758 if (filter_hash && in_hash && !in_other_hash) 1759 match = 1; 1760 else if (!filter_hash && in_hash && 1761 (in_other_hash || ftrace_hash_empty(other_hash))) 1762 match = 1; 1763 } 1764 if (!match) 1765 continue; 1766 1767 if (inc) { 1768 rec->flags++; 1769 if (FTRACE_WARN_ON(ftrace_rec_count(rec) == FTRACE_REF_MAX)) 1770 return false; 1771 1772 /* 1773 * If there's only a single callback registered to a 1774 * function, and the ops has a trampoline registered 1775 * for it, then we can call it directly. 1776 */ 1777 if (ftrace_rec_count(rec) == 1 && ops->trampoline) 1778 rec->flags |= FTRACE_FL_TRAMP; 1779 else 1780 /* 1781 * If we are adding another function callback 1782 * to this function, and the previous had a 1783 * custom trampoline in use, then we need to go 1784 * back to the default trampoline. 1785 */ 1786 rec->flags &= ~FTRACE_FL_TRAMP; 1787 1788 /* 1789 * If any ops wants regs saved for this function 1790 * then all ops will get saved regs. 1791 */ 1792 if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) 1793 rec->flags |= FTRACE_FL_REGS; 1794 } else { 1795 if (FTRACE_WARN_ON(ftrace_rec_count(rec) == 0)) 1796 return false; 1797 rec->flags--; 1798 1799 /* 1800 * If the rec had REGS enabled and the ops that is 1801 * being removed had REGS set, then see if there is 1802 * still any ops for this record that wants regs. 1803 * If not, we can stop recording them. 1804 */ 1805 if (ftrace_rec_count(rec) > 0 && 1806 rec->flags & FTRACE_FL_REGS && 1807 ops->flags & FTRACE_OPS_FL_SAVE_REGS) { 1808 if (!test_rec_ops_needs_regs(rec)) 1809 rec->flags &= ~FTRACE_FL_REGS; 1810 } 1811 1812 /* 1813 * If the rec had TRAMP enabled, then it needs to 1814 * be cleared. As TRAMP can only be enabled iff 1815 * there is only a single ops attached to it. 1816 * In otherwords, always disable it on decrementing. 1817 * In the future, we may set it if rec count is 1818 * decremented to one, and the ops that is left 1819 * has a trampoline. 1820 */ 1821 rec->flags &= ~FTRACE_FL_TRAMP; 1822 1823 /* 1824 * flags will be cleared in ftrace_check_record() 1825 * if rec count is zero. 1826 */ 1827 } 1828 count++; 1829 1830 /* Must match FTRACE_UPDATE_CALLS in ftrace_modify_all_code() */ 1831 update |= ftrace_test_record(rec, 1) != FTRACE_UPDATE_IGNORE; 1832 1833 /* Shortcut, if we handled all records, we are done. */ 1834 if (!all && count == hash->count) 1835 return update; 1836 } while_for_each_ftrace_rec(); 1837 1838 return update; 1839 } 1840 1841 static bool ftrace_hash_rec_disable(struct ftrace_ops *ops, 1842 int filter_hash) 1843 { 1844 return __ftrace_hash_rec_update(ops, filter_hash, 0); 1845 } 1846 1847 static bool ftrace_hash_rec_enable(struct ftrace_ops *ops, 1848 int filter_hash) 1849 { 1850 return __ftrace_hash_rec_update(ops, filter_hash, 1); 1851 } 1852 1853 static void ftrace_hash_rec_update_modify(struct ftrace_ops *ops, 1854 int filter_hash, int inc) 1855 { 1856 struct ftrace_ops *op; 1857 1858 __ftrace_hash_rec_update(ops, filter_hash, inc); 1859 1860 if (ops->func_hash != &global_ops.local_hash) 1861 return; 1862 1863 /* 1864 * If the ops shares the global_ops hash, then we need to update 1865 * all ops that are enabled and use this hash. 1866 */ 1867 do_for_each_ftrace_op(op, ftrace_ops_list) { 1868 /* Already done */ 1869 if (op == ops) 1870 continue; 1871 if (op->func_hash == &global_ops.local_hash) 1872 __ftrace_hash_rec_update(op, filter_hash, inc); 1873 } while_for_each_ftrace_op(op); 1874 } 1875 1876 static void ftrace_hash_rec_disable_modify(struct ftrace_ops *ops, 1877 int filter_hash) 1878 { 1879 ftrace_hash_rec_update_modify(ops, filter_hash, 0); 1880 } 1881 1882 static void ftrace_hash_rec_enable_modify(struct ftrace_ops *ops, 1883 int filter_hash) 1884 { 1885 ftrace_hash_rec_update_modify(ops, filter_hash, 1); 1886 } 1887 1888 /* 1889 * Try to update IPMODIFY flag on each ftrace_rec. Return 0 if it is OK 1890 * or no-needed to update, -EBUSY if it detects a conflict of the flag 1891 * on a ftrace_rec, and -EINVAL if the new_hash tries to trace all recs. 1892 * Note that old_hash and new_hash has below meanings 1893 * - If the hash is NULL, it hits all recs (if IPMODIFY is set, this is rejected) 1894 * - If the hash is EMPTY_HASH, it hits nothing 1895 * - Anything else hits the recs which match the hash entries. 1896 */ 1897 static int __ftrace_hash_update_ipmodify(struct ftrace_ops *ops, 1898 struct ftrace_hash *old_hash, 1899 struct ftrace_hash *new_hash) 1900 { 1901 struct ftrace_page *pg; 1902 struct dyn_ftrace *rec, *end = NULL; 1903 int in_old, in_new; 1904 1905 /* Only update if the ops has been registered */ 1906 if (!(ops->flags & FTRACE_OPS_FL_ENABLED)) 1907 return 0; 1908 1909 if (!(ops->flags & FTRACE_OPS_FL_IPMODIFY)) 1910 return 0; 1911 1912 /* 1913 * Since the IPMODIFY is a very address sensitive action, we do not 1914 * allow ftrace_ops to set all functions to new hash. 1915 */ 1916 if (!new_hash || !old_hash) 1917 return -EINVAL; 1918 1919 /* Update rec->flags */ 1920 do_for_each_ftrace_rec(pg, rec) { 1921 1922 if (rec->flags & FTRACE_FL_DISABLED) 1923 continue; 1924 1925 /* We need to update only differences of filter_hash */ 1926 in_old = !!ftrace_lookup_ip(old_hash, rec->ip); 1927 in_new = !!ftrace_lookup_ip(new_hash, rec->ip); 1928 if (in_old == in_new) 1929 continue; 1930 1931 if (in_new) { 1932 /* New entries must ensure no others are using it */ 1933 if (rec->flags & FTRACE_FL_IPMODIFY) 1934 goto rollback; 1935 rec->flags |= FTRACE_FL_IPMODIFY; 1936 } else /* Removed entry */ 1937 rec->flags &= ~FTRACE_FL_IPMODIFY; 1938 } while_for_each_ftrace_rec(); 1939 1940 return 0; 1941 1942 rollback: 1943 end = rec; 1944 1945 /* Roll back what we did above */ 1946 do_for_each_ftrace_rec(pg, rec) { 1947 1948 if (rec->flags & FTRACE_FL_DISABLED) 1949 continue; 1950 1951 if (rec == end) 1952 goto err_out; 1953 1954 in_old = !!ftrace_lookup_ip(old_hash, rec->ip); 1955 in_new = !!ftrace_lookup_ip(new_hash, rec->ip); 1956 if (in_old == in_new) 1957 continue; 1958 1959 if (in_new) 1960 rec->flags &= ~FTRACE_FL_IPMODIFY; 1961 else 1962 rec->flags |= FTRACE_FL_IPMODIFY; 1963 } while_for_each_ftrace_rec(); 1964 1965 err_out: 1966 return -EBUSY; 1967 } 1968 1969 static int ftrace_hash_ipmodify_enable(struct ftrace_ops *ops) 1970 { 1971 struct ftrace_hash *hash = ops->func_hash->filter_hash; 1972 1973 if (ftrace_hash_empty(hash)) 1974 hash = NULL; 1975 1976 return __ftrace_hash_update_ipmodify(ops, EMPTY_HASH, hash); 1977 } 1978 1979 /* Disabling always succeeds */ 1980 static void ftrace_hash_ipmodify_disable(struct ftrace_ops *ops) 1981 { 1982 struct ftrace_hash *hash = ops->func_hash->filter_hash; 1983 1984 if (ftrace_hash_empty(hash)) 1985 hash = NULL; 1986 1987 __ftrace_hash_update_ipmodify(ops, hash, EMPTY_HASH); 1988 } 1989 1990 static int ftrace_hash_ipmodify_update(struct ftrace_ops *ops, 1991 struct ftrace_hash *new_hash) 1992 { 1993 struct ftrace_hash *old_hash = ops->func_hash->filter_hash; 1994 1995 if (ftrace_hash_empty(old_hash)) 1996 old_hash = NULL; 1997 1998 if (ftrace_hash_empty(new_hash)) 1999 new_hash = NULL; 2000 2001 return __ftrace_hash_update_ipmodify(ops, old_hash, new_hash); 2002 } 2003 2004 static void print_ip_ins(const char *fmt, const unsigned char *p) 2005 { 2006 int i; 2007 2008 printk(KERN_CONT "%s", fmt); 2009 2010 for (i = 0; i < MCOUNT_INSN_SIZE; i++) 2011 printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); 2012 } 2013 2014 static struct ftrace_ops * 2015 ftrace_find_tramp_ops_any(struct dyn_ftrace *rec); 2016 static struct ftrace_ops * 2017 ftrace_find_tramp_ops_next(struct dyn_ftrace *rec, struct ftrace_ops *ops); 2018 2019 enum ftrace_bug_type ftrace_bug_type; 2020 const void *ftrace_expected; 2021 2022 static void print_bug_type(void) 2023 { 2024 switch (ftrace_bug_type) { 2025 case FTRACE_BUG_UNKNOWN: 2026 break; 2027 case FTRACE_BUG_INIT: 2028 pr_info("Initializing ftrace call sites\n"); 2029 break; 2030 case FTRACE_BUG_NOP: 2031 pr_info("Setting ftrace call site to NOP\n"); 2032 break; 2033 case FTRACE_BUG_CALL: 2034 pr_info("Setting ftrace call site to call ftrace function\n"); 2035 break; 2036 case FTRACE_BUG_UPDATE: 2037 pr_info("Updating ftrace call site to call a different ftrace function\n"); 2038 break; 2039 } 2040 } 2041 2042 /** 2043 * ftrace_bug - report and shutdown function tracer 2044 * @failed: The failed type (EFAULT, EINVAL, EPERM) 2045 * @rec: The record that failed 2046 * 2047 * The arch code that enables or disables the function tracing 2048 * can call ftrace_bug() when it has detected a problem in 2049 * modifying the code. @failed should be one of either: 2050 * EFAULT - if the problem happens on reading the @ip address 2051 * EINVAL - if what is read at @ip is not what was expected 2052 * EPERM - if the problem happens on writting to the @ip address 2053 */ 2054 void ftrace_bug(int failed, struct dyn_ftrace *rec) 2055 { 2056 unsigned long ip = rec ? rec->ip : 0; 2057 2058 switch (failed) { 2059 case -EFAULT: 2060 FTRACE_WARN_ON_ONCE(1); 2061 pr_info("ftrace faulted on modifying "); 2062 print_ip_sym(ip); 2063 break; 2064 case -EINVAL: 2065 FTRACE_WARN_ON_ONCE(1); 2066 pr_info("ftrace failed to modify "); 2067 print_ip_sym(ip); 2068 print_ip_ins(" actual: ", (unsigned char *)ip); 2069 pr_cont("\n"); 2070 if (ftrace_expected) { 2071 print_ip_ins(" expected: ", ftrace_expected); 2072 pr_cont("\n"); 2073 } 2074 break; 2075 case -EPERM: 2076 FTRACE_WARN_ON_ONCE(1); 2077 pr_info("ftrace faulted on writing "); 2078 print_ip_sym(ip); 2079 break; 2080 default: 2081 FTRACE_WARN_ON_ONCE(1); 2082 pr_info("ftrace faulted on unknown error "); 2083 print_ip_sym(ip); 2084 } 2085 print_bug_type(); 2086 if (rec) { 2087 struct ftrace_ops *ops = NULL; 2088 2089 pr_info("ftrace record flags: %lx\n", rec->flags); 2090 pr_cont(" (%ld)%s", ftrace_rec_count(rec), 2091 rec->flags & FTRACE_FL_REGS ? " R" : " "); 2092 if (rec->flags & FTRACE_FL_TRAMP_EN) { 2093 ops = ftrace_find_tramp_ops_any(rec); 2094 if (ops) { 2095 do { 2096 pr_cont("\ttramp: %pS (%pS)", 2097 (void *)ops->trampoline, 2098 (void *)ops->func); 2099 ops = ftrace_find_tramp_ops_next(rec, ops); 2100 } while (ops); 2101 } else 2102 pr_cont("\ttramp: ERROR!"); 2103 2104 } 2105 ip = ftrace_get_addr_curr(rec); 2106 pr_cont("\n expected tramp: %lx\n", ip); 2107 } 2108 } 2109 2110 static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update) 2111 { 2112 unsigned long flag = 0UL; 2113 2114 ftrace_bug_type = FTRACE_BUG_UNKNOWN; 2115 2116 if (rec->flags & FTRACE_FL_DISABLED) 2117 return FTRACE_UPDATE_IGNORE; 2118 2119 /* 2120 * If we are updating calls: 2121 * 2122 * If the record has a ref count, then we need to enable it 2123 * because someone is using it. 2124 * 2125 * Otherwise we make sure its disabled. 2126 * 2127 * If we are disabling calls, then disable all records that 2128 * are enabled. 2129 */ 2130 if (enable && ftrace_rec_count(rec)) 2131 flag = FTRACE_FL_ENABLED; 2132 2133 /* 2134 * If enabling and the REGS flag does not match the REGS_EN, or 2135 * the TRAMP flag doesn't match the TRAMP_EN, then do not ignore 2136 * this record. Set flags to fail the compare against ENABLED. 2137 */ 2138 if (flag) { 2139 if (!(rec->flags & FTRACE_FL_REGS) != 2140 !(rec->flags & FTRACE_FL_REGS_EN)) 2141 flag |= FTRACE_FL_REGS; 2142 2143 if (!(rec->flags & FTRACE_FL_TRAMP) != 2144 !(rec->flags & FTRACE_FL_TRAMP_EN)) 2145 flag |= FTRACE_FL_TRAMP; 2146 } 2147 2148 /* If the state of this record hasn't changed, then do nothing */ 2149 if ((rec->flags & FTRACE_FL_ENABLED) == flag) 2150 return FTRACE_UPDATE_IGNORE; 2151 2152 if (flag) { 2153 /* Save off if rec is being enabled (for return value) */ 2154 flag ^= rec->flags & FTRACE_FL_ENABLED; 2155 2156 if (update) { 2157 rec->flags |= FTRACE_FL_ENABLED; 2158 if (flag & FTRACE_FL_REGS) { 2159 if (rec->flags & FTRACE_FL_REGS) 2160 rec->flags |= FTRACE_FL_REGS_EN; 2161 else 2162 rec->flags &= ~FTRACE_FL_REGS_EN; 2163 } 2164 if (flag & FTRACE_FL_TRAMP) { 2165 if (rec->flags & FTRACE_FL_TRAMP) 2166 rec->flags |= FTRACE_FL_TRAMP_EN; 2167 else 2168 rec->flags &= ~FTRACE_FL_TRAMP_EN; 2169 } 2170 } 2171 2172 /* 2173 * If this record is being updated from a nop, then 2174 * return UPDATE_MAKE_CALL. 2175 * Otherwise, 2176 * return UPDATE_MODIFY_CALL to tell the caller to convert 2177 * from the save regs, to a non-save regs function or 2178 * vice versa, or from a trampoline call. 2179 */ 2180 if (flag & FTRACE_FL_ENABLED) { 2181 ftrace_bug_type = FTRACE_BUG_CALL; 2182 return FTRACE_UPDATE_MAKE_CALL; 2183 } 2184 2185 ftrace_bug_type = FTRACE_BUG_UPDATE; 2186 return FTRACE_UPDATE_MODIFY_CALL; 2187 } 2188 2189 if (update) { 2190 /* If there's no more users, clear all flags */ 2191 if (!ftrace_rec_count(rec)) 2192 rec->flags = 0; 2193 else 2194 /* 2195 * Just disable the record, but keep the ops TRAMP 2196 * and REGS states. The _EN flags must be disabled though. 2197 */ 2198 rec->flags &= ~(FTRACE_FL_ENABLED | FTRACE_FL_TRAMP_EN | 2199 FTRACE_FL_REGS_EN); 2200 } 2201 2202 ftrace_bug_type = FTRACE_BUG_NOP; 2203 return FTRACE_UPDATE_MAKE_NOP; 2204 } 2205 2206 /** 2207 * ftrace_update_record, set a record that now is tracing or not 2208 * @rec: the record to update 2209 * @enable: set to 1 if the record is tracing, zero to force disable 2210 * 2211 * The records that represent all functions that can be traced need 2212 * to be updated when tracing has been enabled. 2213 */ 2214 int ftrace_update_record(struct dyn_ftrace *rec, int enable) 2215 { 2216 return ftrace_check_record(rec, enable, 1); 2217 } 2218 2219 /** 2220 * ftrace_test_record, check if the record has been enabled or not 2221 * @rec: the record to test 2222 * @enable: set to 1 to check if enabled, 0 if it is disabled 2223 * 2224 * The arch code may need to test if a record is already set to 2225 * tracing to determine how to modify the function code that it 2226 * represents. 2227 */ 2228 int ftrace_test_record(struct dyn_ftrace *rec, int enable) 2229 { 2230 return ftrace_check_record(rec, enable, 0); 2231 } 2232 2233 static struct ftrace_ops * 2234 ftrace_find_tramp_ops_any(struct dyn_ftrace *rec) 2235 { 2236 struct ftrace_ops *op; 2237 unsigned long ip = rec->ip; 2238 2239 do_for_each_ftrace_op(op, ftrace_ops_list) { 2240 2241 if (!op->trampoline) 2242 continue; 2243 2244 if (hash_contains_ip(ip, op->func_hash)) 2245 return op; 2246 } while_for_each_ftrace_op(op); 2247 2248 return NULL; 2249 } 2250 2251 static struct ftrace_ops * 2252 ftrace_find_tramp_ops_next(struct dyn_ftrace *rec, 2253 struct ftrace_ops *op) 2254 { 2255 unsigned long ip = rec->ip; 2256 2257 while_for_each_ftrace_op(op) { 2258 2259 if (!op->trampoline) 2260 continue; 2261 2262 if (hash_contains_ip(ip, op->func_hash)) 2263 return op; 2264 } 2265 2266 return NULL; 2267 } 2268 2269 static struct ftrace_ops * 2270 ftrace_find_tramp_ops_curr(struct dyn_ftrace *rec) 2271 { 2272 struct ftrace_ops *op; 2273 unsigned long ip = rec->ip; 2274 2275 /* 2276 * Need to check removed ops first. 2277 * If they are being removed, and this rec has a tramp, 2278 * and this rec is in the ops list, then it would be the 2279 * one with the tramp. 2280 */ 2281 if (removed_ops) { 2282 if (hash_contains_ip(ip, &removed_ops->old_hash)) 2283 return removed_ops; 2284 } 2285 2286 /* 2287 * Need to find the current trampoline for a rec. 2288 * Now, a trampoline is only attached to a rec if there 2289 * was a single 'ops' attached to it. But this can be called 2290 * when we are adding another op to the rec or removing the 2291 * current one. Thus, if the op is being added, we can 2292 * ignore it because it hasn't attached itself to the rec 2293 * yet. 2294 * 2295 * If an ops is being modified (hooking to different functions) 2296 * then we don't care about the new functions that are being 2297 * added, just the old ones (that are probably being removed). 2298 * 2299 * If we are adding an ops to a function that already is using 2300 * a trampoline, it needs to be removed (trampolines are only 2301 * for single ops connected), then an ops that is not being 2302 * modified also needs to be checked. 2303 */ 2304 do_for_each_ftrace_op(op, ftrace_ops_list) { 2305 2306 if (!op->trampoline) 2307 continue; 2308 2309 /* 2310 * If the ops is being added, it hasn't gotten to 2311 * the point to be removed from this tree yet. 2312 */ 2313 if (op->flags & FTRACE_OPS_FL_ADDING) 2314 continue; 2315 2316 2317 /* 2318 * If the ops is being modified and is in the old 2319 * hash, then it is probably being removed from this 2320 * function. 2321 */ 2322 if ((op->flags & FTRACE_OPS_FL_MODIFYING) && 2323 hash_contains_ip(ip, &op->old_hash)) 2324 return op; 2325 /* 2326 * If the ops is not being added or modified, and it's 2327 * in its normal filter hash, then this must be the one 2328 * we want! 2329 */ 2330 if (!(op->flags & FTRACE_OPS_FL_MODIFYING) && 2331 hash_contains_ip(ip, op->func_hash)) 2332 return op; 2333 2334 } while_for_each_ftrace_op(op); 2335 2336 return NULL; 2337 } 2338 2339 static struct ftrace_ops * 2340 ftrace_find_tramp_ops_new(struct dyn_ftrace *rec) 2341 { 2342 struct ftrace_ops *op; 2343 unsigned long ip = rec->ip; 2344 2345 do_for_each_ftrace_op(op, ftrace_ops_list) { 2346 /* pass rec in as regs to have non-NULL val */ 2347 if (hash_contains_ip(ip, op->func_hash)) 2348 return op; 2349 } while_for_each_ftrace_op(op); 2350 2351 return NULL; 2352 } 2353 2354 /** 2355 * ftrace_get_addr_new - Get the call address to set to 2356 * @rec: The ftrace record descriptor 2357 * 2358 * If the record has the FTRACE_FL_REGS set, that means that it 2359 * wants to convert to a callback that saves all regs. If FTRACE_FL_REGS 2360 * is not not set, then it wants to convert to the normal callback. 2361 * 2362 * Returns the address of the trampoline to set to 2363 */ 2364 unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec) 2365 { 2366 struct ftrace_ops *ops; 2367 2368 /* Trampolines take precedence over regs */ 2369 if (rec->flags & FTRACE_FL_TRAMP) { 2370 ops = ftrace_find_tramp_ops_new(rec); 2371 if (FTRACE_WARN_ON(!ops || !ops->trampoline)) { 2372 pr_warn("Bad trampoline accounting at: %p (%pS) (%lx)\n", 2373 (void *)rec->ip, (void *)rec->ip, rec->flags); 2374 /* Ftrace is shutting down, return anything */ 2375 return (unsigned long)FTRACE_ADDR; 2376 } 2377 return ops->trampoline; 2378 } 2379 2380 if (rec->flags & FTRACE_FL_REGS) 2381 return (unsigned long)FTRACE_REGS_ADDR; 2382 else 2383 return (unsigned long)FTRACE_ADDR; 2384 } 2385 2386 /** 2387 * ftrace_get_addr_curr - Get the call address that is already there 2388 * @rec: The ftrace record descriptor 2389 * 2390 * The FTRACE_FL_REGS_EN is set when the record already points to 2391 * a function that saves all the regs. Basically the '_EN' version 2392 * represents the current state of the function. 2393 * 2394 * Returns the address of the trampoline that is currently being called 2395 */ 2396 unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec) 2397 { 2398 struct ftrace_ops *ops; 2399 2400 /* Trampolines take precedence over regs */ 2401 if (rec->flags & FTRACE_FL_TRAMP_EN) { 2402 ops = ftrace_find_tramp_ops_curr(rec); 2403 if (FTRACE_WARN_ON(!ops)) { 2404 pr_warn("Bad trampoline accounting at: %p (%pS)\n", 2405 (void *)rec->ip, (void *)rec->ip); 2406 /* Ftrace is shutting down, return anything */ 2407 return (unsigned long)FTRACE_ADDR; 2408 } 2409 return ops->trampoline; 2410 } 2411 2412 if (rec->flags & FTRACE_FL_REGS_EN) 2413 return (unsigned long)FTRACE_REGS_ADDR; 2414 else 2415 return (unsigned long)FTRACE_ADDR; 2416 } 2417 2418 static int 2419 __ftrace_replace_code(struct dyn_ftrace *rec, int enable) 2420 { 2421 unsigned long ftrace_old_addr; 2422 unsigned long ftrace_addr; 2423 int ret; 2424 2425 ftrace_addr = ftrace_get_addr_new(rec); 2426 2427 /* This needs to be done before we call ftrace_update_record */ 2428 ftrace_old_addr = ftrace_get_addr_curr(rec); 2429 2430 ret = ftrace_update_record(rec, enable); 2431 2432 ftrace_bug_type = FTRACE_BUG_UNKNOWN; 2433 2434 switch (ret) { 2435 case FTRACE_UPDATE_IGNORE: 2436 return 0; 2437 2438 case FTRACE_UPDATE_MAKE_CALL: 2439 ftrace_bug_type = FTRACE_BUG_CALL; 2440 return ftrace_make_call(rec, ftrace_addr); 2441 2442 case FTRACE_UPDATE_MAKE_NOP: 2443 ftrace_bug_type = FTRACE_BUG_NOP; 2444 return ftrace_make_nop(NULL, rec, ftrace_old_addr); 2445 2446 case FTRACE_UPDATE_MODIFY_CALL: 2447 ftrace_bug_type = FTRACE_BUG_UPDATE; 2448 return ftrace_modify_call(rec, ftrace_old_addr, ftrace_addr); 2449 } 2450 2451 return -1; /* unknow ftrace bug */ 2452 } 2453 2454 void __weak ftrace_replace_code(int enable) 2455 { 2456 struct dyn_ftrace *rec; 2457 struct ftrace_page *pg; 2458 int failed; 2459 2460 if (unlikely(ftrace_disabled)) 2461 return; 2462 2463 do_for_each_ftrace_rec(pg, rec) { 2464 2465 if (rec->flags & FTRACE_FL_DISABLED) 2466 continue; 2467 2468 failed = __ftrace_replace_code(rec, enable); 2469 if (failed) { 2470 ftrace_bug(failed, rec); 2471 /* Stop processing */ 2472 return; 2473 } 2474 } while_for_each_ftrace_rec(); 2475 } 2476 2477 struct ftrace_rec_iter { 2478 struct ftrace_page *pg; 2479 int index; 2480 }; 2481 2482 /** 2483 * ftrace_rec_iter_start, start up iterating over traced functions 2484 * 2485 * Returns an iterator handle that is used to iterate over all 2486 * the records that represent address locations where functions 2487 * are traced. 2488 * 2489 * May return NULL if no records are available. 2490 */ 2491 struct ftrace_rec_iter *ftrace_rec_iter_start(void) 2492 { 2493 /* 2494 * We only use a single iterator. 2495 * Protected by the ftrace_lock mutex. 2496 */ 2497 static struct ftrace_rec_iter ftrace_rec_iter; 2498 struct ftrace_rec_iter *iter = &ftrace_rec_iter; 2499 2500 iter->pg = ftrace_pages_start; 2501 iter->index = 0; 2502 2503 /* Could have empty pages */ 2504 while (iter->pg && !iter->pg->index) 2505 iter->pg = iter->pg->next; 2506 2507 if (!iter->pg) 2508 return NULL; 2509 2510 return iter; 2511 } 2512 2513 /** 2514 * ftrace_rec_iter_next, get the next record to process. 2515 * @iter: The handle to the iterator. 2516 * 2517 * Returns the next iterator after the given iterator @iter. 2518 */ 2519 struct ftrace_rec_iter *ftrace_rec_iter_next(struct ftrace_rec_iter *iter) 2520 { 2521 iter->index++; 2522 2523 if (iter->index >= iter->pg->index) { 2524 iter->pg = iter->pg->next; 2525 iter->index = 0; 2526 2527 /* Could have empty pages */ 2528 while (iter->pg && !iter->pg->index) 2529 iter->pg = iter->pg->next; 2530 } 2531 2532 if (!iter->pg) 2533 return NULL; 2534 2535 return iter; 2536 } 2537 2538 /** 2539 * ftrace_rec_iter_record, get the record at the iterator location 2540 * @iter: The current iterator location 2541 * 2542 * Returns the record that the current @iter is at. 2543 */ 2544 struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter) 2545 { 2546 return &iter->pg->records[iter->index]; 2547 } 2548 2549 static int 2550 ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) 2551 { 2552 int ret; 2553 2554 if (unlikely(ftrace_disabled)) 2555 return 0; 2556 2557 ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); 2558 if (ret) { 2559 ftrace_bug_type = FTRACE_BUG_INIT; 2560 ftrace_bug(ret, rec); 2561 return 0; 2562 } 2563 return 1; 2564 } 2565 2566 /* 2567 * archs can override this function if they must do something 2568 * before the modifying code is performed. 2569 */ 2570 int __weak ftrace_arch_code_modify_prepare(void) 2571 { 2572 return 0; 2573 } 2574 2575 /* 2576 * archs can override this function if they must do something 2577 * after the modifying code is performed. 2578 */ 2579 int __weak ftrace_arch_code_modify_post_process(void) 2580 { 2581 return 0; 2582 } 2583 2584 void ftrace_modify_all_code(int command) 2585 { 2586 int update = command & FTRACE_UPDATE_TRACE_FUNC; 2587 int err = 0; 2588 2589 /* 2590 * If the ftrace_caller calls a ftrace_ops func directly, 2591 * we need to make sure that it only traces functions it 2592 * expects to trace. When doing the switch of functions, 2593 * we need to update to the ftrace_ops_list_func first 2594 * before the transition between old and new calls are set, 2595 * as the ftrace_ops_list_func will check the ops hashes 2596 * to make sure the ops are having the right functions 2597 * traced. 2598 */ 2599 if (update) { 2600 err = ftrace_update_ftrace_func(ftrace_ops_list_func); 2601 if (FTRACE_WARN_ON(err)) 2602 return; 2603 } 2604 2605 if (command & FTRACE_UPDATE_CALLS) 2606 ftrace_replace_code(1); 2607 else if (command & FTRACE_DISABLE_CALLS) 2608 ftrace_replace_code(0); 2609 2610 if (update && ftrace_trace_function != ftrace_ops_list_func) { 2611 function_trace_op = set_function_trace_op; 2612 smp_wmb(); 2613 /* If irqs are disabled, we are in stop machine */ 2614 if (!irqs_disabled()) 2615 smp_call_function(ftrace_sync_ipi, NULL, 1); 2616 err = ftrace_update_ftrace_func(ftrace_trace_function); 2617 if (FTRACE_WARN_ON(err)) 2618 return; 2619 } 2620 2621 if (command & FTRACE_START_FUNC_RET) 2622 err = ftrace_enable_ftrace_graph_caller(); 2623 else if (command & FTRACE_STOP_FUNC_RET) 2624 err = ftrace_disable_ftrace_graph_caller(); 2625 FTRACE_WARN_ON(err); 2626 } 2627 2628 static int __ftrace_modify_code(void *data) 2629 { 2630 int *command = data; 2631 2632 ftrace_modify_all_code(*command); 2633 2634 return 0; 2635 } 2636 2637 /** 2638 * ftrace_run_stop_machine, go back to the stop machine method 2639 * @command: The command to tell ftrace what to do 2640 * 2641 * If an arch needs to fall back to the stop machine method, the 2642 * it can call this function. 2643 */ 2644 void ftrace_run_stop_machine(int command) 2645 { 2646 stop_machine(__ftrace_modify_code, &command, NULL); 2647 } 2648 2649 /** 2650 * arch_ftrace_update_code, modify the code to trace or not trace 2651 * @command: The command that needs to be done 2652 * 2653 * Archs can override this function if it does not need to 2654 * run stop_machine() to modify code. 2655 */ 2656 void __weak arch_ftrace_update_code(int command) 2657 { 2658 ftrace_run_stop_machine(command); 2659 } 2660 2661 static void ftrace_run_update_code(int command) 2662 { 2663 int ret; 2664 2665 ret = ftrace_arch_code_modify_prepare(); 2666 FTRACE_WARN_ON(ret); 2667 if (ret) 2668 return; 2669 2670 /* 2671 * By default we use stop_machine() to modify the code. 2672 * But archs can do what ever they want as long as it 2673 * is safe. The stop_machine() is the safest, but also 2674 * produces the most overhead. 2675 */ 2676 arch_ftrace_update_code(command); 2677 2678 ret = ftrace_arch_code_modify_post_process(); 2679 FTRACE_WARN_ON(ret); 2680 } 2681 2682 static void ftrace_run_modify_code(struct ftrace_ops *ops, int command, 2683 struct ftrace_ops_hash *old_hash) 2684 { 2685 ops->flags |= FTRACE_OPS_FL_MODIFYING; 2686 ops->old_hash.filter_hash = old_hash->filter_hash; 2687 ops->old_hash.notrace_hash = old_hash->notrace_hash; 2688 ftrace_run_update_code(command); 2689 ops->old_hash.filter_hash = NULL; 2690 ops->old_hash.notrace_hash = NULL; 2691 ops->flags &= ~FTRACE_OPS_FL_MODIFYING; 2692 } 2693 2694 static ftrace_func_t saved_ftrace_func; 2695 static int ftrace_start_up; 2696 2697 void __weak arch_ftrace_trampoline_free(struct ftrace_ops *ops) 2698 { 2699 } 2700 2701 static void ftrace_startup_enable(int command) 2702 { 2703 if (saved_ftrace_func != ftrace_trace_function) { 2704 saved_ftrace_func = ftrace_trace_function; 2705 command |= FTRACE_UPDATE_TRACE_FUNC; 2706 } 2707 2708 if (!command || !ftrace_enabled) 2709 return; 2710 2711 ftrace_run_update_code(command); 2712 } 2713 2714 static void ftrace_startup_all(int command) 2715 { 2716 update_all_ops = true; 2717 ftrace_startup_enable(command); 2718 update_all_ops = false; 2719 } 2720 2721 static int ftrace_startup(struct ftrace_ops *ops, int command) 2722 { 2723 int ret; 2724 2725 if (unlikely(ftrace_disabled)) 2726 return -ENODEV; 2727 2728 ret = __register_ftrace_function(ops); 2729 if (ret) 2730 return ret; 2731 2732 ftrace_start_up++; 2733 2734 /* 2735 * Note that ftrace probes uses this to start up 2736 * and modify functions it will probe. But we still 2737 * set the ADDING flag for modification, as probes 2738 * do not have trampolines. If they add them in the 2739 * future, then the probes will need to distinguish 2740 * between adding and updating probes. 2741 */ 2742 ops->flags |= FTRACE_OPS_FL_ENABLED | FTRACE_OPS_FL_ADDING; 2743 2744 ret = ftrace_hash_ipmodify_enable(ops); 2745 if (ret < 0) { 2746 /* Rollback registration process */ 2747 __unregister_ftrace_function(ops); 2748 ftrace_start_up--; 2749 ops->flags &= ~FTRACE_OPS_FL_ENABLED; 2750 return ret; 2751 } 2752 2753 if (ftrace_hash_rec_enable(ops, 1)) 2754 command |= FTRACE_UPDATE_CALLS; 2755 2756 ftrace_startup_enable(command); 2757 2758 ops->flags &= ~FTRACE_OPS_FL_ADDING; 2759 2760 return 0; 2761 } 2762 2763 static int ftrace_shutdown(struct ftrace_ops *ops, int command) 2764 { 2765 int ret; 2766 2767 if (unlikely(ftrace_disabled)) 2768 return -ENODEV; 2769 2770 ret = __unregister_ftrace_function(ops); 2771 if (ret) 2772 return ret; 2773 2774 ftrace_start_up--; 2775 /* 2776 * Just warn in case of unbalance, no need to kill ftrace, it's not 2777 * critical but the ftrace_call callers may be never nopped again after 2778 * further ftrace uses. 2779 */ 2780 WARN_ON_ONCE(ftrace_start_up < 0); 2781 2782 /* Disabling ipmodify never fails */ 2783 ftrace_hash_ipmodify_disable(ops); 2784 2785 if (ftrace_hash_rec_disable(ops, 1)) 2786 command |= FTRACE_UPDATE_CALLS; 2787 2788 ops->flags &= ~FTRACE_OPS_FL_ENABLED; 2789 2790 if (saved_ftrace_func != ftrace_trace_function) { 2791 saved_ftrace_func = ftrace_trace_function; 2792 command |= FTRACE_UPDATE_TRACE_FUNC; 2793 } 2794 2795 if (!command || !ftrace_enabled) { 2796 /* 2797 * If these are dynamic or per_cpu ops, they still 2798 * need their data freed. Since, function tracing is 2799 * not currently active, we can just free them 2800 * without synchronizing all CPUs. 2801 */ 2802 if (ops->flags & FTRACE_OPS_FL_DYNAMIC) 2803 goto free_ops; 2804 2805 return 0; 2806 } 2807 2808 /* 2809 * If the ops uses a trampoline, then it needs to be 2810 * tested first on update. 2811 */ 2812 ops->flags |= FTRACE_OPS_FL_REMOVING; 2813 removed_ops = ops; 2814 2815 /* The trampoline logic checks the old hashes */ 2816 ops->old_hash.filter_hash = ops->func_hash->filter_hash; 2817 ops->old_hash.notrace_hash = ops->func_hash->notrace_hash; 2818 2819 ftrace_run_update_code(command); 2820 2821 /* 2822 * If there's no more ops registered with ftrace, run a 2823 * sanity check to make sure all rec flags are cleared. 2824 */ 2825 if (rcu_dereference_protected(ftrace_ops_list, 2826 lockdep_is_held(&ftrace_lock)) == &ftrace_list_end) { 2827 struct ftrace_page *pg; 2828 struct dyn_ftrace *rec; 2829 2830 do_for_each_ftrace_rec(pg, rec) { 2831 if (FTRACE_WARN_ON_ONCE(rec->flags & ~FTRACE_FL_DISABLED)) 2832 pr_warn(" %pS flags:%lx\n", 2833 (void *)rec->ip, rec->flags); 2834 } while_for_each_ftrace_rec(); 2835 } 2836 2837 ops->old_hash.filter_hash = NULL; 2838 ops->old_hash.notrace_hash = NULL; 2839 2840 removed_ops = NULL; 2841 ops->flags &= ~FTRACE_OPS_FL_REMOVING; 2842 2843 /* 2844 * Dynamic ops may be freed, we must make sure that all 2845 * callers are done before leaving this function. 2846 * The same goes for freeing the per_cpu data of the per_cpu 2847 * ops. 2848 */ 2849 if (ops->flags & FTRACE_OPS_FL_DYNAMIC) { 2850 /* 2851 * We need to do a hard force of sched synchronization. 2852 * This is because we use preempt_disable() to do RCU, but 2853 * the function tracers can be called where RCU is not watching 2854 * (like before user_exit()). We can not rely on the RCU 2855 * infrastructure to do the synchronization, thus we must do it 2856 * ourselves. 2857 */ 2858 schedule_on_each_cpu(ftrace_sync); 2859 2860 /* 2861 * When the kernel is preeptive, tasks can be preempted 2862 * while on a ftrace trampoline. Just scheduling a task on 2863 * a CPU is not good enough to flush them. Calling 2864 * synchornize_rcu_tasks() will wait for those tasks to 2865 * execute and either schedule voluntarily or enter user space. 2866 */ 2867 if (IS_ENABLED(CONFIG_PREEMPT)) 2868 synchronize_rcu_tasks(); 2869 2870 free_ops: 2871 arch_ftrace_trampoline_free(ops); 2872 } 2873 2874 return 0; 2875 } 2876 2877 static void ftrace_startup_sysctl(void) 2878 { 2879 int command; 2880 2881 if (unlikely(ftrace_disabled)) 2882 return; 2883 2884 /* Force update next time */ 2885 saved_ftrace_func = NULL; 2886 /* ftrace_start_up is true if we want ftrace running */ 2887 if (ftrace_start_up) { 2888 command = FTRACE_UPDATE_CALLS; 2889 if (ftrace_graph_active) 2890 command |= FTRACE_START_FUNC_RET; 2891 ftrace_startup_enable(command); 2892 } 2893 } 2894 2895 static void ftrace_shutdown_sysctl(void) 2896 { 2897 int command; 2898 2899 if (unlikely(ftrace_disabled)) 2900 return; 2901 2902 /* ftrace_start_up is true if ftrace is running */ 2903 if (ftrace_start_up) { 2904 command = FTRACE_DISABLE_CALLS; 2905 if (ftrace_graph_active) 2906 command |= FTRACE_STOP_FUNC_RET; 2907 ftrace_run_update_code(command); 2908 } 2909 } 2910 2911 static u64 ftrace_update_time; 2912 unsigned long ftrace_update_tot_cnt; 2913 2914 static inline int ops_traces_mod(struct ftrace_ops *ops) 2915 { 2916 /* 2917 * Filter_hash being empty will default to trace module. 2918 * But notrace hash requires a test of individual module functions. 2919 */ 2920 return ftrace_hash_empty(ops->func_hash->filter_hash) && 2921 ftrace_hash_empty(ops->func_hash->notrace_hash); 2922 } 2923 2924 /* 2925 * Check if the current ops references the record. 2926 * 2927 * If the ops traces all functions, then it was already accounted for. 2928 * If the ops does not trace the current record function, skip it. 2929 * If the ops ignores the function via notrace filter, skip it. 2930 */ 2931 static inline bool 2932 ops_references_rec(struct ftrace_ops *ops, struct dyn_ftrace *rec) 2933 { 2934 /* If ops isn't enabled, ignore it */ 2935 if (!(ops->flags & FTRACE_OPS_FL_ENABLED)) 2936 return 0; 2937 2938 /* If ops traces all then it includes this function */ 2939 if (ops_traces_mod(ops)) 2940 return 1; 2941 2942 /* The function must be in the filter */ 2943 if (!ftrace_hash_empty(ops->func_hash->filter_hash) && 2944 !__ftrace_lookup_ip(ops->func_hash->filter_hash, rec->ip)) 2945 return 0; 2946 2947 /* If in notrace hash, we ignore it too */ 2948 if (ftrace_lookup_ip(ops->func_hash->notrace_hash, rec->ip)) 2949 return 0; 2950 2951 return 1; 2952 } 2953 2954 static int ftrace_update_code(struct module *mod, struct ftrace_page *new_pgs) 2955 { 2956 struct ftrace_page *pg; 2957 struct dyn_ftrace *p; 2958 u64 start, stop; 2959 unsigned long update_cnt = 0; 2960 unsigned long rec_flags = 0; 2961 int i; 2962 2963 start = ftrace_now(raw_smp_processor_id()); 2964 2965 /* 2966 * When a module is loaded, this function is called to convert 2967 * the calls to mcount in its text to nops, and also to create 2968 * an entry in the ftrace data. Now, if ftrace is activated 2969 * after this call, but before the module sets its text to 2970 * read-only, the modification of enabling ftrace can fail if 2971 * the read-only is done while ftrace is converting the calls. 2972 * To prevent this, the module's records are set as disabled 2973 * and will be enabled after the call to set the module's text 2974 * to read-only. 2975 */ 2976 if (mod) 2977 rec_flags |= FTRACE_FL_DISABLED; 2978 2979 for (pg = new_pgs; pg; pg = pg->next) { 2980 2981 for (i = 0; i < pg->index; i++) { 2982 2983 /* If something went wrong, bail without enabling anything */ 2984 if (unlikely(ftrace_disabled)) 2985 return -1; 2986 2987 p = &pg->records[i]; 2988 p->flags = rec_flags; 2989 2990 /* 2991 * Do the initial record conversion from mcount jump 2992 * to the NOP instructions. 2993 */ 2994 if (!ftrace_code_disable(mod, p)) 2995 break; 2996 2997 update_cnt++; 2998 } 2999 } 3000 3001 stop = ftrace_now(raw_smp_processor_id()); 3002 ftrace_update_time = stop - start; 3003 ftrace_update_tot_cnt += update_cnt; 3004 3005 return 0; 3006 } 3007 3008 static int ftrace_allocate_records(struct ftrace_page *pg, int count) 3009 { 3010 int order; 3011 int cnt; 3012 3013 if (WARN_ON(!count)) 3014 return -EINVAL; 3015 3016 order = get_count_order(DIV_ROUND_UP(count, ENTRIES_PER_PAGE)); 3017 3018 /* 3019 * We want to fill as much as possible. No more than a page 3020 * may be empty. 3021 */ 3022 while ((PAGE_SIZE << order) / ENTRY_SIZE >= count + ENTRIES_PER_PAGE) 3023 order--; 3024 3025 again: 3026 pg->records = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order); 3027 3028 if (!pg->records) { 3029 /* if we can't allocate this size, try something smaller */ 3030 if (!order) 3031 return -ENOMEM; 3032 order >>= 1; 3033 goto again; 3034 } 3035 3036 cnt = (PAGE_SIZE << order) / ENTRY_SIZE; 3037 pg->size = cnt; 3038 3039 if (cnt > count) 3040 cnt = count; 3041 3042 return cnt; 3043 } 3044 3045 static struct ftrace_page * 3046 ftrace_allocate_pages(unsigned long num_to_init) 3047 { 3048 struct ftrace_page *start_pg; 3049 struct ftrace_page *pg; 3050 int order; 3051 int cnt; 3052 3053 if (!num_to_init) 3054 return 0; 3055 3056 start_pg = pg = kzalloc(sizeof(*pg), GFP_KERNEL); 3057 if (!pg) 3058 return NULL; 3059 3060 /* 3061 * Try to allocate as much as possible in one continues 3062 * location that fills in all of the space. We want to 3063 * waste as little space as possible. 3064 */ 3065 for (;;) { 3066 cnt = ftrace_allocate_records(pg, num_to_init); 3067 if (cnt < 0) 3068 goto free_pages; 3069 3070 num_to_init -= cnt; 3071 if (!num_to_init) 3072 break; 3073 3074 pg->next = kzalloc(sizeof(*pg), GFP_KERNEL); 3075 if (!pg->next) 3076 goto free_pages; 3077 3078 pg = pg->next; 3079 } 3080 3081 return start_pg; 3082 3083 free_pages: 3084 pg = start_pg; 3085 while (pg) { 3086 order = get_count_order(pg->size / ENTRIES_PER_PAGE); 3087 free_pages((unsigned long)pg->records, order); 3088 start_pg = pg->next; 3089 kfree(pg); 3090 pg = start_pg; 3091 } 3092 pr_info("ftrace: FAILED to allocate memory for functions\n"); 3093 return NULL; 3094 } 3095 3096 #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ 3097 3098 struct ftrace_iterator { 3099 loff_t pos; 3100 loff_t func_pos; 3101 loff_t mod_pos; 3102 struct ftrace_page *pg; 3103 struct dyn_ftrace *func; 3104 struct ftrace_func_probe *probe; 3105 struct ftrace_func_entry *probe_entry; 3106 struct trace_parser parser; 3107 struct ftrace_hash *hash; 3108 struct ftrace_ops *ops; 3109 struct trace_array *tr; 3110 struct list_head *mod_list; 3111 int pidx; 3112 int idx; 3113 unsigned flags; 3114 }; 3115 3116 static void * 3117 t_probe_next(struct seq_file *m, loff_t *pos) 3118 { 3119 struct ftrace_iterator *iter = m->private; 3120 struct trace_array *tr = iter->ops->private; 3121 struct list_head *func_probes; 3122 struct ftrace_hash *hash; 3123 struct list_head *next; 3124 struct hlist_node *hnd = NULL; 3125 struct hlist_head *hhd; 3126 int size; 3127 3128 (*pos)++; 3129 iter->pos = *pos; 3130 3131 if (!tr) 3132 return NULL; 3133 3134 func_probes = &tr->func_probes; 3135 if (list_empty(func_probes)) 3136 return NULL; 3137 3138 if (!iter->probe) { 3139 next = func_probes->next; 3140 iter->probe = list_entry(next, struct ftrace_func_probe, list); 3141 } 3142 3143 if (iter->probe_entry) 3144 hnd = &iter->probe_entry->hlist; 3145 3146 hash = iter->probe->ops.func_hash->filter_hash; 3147 size = 1 << hash->size_bits; 3148 3149 retry: 3150 if (iter->pidx >= size) { 3151 if (iter->probe->list.next == func_probes) 3152 return NULL; 3153 next = iter->probe->list.next; 3154 iter->probe = list_entry(next, struct ftrace_func_probe, list); 3155 hash = iter->probe->ops.func_hash->filter_hash; 3156 size = 1 << hash->size_bits; 3157 iter->pidx = 0; 3158 } 3159 3160 hhd = &hash->buckets[iter->pidx]; 3161 3162 if (hlist_empty(hhd)) { 3163 iter->pidx++; 3164 hnd = NULL; 3165 goto retry; 3166 } 3167 3168 if (!hnd) 3169 hnd = hhd->first; 3170 else { 3171 hnd = hnd->next; 3172 if (!hnd) { 3173 iter->pidx++; 3174 goto retry; 3175 } 3176 } 3177 3178 if (WARN_ON_ONCE(!hnd)) 3179 return NULL; 3180 3181 iter->probe_entry = hlist_entry(hnd, struct ftrace_func_entry, hlist); 3182 3183 return iter; 3184 } 3185 3186 static void *t_probe_start(struct seq_file *m, loff_t *pos) 3187 { 3188 struct ftrace_iterator *iter = m->private; 3189 void *p = NULL; 3190 loff_t l; 3191 3192 if (!(iter->flags & FTRACE_ITER_DO_PROBES)) 3193 return NULL; 3194 3195 if (iter->mod_pos > *pos) 3196 return NULL; 3197 3198 iter->probe = NULL; 3199 iter->probe_entry = NULL; 3200 iter->pidx = 0; 3201 for (l = 0; l <= (*pos - iter->mod_pos); ) { 3202 p = t_probe_next(m, &l); 3203 if (!p) 3204 break; 3205 } 3206 if (!p) 3207 return NULL; 3208 3209 /* Only set this if we have an item */ 3210 iter->flags |= FTRACE_ITER_PROBE; 3211 3212 return iter; 3213 } 3214 3215 static int 3216 t_probe_show(struct seq_file *m, struct ftrace_iterator *iter) 3217 { 3218 struct ftrace_func_entry *probe_entry; 3219 struct ftrace_probe_ops *probe_ops; 3220 struct ftrace_func_probe *probe; 3221 3222 probe = iter->probe; 3223 probe_entry = iter->probe_entry; 3224 3225 if (WARN_ON_ONCE(!probe || !probe_entry)) 3226 return -EIO; 3227 3228 probe_ops = probe->probe_ops; 3229 3230 if (probe_ops->print) 3231 return probe_ops->print(m, probe_entry->ip, probe_ops, probe->data); 3232 3233 seq_printf(m, "%ps:%ps\n", (void *)probe_entry->ip, 3234 (void *)probe_ops->func); 3235 3236 return 0; 3237 } 3238 3239 static void * 3240 t_mod_next(struct seq_file *m, loff_t *pos) 3241 { 3242 struct ftrace_iterator *iter = m->private; 3243 struct trace_array *tr = iter->tr; 3244 3245 (*pos)++; 3246 iter->pos = *pos; 3247 3248 iter->mod_list = iter->mod_list->next; 3249 3250 if (iter->mod_list == &tr->mod_trace || 3251 iter->mod_list == &tr->mod_notrace) { 3252 iter->flags &= ~FTRACE_ITER_MOD; 3253 return NULL; 3254 } 3255 3256 iter->mod_pos = *pos; 3257 3258 return iter; 3259 } 3260 3261 static void *t_mod_start(struct seq_file *m, loff_t *pos) 3262 { 3263 struct ftrace_iterator *iter = m->private; 3264 void *p = NULL; 3265 loff_t l; 3266 3267 if (iter->func_pos > *pos) 3268 return NULL; 3269 3270 iter->mod_pos = iter->func_pos; 3271 3272 /* probes are only available if tr is set */ 3273 if (!iter->tr) 3274 return NULL; 3275 3276 for (l = 0; l <= (*pos - iter->func_pos); ) { 3277 p = t_mod_next(m, &l); 3278 if (!p) 3279 break; 3280 } 3281 if (!p) { 3282 iter->flags &= ~FTRACE_ITER_MOD; 3283 return t_probe_start(m, pos); 3284 } 3285 3286 /* Only set this if we have an item */ 3287 iter->flags |= FTRACE_ITER_MOD; 3288 3289 return iter; 3290 } 3291 3292 static int 3293 t_mod_show(struct seq_file *m, struct ftrace_iterator *iter) 3294 { 3295 struct ftrace_mod_load *ftrace_mod; 3296 struct trace_array *tr = iter->tr; 3297 3298 if (WARN_ON_ONCE(!iter->mod_list) || 3299 iter->mod_list == &tr->mod_trace || 3300 iter->mod_list == &tr->mod_notrace) 3301 return -EIO; 3302 3303 ftrace_mod = list_entry(iter->mod_list, struct ftrace_mod_load, list); 3304 3305 if (ftrace_mod->func) 3306 seq_printf(m, "%s", ftrace_mod->func); 3307 else 3308 seq_putc(m, '*'); 3309 3310 seq_printf(m, ":mod:%s\n", ftrace_mod->module); 3311 3312 return 0; 3313 } 3314 3315 static void * 3316 t_func_next(struct seq_file *m, loff_t *pos) 3317 { 3318 struct ftrace_iterator *iter = m->private; 3319 struct dyn_ftrace *rec = NULL; 3320 3321 (*pos)++; 3322 3323 retry: 3324 if (iter->idx >= iter->pg->index) { 3325 if (iter->pg->next) { 3326 iter->pg = iter->pg->next; 3327 iter->idx = 0; 3328 goto retry; 3329 } 3330 } else { 3331 rec = &iter->pg->records[iter->idx++]; 3332 if (((iter->flags & (FTRACE_ITER_FILTER | FTRACE_ITER_NOTRACE)) && 3333 !ftrace_lookup_ip(iter->hash, rec->ip)) || 3334 3335 ((iter->flags & FTRACE_ITER_ENABLED) && 3336 !(rec->flags & FTRACE_FL_ENABLED))) { 3337 3338 rec = NULL; 3339 goto retry; 3340 } 3341 } 3342 3343 if (!rec) 3344 return NULL; 3345 3346 iter->pos = iter->func_pos = *pos; 3347 iter->func = rec; 3348 3349 return iter; 3350 } 3351 3352 static void * 3353 t_next(struct seq_file *m, void *v, loff_t *pos) 3354 { 3355 struct ftrace_iterator *iter = m->private; 3356 loff_t l = *pos; /* t_probe_start() must use original pos */ 3357 void *ret; 3358 3359 if (unlikely(ftrace_disabled)) 3360 return NULL; 3361 3362 if (iter->flags & FTRACE_ITER_PROBE) 3363 return t_probe_next(m, pos); 3364 3365 if (iter->flags & FTRACE_ITER_MOD) 3366 return t_mod_next(m, pos); 3367 3368 if (iter->flags & FTRACE_ITER_PRINTALL) { 3369 /* next must increment pos, and t_probe_start does not */ 3370 (*pos)++; 3371 return t_mod_start(m, &l); 3372 } 3373 3374 ret = t_func_next(m, pos); 3375 3376 if (!ret) 3377 return t_mod_start(m, &l); 3378 3379 return ret; 3380 } 3381 3382 static void reset_iter_read(struct ftrace_iterator *iter) 3383 { 3384 iter->pos = 0; 3385 iter->func_pos = 0; 3386 iter->flags &= ~(FTRACE_ITER_PRINTALL | FTRACE_ITER_PROBE | FTRACE_ITER_MOD); 3387 } 3388 3389 static void *t_start(struct seq_file *m, loff_t *pos) 3390 { 3391 struct ftrace_iterator *iter = m->private; 3392 void *p = NULL; 3393 loff_t l; 3394 3395 mutex_lock(&ftrace_lock); 3396 3397 if (unlikely(ftrace_disabled)) 3398 return NULL; 3399 3400 /* 3401 * If an lseek was done, then reset and start from beginning. 3402 */ 3403 if (*pos < iter->pos) 3404 reset_iter_read(iter); 3405 3406 /* 3407 * For set_ftrace_filter reading, if we have the filter 3408 * off, we can short cut and just print out that all 3409 * functions are enabled. 3410 */ 3411 if ((iter->flags & (FTRACE_ITER_FILTER | FTRACE_ITER_NOTRACE)) && 3412 ftrace_hash_empty(iter->hash)) { 3413 iter->func_pos = 1; /* Account for the message */ 3414 if (*pos > 0) 3415 return t_mod_start(m, pos); 3416 iter->flags |= FTRACE_ITER_PRINTALL; 3417 /* reset in case of seek/pread */ 3418 iter->flags &= ~FTRACE_ITER_PROBE; 3419 return iter; 3420 } 3421 3422 if (iter->flags & FTRACE_ITER_MOD) 3423 return t_mod_start(m, pos); 3424 3425 /* 3426 * Unfortunately, we need to restart at ftrace_pages_start 3427 * every time we let go of the ftrace_mutex. This is because 3428 * those pointers can change without the lock. 3429 */ 3430 iter->pg = ftrace_pages_start; 3431 iter->idx = 0; 3432 for (l = 0; l <= *pos; ) { 3433 p = t_func_next(m, &l); 3434 if (!p) 3435 break; 3436 } 3437 3438 if (!p) 3439 return t_mod_start(m, pos); 3440 3441 return iter; 3442 } 3443 3444 static void t_stop(struct seq_file *m, void *p) 3445 { 3446 mutex_unlock(&ftrace_lock); 3447 } 3448 3449 void * __weak 3450 arch_ftrace_trampoline_func(struct ftrace_ops *ops, struct dyn_ftrace *rec) 3451 { 3452 return NULL; 3453 } 3454 3455 static void add_trampoline_func(struct seq_file *m, struct ftrace_ops *ops, 3456 struct dyn_ftrace *rec) 3457 { 3458 void *ptr; 3459 3460 ptr = arch_ftrace_trampoline_func(ops, rec); 3461 if (ptr) 3462 seq_printf(m, " ->%pS", ptr); 3463 } 3464 3465 static int t_show(struct seq_file *m, void *v) 3466 { 3467 struct ftrace_iterator *iter = m->private; 3468 struct dyn_ftrace *rec; 3469 3470 if (iter->flags & FTRACE_ITER_PROBE) 3471 return t_probe_show(m, iter); 3472 3473 if (iter->flags & FTRACE_ITER_MOD) 3474 return t_mod_show(m, iter); 3475 3476 if (iter->flags & FTRACE_ITER_PRINTALL) { 3477 if (iter->flags & FTRACE_ITER_NOTRACE) 3478 seq_puts(m, "#### no functions disabled ####\n"); 3479 else 3480 seq_puts(m, "#### all functions enabled ####\n"); 3481 return 0; 3482 } 3483 3484 rec = iter->func; 3485 3486 if (!rec) 3487 return 0; 3488 3489 seq_printf(m, "%ps", (void *)rec->ip); 3490 if (iter->flags & FTRACE_ITER_ENABLED) { 3491 struct ftrace_ops *ops; 3492 3493 seq_printf(m, " (%ld)%s%s", 3494 ftrace_rec_count(rec), 3495 rec->flags & FTRACE_FL_REGS ? " R" : " ", 3496 rec->flags & FTRACE_FL_IPMODIFY ? " I" : " "); 3497 if (rec->flags & FTRACE_FL_TRAMP_EN) { 3498 ops = ftrace_find_tramp_ops_any(rec); 3499 if (ops) { 3500 do { 3501 seq_printf(m, "\ttramp: %pS (%pS)", 3502 (void *)ops->trampoline, 3503 (void *)ops->func); 3504 add_trampoline_func(m, ops, rec); 3505 ops = ftrace_find_tramp_ops_next(rec, ops); 3506 } while (ops); 3507 } else 3508 seq_puts(m, "\ttramp: ERROR!"); 3509 } else { 3510 add_trampoline_func(m, NULL, rec); 3511 } 3512 } 3513 3514 seq_putc(m, '\n'); 3515 3516 return 0; 3517 } 3518 3519 static const struct seq_operations show_ftrace_seq_ops = { 3520 .start = t_start, 3521 .next = t_next, 3522 .stop = t_stop, 3523 .show = t_show, 3524 }; 3525 3526 static int 3527 ftrace_avail_open(struct inode *inode, struct file *file) 3528 { 3529 struct ftrace_iterator *iter; 3530 3531 if (unlikely(ftrace_disabled)) 3532 return -ENODEV; 3533 3534 iter = __seq_open_private(file, &show_ftrace_seq_ops, sizeof(*iter)); 3535 if (!iter) 3536 return -ENOMEM; 3537 3538 iter->pg = ftrace_pages_start; 3539 iter->ops = &global_ops; 3540 3541 return 0; 3542 } 3543 3544 static int 3545 ftrace_enabled_open(struct inode *inode, struct file *file) 3546 { 3547 struct ftrace_iterator *iter; 3548 3549 iter = __seq_open_private(file, &show_ftrace_seq_ops, sizeof(*iter)); 3550 if (!iter) 3551 return -ENOMEM; 3552 3553 iter->pg = ftrace_pages_start; 3554 iter->flags = FTRACE_ITER_ENABLED; 3555 iter->ops = &global_ops; 3556 3557 return 0; 3558 } 3559 3560 /** 3561 * ftrace_regex_open - initialize function tracer filter files 3562 * @ops: The ftrace_ops that hold the hash filters 3563 * @flag: The type of filter to process 3564 * @inode: The inode, usually passed in to your open routine 3565 * @file: The file, usually passed in to your open routine 3566 * 3567 * ftrace_regex_open() initializes the filter files for the 3568 * @ops. Depending on @flag it may process the filter hash or 3569 * the notrace hash of @ops. With this called from the open 3570 * routine, you can use ftrace_filter_write() for the write 3571 * routine if @flag has FTRACE_ITER_FILTER set, or 3572 * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set. 3573 * tracing_lseek() should be used as the lseek routine, and 3574 * release must call ftrace_regex_release(). 3575 */ 3576 int 3577 ftrace_regex_open(struct ftrace_ops *ops, int flag, 3578 struct inode *inode, struct file *file) 3579 { 3580 struct ftrace_iterator *iter; 3581 struct ftrace_hash *hash; 3582 struct list_head *mod_head; 3583 struct trace_array *tr = ops->private; 3584 int ret = 0; 3585 3586 ftrace_ops_init(ops); 3587 3588 if (unlikely(ftrace_disabled)) 3589 return -ENODEV; 3590 3591 iter = kzalloc(sizeof(*iter), GFP_KERNEL); 3592 if (!iter) 3593 return -ENOMEM; 3594 3595 if (trace_parser_get_init(&iter->parser, FTRACE_BUFF_MAX)) { 3596 kfree(iter); 3597 return -ENOMEM; 3598 } 3599 3600 iter->ops = ops; 3601 iter->flags = flag; 3602 iter->tr = tr; 3603 3604 mutex_lock(&ops->func_hash->regex_lock); 3605 3606 if (flag & FTRACE_ITER_NOTRACE) { 3607 hash = ops->func_hash->notrace_hash; 3608 mod_head = tr ? &tr->mod_notrace : NULL; 3609 } else { 3610 hash = ops->func_hash->filter_hash; 3611 mod_head = tr ? &tr->mod_trace : NULL; 3612 } 3613 3614 iter->mod_list = mod_head; 3615 3616 if (file->f_mode & FMODE_WRITE) { 3617 const int size_bits = FTRACE_HASH_DEFAULT_BITS; 3618 3619 if (file->f_flags & O_TRUNC) { 3620 iter->hash = alloc_ftrace_hash(size_bits); 3621 clear_ftrace_mod_list(mod_head); 3622 } else { 3623 iter->hash = alloc_and_copy_ftrace_hash(size_bits, hash); 3624 } 3625 3626 if (!iter->hash) { 3627 trace_parser_put(&iter->parser); 3628 kfree(iter); 3629 ret = -ENOMEM; 3630 goto out_unlock; 3631 } 3632 } else 3633 iter->hash = hash; 3634 3635 if (file->f_mode & FMODE_READ) { 3636 iter->pg = ftrace_pages_start; 3637 3638 ret = seq_open(file, &show_ftrace_seq_ops); 3639 if (!ret) { 3640 struct seq_file *m = file->private_data; 3641 m->private = iter; 3642 } else { 3643 /* Failed */ 3644 free_ftrace_hash(iter->hash); 3645 trace_parser_put(&iter->parser); 3646 kfree(iter); 3647 } 3648 } else 3649 file->private_data = iter; 3650 3651 out_unlock: 3652 mutex_unlock(&ops->func_hash->regex_lock); 3653 3654 return ret; 3655 } 3656 3657 static int 3658 ftrace_filter_open(struct inode *inode, struct file *file) 3659 { 3660 struct ftrace_ops *ops = inode->i_private; 3661 3662 return ftrace_regex_open(ops, 3663 FTRACE_ITER_FILTER | FTRACE_ITER_DO_PROBES, 3664 inode, file); 3665 } 3666 3667 static int 3668 ftrace_notrace_open(struct inode *inode, struct file *file) 3669 { 3670 struct ftrace_ops *ops = inode->i_private; 3671 3672 return ftrace_regex_open(ops, FTRACE_ITER_NOTRACE, 3673 inode, file); 3674 } 3675 3676 /* Type for quick search ftrace basic regexes (globs) from filter_parse_regex */ 3677 struct ftrace_glob { 3678 char *search; 3679 unsigned len; 3680 int type; 3681 }; 3682 3683 /* 3684 * If symbols in an architecture don't correspond exactly to the user-visible 3685 * name of what they represent, it is possible to define this function to 3686 * perform the necessary adjustments. 3687 */ 3688 char * __weak arch_ftrace_match_adjust(char *str, const char *search) 3689 { 3690 return str; 3691 } 3692 3693 static int ftrace_match(char *str, struct ftrace_glob *g) 3694 { 3695 int matched = 0; 3696 int slen; 3697 3698 str = arch_ftrace_match_adjust(str, g->search); 3699 3700 switch (g->type) { 3701 case MATCH_FULL: 3702 if (strcmp(str, g->search) == 0) 3703 matched = 1; 3704 break; 3705 case MATCH_FRONT_ONLY: 3706 if (strncmp(str, g->search, g->len) == 0) 3707 matched = 1; 3708 break; 3709 case MATCH_MIDDLE_ONLY: 3710 if (strstr(str, g->search)) 3711 matched = 1; 3712 break; 3713 case MATCH_END_ONLY: 3714 slen = strlen(str); 3715 if (slen >= g->len && 3716 memcmp(str + slen - g->len, g->search, g->len) == 0) 3717 matched = 1; 3718 break; 3719 case MATCH_GLOB: 3720 if (glob_match(g->search, str)) 3721 matched = 1; 3722 break; 3723 } 3724 3725 return matched; 3726 } 3727 3728 static int 3729 enter_record(struct ftrace_hash *hash, struct dyn_ftrace *rec, int clear_filter) 3730 { 3731 struct ftrace_func_entry *entry; 3732 int ret = 0; 3733 3734 entry = ftrace_lookup_ip(hash, rec->ip); 3735 if (clear_filter) { 3736 /* Do nothing if it doesn't exist */ 3737 if (!entry) 3738 return 0; 3739 3740 free_hash_entry(hash, entry); 3741 } else { 3742 /* Do nothing if it exists */ 3743 if (entry) 3744 return 0; 3745 3746 ret = add_hash_entry(hash, rec->ip); 3747 } 3748 return ret; 3749 } 3750 3751 static int 3752 ftrace_match_record(struct dyn_ftrace *rec, struct ftrace_glob *func_g, 3753 struct ftrace_glob *mod_g, int exclude_mod) 3754 { 3755 char str[KSYM_SYMBOL_LEN]; 3756 char *modname; 3757 3758 kallsyms_lookup(rec->ip, NULL, NULL, &modname, str); 3759 3760 if (mod_g) { 3761 int mod_matches = (modname) ? ftrace_match(modname, mod_g) : 0; 3762 3763 /* blank module name to match all modules */ 3764 if (!mod_g->len) { 3765 /* blank module globbing: modname xor exclude_mod */ 3766 if (!exclude_mod != !modname) 3767 goto func_match; 3768 return 0; 3769 } 3770 3771 /* 3772 * exclude_mod is set to trace everything but the given 3773 * module. If it is set and the module matches, then 3774 * return 0. If it is not set, and the module doesn't match 3775 * also return 0. Otherwise, check the function to see if 3776 * that matches. 3777 */ 3778 if (!mod_matches == !exclude_mod) 3779 return 0; 3780 func_match: 3781 /* blank search means to match all funcs in the mod */ 3782 if (!func_g->len) 3783 return 1; 3784 } 3785 3786 return ftrace_match(str, func_g); 3787 } 3788 3789 static int 3790 match_records(struct ftrace_hash *hash, char *func, int len, char *mod) 3791 { 3792 struct ftrace_page *pg; 3793 struct dyn_ftrace *rec; 3794 struct ftrace_glob func_g = { .type = MATCH_FULL }; 3795 struct ftrace_glob mod_g = { .type = MATCH_FULL }; 3796 struct ftrace_glob *mod_match = (mod) ? &mod_g : NULL; 3797 int exclude_mod = 0; 3798 int found = 0; 3799 int ret; 3800 int clear_filter = 0; 3801 3802 if (func) { 3803 func_g.type = filter_parse_regex(func, len, &func_g.search, 3804 &clear_filter); 3805 func_g.len = strlen(func_g.search); 3806 } 3807 3808 if (mod) { 3809 mod_g.type = filter_parse_regex(mod, strlen(mod), 3810 &mod_g.search, &exclude_mod); 3811 mod_g.len = strlen(mod_g.search); 3812 } 3813 3814 mutex_lock(&ftrace_lock); 3815 3816 if (unlikely(ftrace_disabled)) 3817 goto out_unlock; 3818 3819 do_for_each_ftrace_rec(pg, rec) { 3820 3821 if (rec->flags & FTRACE_FL_DISABLED) 3822 continue; 3823 3824 if (ftrace_match_record(rec, &func_g, mod_match, exclude_mod)) { 3825 ret = enter_record(hash, rec, clear_filter); 3826 if (ret < 0) { 3827 found = ret; 3828 goto out_unlock; 3829 } 3830 found = 1; 3831 } 3832 } while_for_each_ftrace_rec(); 3833 out_unlock: 3834 mutex_unlock(&ftrace_lock); 3835 3836 return found; 3837 } 3838 3839 static int 3840 ftrace_match_records(struct ftrace_hash *hash, char *buff, int len) 3841 { 3842 return match_records(hash, buff, len, NULL); 3843 } 3844 3845 static void ftrace_ops_update_code(struct ftrace_ops *ops, 3846 struct ftrace_ops_hash *old_hash) 3847 { 3848 struct ftrace_ops *op; 3849 3850 if (!ftrace_enabled) 3851 return; 3852 3853 if (ops->flags & FTRACE_OPS_FL_ENABLED) { 3854 ftrace_run_modify_code(ops, FTRACE_UPDATE_CALLS, old_hash); 3855 return; 3856 } 3857 3858 /* 3859 * If this is the shared global_ops filter, then we need to 3860 * check if there is another ops that shares it, is enabled. 3861 * If so, we still need to run the modify code. 3862 */ 3863 if (ops->func_hash != &global_ops.local_hash) 3864 return; 3865 3866 do_for_each_ftrace_op(op, ftrace_ops_list) { 3867 if (op->func_hash == &global_ops.local_hash && 3868 op->flags & FTRACE_OPS_FL_ENABLED) { 3869 ftrace_run_modify_code(op, FTRACE_UPDATE_CALLS, old_hash); 3870 /* Only need to do this once */ 3871 return; 3872 } 3873 } while_for_each_ftrace_op(op); 3874 } 3875 3876 static int ftrace_hash_move_and_update_ops(struct ftrace_ops *ops, 3877 struct ftrace_hash **orig_hash, 3878 struct ftrace_hash *hash, 3879 int enable) 3880 { 3881 struct ftrace_ops_hash old_hash_ops; 3882 struct ftrace_hash *old_hash; 3883 int ret; 3884 3885 old_hash = *orig_hash; 3886 old_hash_ops.filter_hash = ops->func_hash->filter_hash; 3887 old_hash_ops.notrace_hash = ops->func_hash->notrace_hash; 3888 ret = ftrace_hash_move(ops, enable, orig_hash, hash); 3889 if (!ret) { 3890 ftrace_ops_update_code(ops, &old_hash_ops); 3891 free_ftrace_hash_rcu(old_hash); 3892 } 3893 return ret; 3894 } 3895 3896 static bool module_exists(const char *module) 3897 { 3898 /* All modules have the symbol __this_module */ 3899 const char this_mod[] = "__this_module"; 3900 const int modname_size = MAX_PARAM_PREFIX_LEN + sizeof(this_mod) + 1; 3901 char modname[modname_size + 1]; 3902 unsigned long val; 3903 int n; 3904 3905 n = snprintf(modname, modname_size + 1, "%s:%s", module, this_mod); 3906 3907 if (n > modname_size) 3908 return false; 3909 3910 val = module_kallsyms_lookup_name(modname); 3911 return val != 0; 3912 } 3913 3914 static int cache_mod(struct trace_array *tr, 3915 const char *func, char *module, int enable) 3916 { 3917 struct ftrace_mod_load *ftrace_mod, *n; 3918 struct list_head *head = enable ? &tr->mod_trace : &tr->mod_notrace; 3919 int ret; 3920 3921 mutex_lock(&ftrace_lock); 3922 3923 /* We do not cache inverse filters */ 3924 if (func[0] == '!') { 3925 func++; 3926 ret = -EINVAL; 3927 3928 /* Look to remove this hash */ 3929 list_for_each_entry_safe(ftrace_mod, n, head, list) { 3930 if (strcmp(ftrace_mod->module, module) != 0) 3931 continue; 3932 3933 /* no func matches all */ 3934 if (strcmp(func, "*") == 0 || 3935 (ftrace_mod->func && 3936 strcmp(ftrace_mod->func, func) == 0)) { 3937 ret = 0; 3938 free_ftrace_mod(ftrace_mod); 3939 continue; 3940 } 3941 } 3942 goto out; 3943 } 3944 3945 ret = -EINVAL; 3946 /* We only care about modules that have not been loaded yet */ 3947 if (module_exists(module)) 3948 goto out; 3949 3950 /* Save this string off, and execute it when the module is loaded */ 3951 ret = ftrace_add_mod(tr, func, module, enable); 3952 out: 3953 mutex_unlock(&ftrace_lock); 3954 3955 return ret; 3956 } 3957 3958 static int 3959 ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, 3960 int reset, int enable); 3961 3962 #ifdef CONFIG_MODULES 3963 static void process_mod_list(struct list_head *head, struct ftrace_ops *ops, 3964 char *mod, bool enable) 3965 { 3966 struct ftrace_mod_load *ftrace_mod, *n; 3967 struct ftrace_hash **orig_hash, *new_hash; 3968 LIST_HEAD(process_mods); 3969 char *func; 3970 int ret; 3971 3972 mutex_lock(&ops->func_hash->regex_lock); 3973 3974 if (enable) 3975 orig_hash = &ops->func_hash->filter_hash; 3976 else 3977 orig_hash = &ops->func_hash->notrace_hash; 3978 3979 new_hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, 3980 *orig_hash); 3981 if (!new_hash) 3982 goto out; /* warn? */ 3983 3984 mutex_lock(&ftrace_lock); 3985 3986 list_for_each_entry_safe(ftrace_mod, n, head, list) { 3987 3988 if (strcmp(ftrace_mod->module, mod) != 0) 3989 continue; 3990 3991 if (ftrace_mod->func) 3992 func = kstrdup(ftrace_mod->func, GFP_KERNEL); 3993 else 3994 func = kstrdup("*", GFP_KERNEL); 3995 3996 if (!func) /* warn? */ 3997 continue; 3998 3999 list_del(&ftrace_mod->list); 4000 list_add(&ftrace_mod->list, &process_mods); 4001 4002 /* Use the newly allocated func, as it may be "*" */ 4003 kfree(ftrace_mod->func); 4004 ftrace_mod->func = func; 4005 } 4006 4007 mutex_unlock(&ftrace_lock); 4008 4009 list_for_each_entry_safe(ftrace_mod, n, &process_mods, list) { 4010 4011 func = ftrace_mod->func; 4012 4013 /* Grabs ftrace_lock, which is why we have this extra step */ 4014 match_records(new_hash, func, strlen(func), mod); 4015 free_ftrace_mod(ftrace_mod); 4016 } 4017 4018 if (enable && list_empty(head)) 4019 new_hash->flags &= ~FTRACE_HASH_FL_MOD; 4020 4021 mutex_lock(&ftrace_lock); 4022 4023 ret = ftrace_hash_move_and_update_ops(ops, orig_hash, 4024 new_hash, enable); 4025 mutex_unlock(&ftrace_lock); 4026 4027 out: 4028 mutex_unlock(&ops->func_hash->regex_lock); 4029 4030 free_ftrace_hash(new_hash); 4031 } 4032 4033 static void process_cached_mods(const char *mod_name) 4034 { 4035 struct trace_array *tr; 4036 char *mod; 4037 4038 mod = kstrdup(mod_name, GFP_KERNEL); 4039 if (!mod) 4040 return; 4041 4042 mutex_lock(&trace_types_lock); 4043 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 4044 if (!list_empty(&tr->mod_trace)) 4045 process_mod_list(&tr->mod_trace, tr->ops, mod, true); 4046 if (!list_empty(&tr->mod_notrace)) 4047 process_mod_list(&tr->mod_notrace, tr->ops, mod, false); 4048 } 4049 mutex_unlock(&trace_types_lock); 4050 4051 kfree(mod); 4052 } 4053 #endif 4054 4055 /* 4056 * We register the module command as a template to show others how 4057 * to register the a command as well. 4058 */ 4059 4060 static int 4061 ftrace_mod_callback(struct trace_array *tr, struct ftrace_hash *hash, 4062 char *func_orig, char *cmd, char *module, int enable) 4063 { 4064 char *func; 4065 int ret; 4066 4067 /* match_records() modifies func, and we need the original */ 4068 func = kstrdup(func_orig, GFP_KERNEL); 4069 if (!func) 4070 return -ENOMEM; 4071 4072 /* 4073 * cmd == 'mod' because we only registered this func 4074 * for the 'mod' ftrace_func_command. 4075 * But if you register one func with multiple commands, 4076 * you can tell which command was used by the cmd 4077 * parameter. 4078 */ 4079 ret = match_records(hash, func, strlen(func), module); 4080 kfree(func); 4081 4082 if (!ret) 4083 return cache_mod(tr, func_orig, module, enable); 4084 if (ret < 0) 4085 return ret; 4086 return 0; 4087 } 4088 4089 static struct ftrace_func_command ftrace_mod_cmd = { 4090 .name = "mod", 4091 .func = ftrace_mod_callback, 4092 }; 4093 4094 static int __init ftrace_mod_cmd_init(void) 4095 { 4096 return register_ftrace_command(&ftrace_mod_cmd); 4097 } 4098 core_initcall(ftrace_mod_cmd_init); 4099 4100 static void function_trace_probe_call(unsigned long ip, unsigned long parent_ip, 4101 struct ftrace_ops *op, struct pt_regs *pt_regs) 4102 { 4103 struct ftrace_probe_ops *probe_ops; 4104 struct ftrace_func_probe *probe; 4105 4106 probe = container_of(op, struct ftrace_func_probe, ops); 4107 probe_ops = probe->probe_ops; 4108 4109 /* 4110 * Disable preemption for these calls to prevent a RCU grace 4111 * period. This syncs the hash iteration and freeing of items 4112 * on the hash. rcu_read_lock is too dangerous here. 4113 */ 4114 preempt_disable_notrace(); 4115 probe_ops->func(ip, parent_ip, probe->tr, probe_ops, probe->data); 4116 preempt_enable_notrace(); 4117 } 4118 4119 struct ftrace_func_map { 4120 struct ftrace_func_entry entry; 4121 void *data; 4122 }; 4123 4124 struct ftrace_func_mapper { 4125 struct ftrace_hash hash; 4126 }; 4127 4128 /** 4129 * allocate_ftrace_func_mapper - allocate a new ftrace_func_mapper 4130 * 4131 * Returns a ftrace_func_mapper descriptor that can be used to map ips to data. 4132 */ 4133 struct ftrace_func_mapper *allocate_ftrace_func_mapper(void) 4134 { 4135 struct ftrace_hash *hash; 4136 4137 /* 4138 * The mapper is simply a ftrace_hash, but since the entries 4139 * in the hash are not ftrace_func_entry type, we define it 4140 * as a separate structure. 4141 */ 4142 hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS); 4143 return (struct ftrace_func_mapper *)hash; 4144 } 4145 4146 /** 4147 * ftrace_func_mapper_find_ip - Find some data mapped to an ip 4148 * @mapper: The mapper that has the ip maps 4149 * @ip: the instruction pointer to find the data for 4150 * 4151 * Returns the data mapped to @ip if found otherwise NULL. The return 4152 * is actually the address of the mapper data pointer. The address is 4153 * returned for use cases where the data is no bigger than a long, and 4154 * the user can use the data pointer as its data instead of having to 4155 * allocate more memory for the reference. 4156 */ 4157 void **ftrace_func_mapper_find_ip(struct ftrace_func_mapper *mapper, 4158 unsigned long ip) 4159 { 4160 struct ftrace_func_entry *entry; 4161 struct ftrace_func_map *map; 4162 4163 entry = ftrace_lookup_ip(&mapper->hash, ip); 4164 if (!entry) 4165 return NULL; 4166 4167 map = (struct ftrace_func_map *)entry; 4168 return &map->data; 4169 } 4170 4171 /** 4172 * ftrace_func_mapper_add_ip - Map some data to an ip 4173 * @mapper: The mapper that has the ip maps 4174 * @ip: The instruction pointer address to map @data to 4175 * @data: The data to map to @ip 4176 * 4177 * Returns 0 on succes otherwise an error. 4178 */ 4179 int ftrace_func_mapper_add_ip(struct ftrace_func_mapper *mapper, 4180 unsigned long ip, void *data) 4181 { 4182 struct ftrace_func_entry *entry; 4183 struct ftrace_func_map *map; 4184 4185 entry = ftrace_lookup_ip(&mapper->hash, ip); 4186 if (entry) 4187 return -EBUSY; 4188 4189 map = kmalloc(sizeof(*map), GFP_KERNEL); 4190 if (!map) 4191 return -ENOMEM; 4192 4193 map->entry.ip = ip; 4194 map->data = data; 4195 4196 __add_hash_entry(&mapper->hash, &map->entry); 4197 4198 return 0; 4199 } 4200 4201 /** 4202 * ftrace_func_mapper_remove_ip - Remove an ip from the mapping 4203 * @mapper: The mapper that has the ip maps 4204 * @ip: The instruction pointer address to remove the data from 4205 * 4206 * Returns the data if it is found, otherwise NULL. 4207 * Note, if the data pointer is used as the data itself, (see 4208 * ftrace_func_mapper_find_ip(), then the return value may be meaningless, 4209 * if the data pointer was set to zero. 4210 */ 4211 void *ftrace_func_mapper_remove_ip(struct ftrace_func_mapper *mapper, 4212 unsigned long ip) 4213 { 4214 struct ftrace_func_entry *entry; 4215 struct ftrace_func_map *map; 4216 void *data; 4217 4218 entry = ftrace_lookup_ip(&mapper->hash, ip); 4219 if (!entry) 4220 return NULL; 4221 4222 map = (struct ftrace_func_map *)entry; 4223 data = map->data; 4224 4225 remove_hash_entry(&mapper->hash, entry); 4226 kfree(entry); 4227 4228 return data; 4229 } 4230 4231 /** 4232 * free_ftrace_func_mapper - free a mapping of ips and data 4233 * @mapper: The mapper that has the ip maps 4234 * @free_func: A function to be called on each data item. 4235 * 4236 * This is used to free the function mapper. The @free_func is optional 4237 * and can be used if the data needs to be freed as well. 4238 */ 4239 void free_ftrace_func_mapper(struct ftrace_func_mapper *mapper, 4240 ftrace_mapper_func free_func) 4241 { 4242 struct ftrace_func_entry *entry; 4243 struct ftrace_func_map *map; 4244 struct hlist_head *hhd; 4245 int size = 1 << mapper->hash.size_bits; 4246 int i; 4247 4248 if (free_func && mapper->hash.count) { 4249 for (i = 0; i < size; i++) { 4250 hhd = &mapper->hash.buckets[i]; 4251 hlist_for_each_entry(entry, hhd, hlist) { 4252 map = (struct ftrace_func_map *)entry; 4253 free_func(map); 4254 } 4255 } 4256 } 4257 free_ftrace_hash(&mapper->hash); 4258 } 4259 4260 static void release_probe(struct ftrace_func_probe *probe) 4261 { 4262 struct ftrace_probe_ops *probe_ops; 4263 4264 mutex_lock(&ftrace_lock); 4265 4266 WARN_ON(probe->ref <= 0); 4267 4268 /* Subtract the ref that was used to protect this instance */ 4269 probe->ref--; 4270 4271 if (!probe->ref) { 4272 probe_ops = probe->probe_ops; 4273 /* 4274 * Sending zero as ip tells probe_ops to free 4275 * the probe->data itself 4276 */ 4277 if (probe_ops->free) 4278 probe_ops->free(probe_ops, probe->tr, 0, probe->data); 4279 list_del(&probe->list); 4280 kfree(probe); 4281 } 4282 mutex_unlock(&ftrace_lock); 4283 } 4284 4285 static void acquire_probe_locked(struct ftrace_func_probe *probe) 4286 { 4287 /* 4288 * Add one ref to keep it from being freed when releasing the 4289 * ftrace_lock mutex. 4290 */ 4291 probe->ref++; 4292 } 4293 4294 int 4295 register_ftrace_function_probe(char *glob, struct trace_array *tr, 4296 struct ftrace_probe_ops *probe_ops, 4297 void *data) 4298 { 4299 struct ftrace_func_entry *entry; 4300 struct ftrace_func_probe *probe; 4301 struct ftrace_hash **orig_hash; 4302 struct ftrace_hash *old_hash; 4303 struct ftrace_hash *hash; 4304 int count = 0; 4305 int size; 4306 int ret; 4307 int i; 4308 4309 if (WARN_ON(!tr)) 4310 return -EINVAL; 4311 4312 /* We do not support '!' for function probes */ 4313 if (WARN_ON(glob[0] == '!')) 4314 return -EINVAL; 4315 4316 4317 mutex_lock(&ftrace_lock); 4318 /* Check if the probe_ops is already registered */ 4319 list_for_each_entry(probe, &tr->func_probes, list) { 4320 if (probe->probe_ops == probe_ops) 4321 break; 4322 } 4323 if (&probe->list == &tr->func_probes) { 4324 probe = kzalloc(sizeof(*probe), GFP_KERNEL); 4325 if (!probe) { 4326 mutex_unlock(&ftrace_lock); 4327 return -ENOMEM; 4328 } 4329 probe->probe_ops = probe_ops; 4330 probe->ops.func = function_trace_probe_call; 4331 probe->tr = tr; 4332 ftrace_ops_init(&probe->ops); 4333 list_add(&probe->list, &tr->func_probes); 4334 } 4335 4336 acquire_probe_locked(probe); 4337 4338 mutex_unlock(&ftrace_lock); 4339 4340 mutex_lock(&probe->ops.func_hash->regex_lock); 4341 4342 orig_hash = &probe->ops.func_hash->filter_hash; 4343 old_hash = *orig_hash; 4344 hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, old_hash); 4345 4346 ret = ftrace_match_records(hash, glob, strlen(glob)); 4347 4348 /* Nothing found? */ 4349 if (!ret) 4350 ret = -EINVAL; 4351 4352 if (ret < 0) 4353 goto out; 4354 4355 size = 1 << hash->size_bits; 4356 for (i = 0; i < size; i++) { 4357 hlist_for_each_entry(entry, &hash->buckets[i], hlist) { 4358 if (ftrace_lookup_ip(old_hash, entry->ip)) 4359 continue; 4360 /* 4361 * The caller might want to do something special 4362 * for each function we find. We call the callback 4363 * to give the caller an opportunity to do so. 4364 */ 4365 if (probe_ops->init) { 4366 ret = probe_ops->init(probe_ops, tr, 4367 entry->ip, data, 4368 &probe->data); 4369 if (ret < 0) { 4370 if (probe_ops->free && count) 4371 probe_ops->free(probe_ops, tr, 4372 0, probe->data); 4373 probe->data = NULL; 4374 goto out; 4375 } 4376 } 4377 count++; 4378 } 4379 } 4380 4381 mutex_lock(&ftrace_lock); 4382 4383 if (!count) { 4384 /* Nothing was added? */ 4385 ret = -EINVAL; 4386 goto out_unlock; 4387 } 4388 4389 ret = ftrace_hash_move_and_update_ops(&probe->ops, orig_hash, 4390 hash, 1); 4391 if (ret < 0) 4392 goto err_unlock; 4393 4394 /* One ref for each new function traced */ 4395 probe->ref += count; 4396 4397 if (!(probe->ops.flags & FTRACE_OPS_FL_ENABLED)) 4398 ret = ftrace_startup(&probe->ops, 0); 4399 4400 out_unlock: 4401 mutex_unlock(&ftrace_lock); 4402 4403 if (!ret) 4404 ret = count; 4405 out: 4406 mutex_unlock(&probe->ops.func_hash->regex_lock); 4407 free_ftrace_hash(hash); 4408 4409 release_probe(probe); 4410 4411 return ret; 4412 4413 err_unlock: 4414 if (!probe_ops->free || !count) 4415 goto out_unlock; 4416 4417 /* Failed to do the move, need to call the free functions */ 4418 for (i = 0; i < size; i++) { 4419 hlist_for_each_entry(entry, &hash->buckets[i], hlist) { 4420 if (ftrace_lookup_ip(old_hash, entry->ip)) 4421 continue; 4422 probe_ops->free(probe_ops, tr, entry->ip, probe->data); 4423 } 4424 } 4425 goto out_unlock; 4426 } 4427 4428 int 4429 unregister_ftrace_function_probe_func(char *glob, struct trace_array *tr, 4430 struct ftrace_probe_ops *probe_ops) 4431 { 4432 struct ftrace_ops_hash old_hash_ops; 4433 struct ftrace_func_entry *entry; 4434 struct ftrace_func_probe *probe; 4435 struct ftrace_glob func_g; 4436 struct ftrace_hash **orig_hash; 4437 struct ftrace_hash *old_hash; 4438 struct ftrace_hash *hash = NULL; 4439 struct hlist_node *tmp; 4440 struct hlist_head hhd; 4441 char str[KSYM_SYMBOL_LEN]; 4442 int count = 0; 4443 int i, ret = -ENODEV; 4444 int size; 4445 4446 if (!glob || !strlen(glob) || !strcmp(glob, "*")) 4447 func_g.search = NULL; 4448 else { 4449 int not; 4450 4451 func_g.type = filter_parse_regex(glob, strlen(glob), 4452 &func_g.search, ¬); 4453 func_g.len = strlen(func_g.search); 4454 func_g.search = glob; 4455 4456 /* we do not support '!' for function probes */ 4457 if (WARN_ON(not)) 4458 return -EINVAL; 4459 } 4460 4461 mutex_lock(&ftrace_lock); 4462 /* Check if the probe_ops is already registered */ 4463 list_for_each_entry(probe, &tr->func_probes, list) { 4464 if (probe->probe_ops == probe_ops) 4465 break; 4466 } 4467 if (&probe->list == &tr->func_probes) 4468 goto err_unlock_ftrace; 4469 4470 ret = -EINVAL; 4471 if (!(probe->ops.flags & FTRACE_OPS_FL_INITIALIZED)) 4472 goto err_unlock_ftrace; 4473 4474 acquire_probe_locked(probe); 4475 4476 mutex_unlock(&ftrace_lock); 4477 4478 mutex_lock(&probe->ops.func_hash->regex_lock); 4479 4480 orig_hash = &probe->ops.func_hash->filter_hash; 4481 old_hash = *orig_hash; 4482 4483 if (ftrace_hash_empty(old_hash)) 4484 goto out_unlock; 4485 4486 old_hash_ops.filter_hash = old_hash; 4487 /* Probes only have filters */ 4488 old_hash_ops.notrace_hash = NULL; 4489 4490 ret = -ENOMEM; 4491 hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, old_hash); 4492 if (!hash) 4493 goto out_unlock; 4494 4495 INIT_HLIST_HEAD(&hhd); 4496 4497 size = 1 << hash->size_bits; 4498 for (i = 0; i < size; i++) { 4499 hlist_for_each_entry_safe(entry, tmp, &hash->buckets[i], hlist) { 4500 4501 if (func_g.search) { 4502 kallsyms_lookup(entry->ip, NULL, NULL, 4503 NULL, str); 4504 if (!ftrace_match(str, &func_g)) 4505 continue; 4506 } 4507 count++; 4508 remove_hash_entry(hash, entry); 4509 hlist_add_head(&entry->hlist, &hhd); 4510 } 4511 } 4512 4513 /* Nothing found? */ 4514 if (!count) { 4515 ret = -EINVAL; 4516 goto out_unlock; 4517 } 4518 4519 mutex_lock(&ftrace_lock); 4520 4521 WARN_ON(probe->ref < count); 4522 4523 probe->ref -= count; 4524 4525 if (ftrace_hash_empty(hash)) 4526 ftrace_shutdown(&probe->ops, 0); 4527 4528 ret = ftrace_hash_move_and_update_ops(&probe->ops, orig_hash, 4529 hash, 1); 4530 4531 /* still need to update the function call sites */ 4532 if (ftrace_enabled && !ftrace_hash_empty(hash)) 4533 ftrace_run_modify_code(&probe->ops, FTRACE_UPDATE_CALLS, 4534 &old_hash_ops); 4535 synchronize_sched(); 4536 4537 hlist_for_each_entry_safe(entry, tmp, &hhd, hlist) { 4538 hlist_del(&entry->hlist); 4539 if (probe_ops->free) 4540 probe_ops->free(probe_ops, tr, entry->ip, probe->data); 4541 kfree(entry); 4542 } 4543 mutex_unlock(&ftrace_lock); 4544 4545 out_unlock: 4546 mutex_unlock(&probe->ops.func_hash->regex_lock); 4547 free_ftrace_hash(hash); 4548 4549 release_probe(probe); 4550 4551 return ret; 4552 4553 err_unlock_ftrace: 4554 mutex_unlock(&ftrace_lock); 4555 return ret; 4556 } 4557 4558 void clear_ftrace_function_probes(struct trace_array *tr) 4559 { 4560 struct ftrace_func_probe *probe, *n; 4561 4562 list_for_each_entry_safe(probe, n, &tr->func_probes, list) 4563 unregister_ftrace_function_probe_func(NULL, tr, probe->probe_ops); 4564 } 4565 4566 static LIST_HEAD(ftrace_commands); 4567 static DEFINE_MUTEX(ftrace_cmd_mutex); 4568 4569 /* 4570 * Currently we only register ftrace commands from __init, so mark this 4571 * __init too. 4572 */ 4573 __init int register_ftrace_command(struct ftrace_func_command *cmd) 4574 { 4575 struct ftrace_func_command *p; 4576 int ret = 0; 4577 4578 mutex_lock(&ftrace_cmd_mutex); 4579 list_for_each_entry(p, &ftrace_commands, list) { 4580 if (strcmp(cmd->name, p->name) == 0) { 4581 ret = -EBUSY; 4582 goto out_unlock; 4583 } 4584 } 4585 list_add(&cmd->list, &ftrace_commands); 4586 out_unlock: 4587 mutex_unlock(&ftrace_cmd_mutex); 4588 4589 return ret; 4590 } 4591 4592 /* 4593 * Currently we only unregister ftrace commands from __init, so mark 4594 * this __init too. 4595 */ 4596 __init int unregister_ftrace_command(struct ftrace_func_command *cmd) 4597 { 4598 struct ftrace_func_command *p, *n; 4599 int ret = -ENODEV; 4600 4601 mutex_lock(&ftrace_cmd_mutex); 4602 list_for_each_entry_safe(p, n, &ftrace_commands, list) { 4603 if (strcmp(cmd->name, p->name) == 0) { 4604 ret = 0; 4605 list_del_init(&p->list); 4606 goto out_unlock; 4607 } 4608 } 4609 out_unlock: 4610 mutex_unlock(&ftrace_cmd_mutex); 4611 4612 return ret; 4613 } 4614 4615 static int ftrace_process_regex(struct ftrace_iterator *iter, 4616 char *buff, int len, int enable) 4617 { 4618 struct ftrace_hash *hash = iter->hash; 4619 struct trace_array *tr = iter->ops->private; 4620 char *func, *command, *next = buff; 4621 struct ftrace_func_command *p; 4622 int ret = -EINVAL; 4623 4624 func = strsep(&next, ":"); 4625 4626 if (!next) { 4627 ret = ftrace_match_records(hash, func, len); 4628 if (!ret) 4629 ret = -EINVAL; 4630 if (ret < 0) 4631 return ret; 4632 return 0; 4633 } 4634 4635 /* command found */ 4636 4637 command = strsep(&next, ":"); 4638 4639 mutex_lock(&ftrace_cmd_mutex); 4640 list_for_each_entry(p, &ftrace_commands, list) { 4641 if (strcmp(p->name, command) == 0) { 4642 ret = p->func(tr, hash, func, command, next, enable); 4643 goto out_unlock; 4644 } 4645 } 4646 out_unlock: 4647 mutex_unlock(&ftrace_cmd_mutex); 4648 4649 return ret; 4650 } 4651 4652 static ssize_t 4653 ftrace_regex_write(struct file *file, const char __user *ubuf, 4654 size_t cnt, loff_t *ppos, int enable) 4655 { 4656 struct ftrace_iterator *iter; 4657 struct trace_parser *parser; 4658 ssize_t ret, read; 4659 4660 if (!cnt) 4661 return 0; 4662 4663 if (file->f_mode & FMODE_READ) { 4664 struct seq_file *m = file->private_data; 4665 iter = m->private; 4666 } else 4667 iter = file->private_data; 4668 4669 if (unlikely(ftrace_disabled)) 4670 return -ENODEV; 4671 4672 /* iter->hash is a local copy, so we don't need regex_lock */ 4673 4674 parser = &iter->parser; 4675 read = trace_get_user(parser, ubuf, cnt, ppos); 4676 4677 if (read >= 0 && trace_parser_loaded(parser) && 4678 !trace_parser_cont(parser)) { 4679 ret = ftrace_process_regex(iter, parser->buffer, 4680 parser->idx, enable); 4681 trace_parser_clear(parser); 4682 if (ret < 0) 4683 goto out; 4684 } 4685 4686 ret = read; 4687 out: 4688 return ret; 4689 } 4690 4691 ssize_t 4692 ftrace_filter_write(struct file *file, const char __user *ubuf, 4693 size_t cnt, loff_t *ppos) 4694 { 4695 return ftrace_regex_write(file, ubuf, cnt, ppos, 1); 4696 } 4697 4698 ssize_t 4699 ftrace_notrace_write(struct file *file, const char __user *ubuf, 4700 size_t cnt, loff_t *ppos) 4701 { 4702 return ftrace_regex_write(file, ubuf, cnt, ppos, 0); 4703 } 4704 4705 static int 4706 ftrace_match_addr(struct ftrace_hash *hash, unsigned long ip, int remove) 4707 { 4708 struct ftrace_func_entry *entry; 4709 4710 if (!ftrace_location(ip)) 4711 return -EINVAL; 4712 4713 if (remove) { 4714 entry = ftrace_lookup_ip(hash, ip); 4715 if (!entry) 4716 return -ENOENT; 4717 free_hash_entry(hash, entry); 4718 return 0; 4719 } 4720 4721 return add_hash_entry(hash, ip); 4722 } 4723 4724 static int 4725 ftrace_set_hash(struct ftrace_ops *ops, unsigned char *buf, int len, 4726 unsigned long ip, int remove, int reset, int enable) 4727 { 4728 struct ftrace_hash **orig_hash; 4729 struct ftrace_hash *hash; 4730 int ret; 4731 4732 if (unlikely(ftrace_disabled)) 4733 return -ENODEV; 4734 4735 mutex_lock(&ops->func_hash->regex_lock); 4736 4737 if (enable) 4738 orig_hash = &ops->func_hash->filter_hash; 4739 else 4740 orig_hash = &ops->func_hash->notrace_hash; 4741 4742 if (reset) 4743 hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS); 4744 else 4745 hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, *orig_hash); 4746 4747 if (!hash) { 4748 ret = -ENOMEM; 4749 goto out_regex_unlock; 4750 } 4751 4752 if (buf && !ftrace_match_records(hash, buf, len)) { 4753 ret = -EINVAL; 4754 goto out_regex_unlock; 4755 } 4756 if (ip) { 4757 ret = ftrace_match_addr(hash, ip, remove); 4758 if (ret < 0) 4759 goto out_regex_unlock; 4760 } 4761 4762 mutex_lock(&ftrace_lock); 4763 ret = ftrace_hash_move_and_update_ops(ops, orig_hash, hash, enable); 4764 mutex_unlock(&ftrace_lock); 4765 4766 out_regex_unlock: 4767 mutex_unlock(&ops->func_hash->regex_lock); 4768 4769 free_ftrace_hash(hash); 4770 return ret; 4771 } 4772 4773 static int 4774 ftrace_set_addr(struct ftrace_ops *ops, unsigned long ip, int remove, 4775 int reset, int enable) 4776 { 4777 return ftrace_set_hash(ops, 0, 0, ip, remove, reset, enable); 4778 } 4779 4780 /** 4781 * ftrace_set_filter_ip - set a function to filter on in ftrace by address 4782 * @ops - the ops to set the filter with 4783 * @ip - the address to add to or remove from the filter. 4784 * @remove - non zero to remove the ip from the filter 4785 * @reset - non zero to reset all filters before applying this filter. 4786 * 4787 * Filters denote which functions should be enabled when tracing is enabled 4788 * If @ip is NULL, it failes to update filter. 4789 */ 4790 int ftrace_set_filter_ip(struct ftrace_ops *ops, unsigned long ip, 4791 int remove, int reset) 4792 { 4793 ftrace_ops_init(ops); 4794 return ftrace_set_addr(ops, ip, remove, reset, 1); 4795 } 4796 EXPORT_SYMBOL_GPL(ftrace_set_filter_ip); 4797 4798 /** 4799 * ftrace_ops_set_global_filter - setup ops to use global filters 4800 * @ops - the ops which will use the global filters 4801 * 4802 * ftrace users who need global function trace filtering should call this. 4803 * It can set the global filter only if ops were not initialized before. 4804 */ 4805 void ftrace_ops_set_global_filter(struct ftrace_ops *ops) 4806 { 4807 if (ops->flags & FTRACE_OPS_FL_INITIALIZED) 4808 return; 4809 4810 ftrace_ops_init(ops); 4811 ops->func_hash = &global_ops.local_hash; 4812 } 4813 EXPORT_SYMBOL_GPL(ftrace_ops_set_global_filter); 4814 4815 static int 4816 ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, 4817 int reset, int enable) 4818 { 4819 return ftrace_set_hash(ops, buf, len, 0, 0, reset, enable); 4820 } 4821 4822 /** 4823 * ftrace_set_filter - set a function to filter on in ftrace 4824 * @ops - the ops to set the filter with 4825 * @buf - the string that holds the function filter text. 4826 * @len - the length of the string. 4827 * @reset - non zero to reset all filters before applying this filter. 4828 * 4829 * Filters denote which functions should be enabled when tracing is enabled. 4830 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 4831 */ 4832 int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf, 4833 int len, int reset) 4834 { 4835 ftrace_ops_init(ops); 4836 return ftrace_set_regex(ops, buf, len, reset, 1); 4837 } 4838 EXPORT_SYMBOL_GPL(ftrace_set_filter); 4839 4840 /** 4841 * ftrace_set_notrace - set a function to not trace in ftrace 4842 * @ops - the ops to set the notrace filter with 4843 * @buf - the string that holds the function notrace text. 4844 * @len - the length of the string. 4845 * @reset - non zero to reset all filters before applying this filter. 4846 * 4847 * Notrace Filters denote which functions should not be enabled when tracing 4848 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 4849 * for tracing. 4850 */ 4851 int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf, 4852 int len, int reset) 4853 { 4854 ftrace_ops_init(ops); 4855 return ftrace_set_regex(ops, buf, len, reset, 0); 4856 } 4857 EXPORT_SYMBOL_GPL(ftrace_set_notrace); 4858 /** 4859 * ftrace_set_global_filter - set a function to filter on with global tracers 4860 * @buf - the string that holds the function filter text. 4861 * @len - the length of the string. 4862 * @reset - non zero to reset all filters before applying this filter. 4863 * 4864 * Filters denote which functions should be enabled when tracing is enabled. 4865 * If @buf is NULL and reset is set, all functions will be enabled for tracing. 4866 */ 4867 void ftrace_set_global_filter(unsigned char *buf, int len, int reset) 4868 { 4869 ftrace_set_regex(&global_ops, buf, len, reset, 1); 4870 } 4871 EXPORT_SYMBOL_GPL(ftrace_set_global_filter); 4872 4873 /** 4874 * ftrace_set_global_notrace - set a function to not trace with global tracers 4875 * @buf - the string that holds the function notrace text. 4876 * @len - the length of the string. 4877 * @reset - non zero to reset all filters before applying this filter. 4878 * 4879 * Notrace Filters denote which functions should not be enabled when tracing 4880 * is enabled. If @buf is NULL and reset is set, all functions will be enabled 4881 * for tracing. 4882 */ 4883 void ftrace_set_global_notrace(unsigned char *buf, int len, int reset) 4884 { 4885 ftrace_set_regex(&global_ops, buf, len, reset, 0); 4886 } 4887 EXPORT_SYMBOL_GPL(ftrace_set_global_notrace); 4888 4889 /* 4890 * command line interface to allow users to set filters on boot up. 4891 */ 4892 #define FTRACE_FILTER_SIZE COMMAND_LINE_SIZE 4893 static char ftrace_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 4894 static char ftrace_filter_buf[FTRACE_FILTER_SIZE] __initdata; 4895 4896 /* Used by function selftest to not test if filter is set */ 4897 bool ftrace_filter_param __initdata; 4898 4899 static int __init set_ftrace_notrace(char *str) 4900 { 4901 ftrace_filter_param = true; 4902 strlcpy(ftrace_notrace_buf, str, FTRACE_FILTER_SIZE); 4903 return 1; 4904 } 4905 __setup("ftrace_notrace=", set_ftrace_notrace); 4906 4907 static int __init set_ftrace_filter(char *str) 4908 { 4909 ftrace_filter_param = true; 4910 strlcpy(ftrace_filter_buf, str, FTRACE_FILTER_SIZE); 4911 return 1; 4912 } 4913 __setup("ftrace_filter=", set_ftrace_filter); 4914 4915 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 4916 static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata; 4917 static char ftrace_graph_notrace_buf[FTRACE_FILTER_SIZE] __initdata; 4918 static int ftrace_graph_set_hash(struct ftrace_hash *hash, char *buffer); 4919 4920 static int __init set_graph_function(char *str) 4921 { 4922 strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE); 4923 return 1; 4924 } 4925 __setup("ftrace_graph_filter=", set_graph_function); 4926 4927 static int __init set_graph_notrace_function(char *str) 4928 { 4929 strlcpy(ftrace_graph_notrace_buf, str, FTRACE_FILTER_SIZE); 4930 return 1; 4931 } 4932 __setup("ftrace_graph_notrace=", set_graph_notrace_function); 4933 4934 static int __init set_graph_max_depth_function(char *str) 4935 { 4936 if (!str) 4937 return 0; 4938 fgraph_max_depth = simple_strtoul(str, NULL, 0); 4939 return 1; 4940 } 4941 __setup("ftrace_graph_max_depth=", set_graph_max_depth_function); 4942 4943 static void __init set_ftrace_early_graph(char *buf, int enable) 4944 { 4945 int ret; 4946 char *func; 4947 struct ftrace_hash *hash; 4948 4949 hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS); 4950 if (WARN_ON(!hash)) 4951 return; 4952 4953 while (buf) { 4954 func = strsep(&buf, ","); 4955 /* we allow only one expression at a time */ 4956 ret = ftrace_graph_set_hash(hash, func); 4957 if (ret) 4958 printk(KERN_DEBUG "ftrace: function %s not " 4959 "traceable\n", func); 4960 } 4961 4962 if (enable) 4963 ftrace_graph_hash = hash; 4964 else 4965 ftrace_graph_notrace_hash = hash; 4966 } 4967 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 4968 4969 void __init 4970 ftrace_set_early_filter(struct ftrace_ops *ops, char *buf, int enable) 4971 { 4972 char *func; 4973 4974 ftrace_ops_init(ops); 4975 4976 while (buf) { 4977 func = strsep(&buf, ","); 4978 ftrace_set_regex(ops, func, strlen(func), 0, enable); 4979 } 4980 } 4981 4982 static void __init set_ftrace_early_filters(void) 4983 { 4984 if (ftrace_filter_buf[0]) 4985 ftrace_set_early_filter(&global_ops, ftrace_filter_buf, 1); 4986 if (ftrace_notrace_buf[0]) 4987 ftrace_set_early_filter(&global_ops, ftrace_notrace_buf, 0); 4988 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 4989 if (ftrace_graph_buf[0]) 4990 set_ftrace_early_graph(ftrace_graph_buf, 1); 4991 if (ftrace_graph_notrace_buf[0]) 4992 set_ftrace_early_graph(ftrace_graph_notrace_buf, 0); 4993 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 4994 } 4995 4996 int ftrace_regex_release(struct inode *inode, struct file *file) 4997 { 4998 struct seq_file *m = (struct seq_file *)file->private_data; 4999 struct ftrace_iterator *iter; 5000 struct ftrace_hash **orig_hash; 5001 struct trace_parser *parser; 5002 int filter_hash; 5003 int ret; 5004 5005 if (file->f_mode & FMODE_READ) { 5006 iter = m->private; 5007 seq_release(inode, file); 5008 } else 5009 iter = file->private_data; 5010 5011 parser = &iter->parser; 5012 if (trace_parser_loaded(parser)) { 5013 parser->buffer[parser->idx] = 0; 5014 ftrace_match_records(iter->hash, parser->buffer, parser->idx); 5015 } 5016 5017 trace_parser_put(parser); 5018 5019 mutex_lock(&iter->ops->func_hash->regex_lock); 5020 5021 if (file->f_mode & FMODE_WRITE) { 5022 filter_hash = !!(iter->flags & FTRACE_ITER_FILTER); 5023 5024 if (filter_hash) { 5025 orig_hash = &iter->ops->func_hash->filter_hash; 5026 if (iter->tr && !list_empty(&iter->tr->mod_trace)) 5027 iter->hash->flags |= FTRACE_HASH_FL_MOD; 5028 } else 5029 orig_hash = &iter->ops->func_hash->notrace_hash; 5030 5031 mutex_lock(&ftrace_lock); 5032 ret = ftrace_hash_move_and_update_ops(iter->ops, orig_hash, 5033 iter->hash, filter_hash); 5034 mutex_unlock(&ftrace_lock); 5035 } else { 5036 /* For read only, the hash is the ops hash */ 5037 iter->hash = NULL; 5038 } 5039 5040 mutex_unlock(&iter->ops->func_hash->regex_lock); 5041 free_ftrace_hash(iter->hash); 5042 kfree(iter); 5043 5044 return 0; 5045 } 5046 5047 static const struct file_operations ftrace_avail_fops = { 5048 .open = ftrace_avail_open, 5049 .read = seq_read, 5050 .llseek = seq_lseek, 5051 .release = seq_release_private, 5052 }; 5053 5054 static const struct file_operations ftrace_enabled_fops = { 5055 .open = ftrace_enabled_open, 5056 .read = seq_read, 5057 .llseek = seq_lseek, 5058 .release = seq_release_private, 5059 }; 5060 5061 static const struct file_operations ftrace_filter_fops = { 5062 .open = ftrace_filter_open, 5063 .read = seq_read, 5064 .write = ftrace_filter_write, 5065 .llseek = tracing_lseek, 5066 .release = ftrace_regex_release, 5067 }; 5068 5069 static const struct file_operations ftrace_notrace_fops = { 5070 .open = ftrace_notrace_open, 5071 .read = seq_read, 5072 .write = ftrace_notrace_write, 5073 .llseek = tracing_lseek, 5074 .release = ftrace_regex_release, 5075 }; 5076 5077 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 5078 5079 static DEFINE_MUTEX(graph_lock); 5080 5081 struct ftrace_hash *ftrace_graph_hash = EMPTY_HASH; 5082 struct ftrace_hash *ftrace_graph_notrace_hash = EMPTY_HASH; 5083 5084 enum graph_filter_type { 5085 GRAPH_FILTER_NOTRACE = 0, 5086 GRAPH_FILTER_FUNCTION, 5087 }; 5088 5089 #define FTRACE_GRAPH_EMPTY ((void *)1) 5090 5091 struct ftrace_graph_data { 5092 struct ftrace_hash *hash; 5093 struct ftrace_func_entry *entry; 5094 int idx; /* for hash table iteration */ 5095 enum graph_filter_type type; 5096 struct ftrace_hash *new_hash; 5097 const struct seq_operations *seq_ops; 5098 struct trace_parser parser; 5099 }; 5100 5101 static void * 5102 __g_next(struct seq_file *m, loff_t *pos) 5103 { 5104 struct ftrace_graph_data *fgd = m->private; 5105 struct ftrace_func_entry *entry = fgd->entry; 5106 struct hlist_head *head; 5107 int i, idx = fgd->idx; 5108 5109 if (*pos >= fgd->hash->count) 5110 return NULL; 5111 5112 if (entry) { 5113 hlist_for_each_entry_continue(entry, hlist) { 5114 fgd->entry = entry; 5115 return entry; 5116 } 5117 5118 idx++; 5119 } 5120 5121 for (i = idx; i < 1 << fgd->hash->size_bits; i++) { 5122 head = &fgd->hash->buckets[i]; 5123 hlist_for_each_entry(entry, head, hlist) { 5124 fgd->entry = entry; 5125 fgd->idx = i; 5126 return entry; 5127 } 5128 } 5129 return NULL; 5130 } 5131 5132 static void * 5133 g_next(struct seq_file *m, void *v, loff_t *pos) 5134 { 5135 (*pos)++; 5136 return __g_next(m, pos); 5137 } 5138 5139 static void *g_start(struct seq_file *m, loff_t *pos) 5140 { 5141 struct ftrace_graph_data *fgd = m->private; 5142 5143 mutex_lock(&graph_lock); 5144 5145 if (fgd->type == GRAPH_FILTER_FUNCTION) 5146 fgd->hash = rcu_dereference_protected(ftrace_graph_hash, 5147 lockdep_is_held(&graph_lock)); 5148 else 5149 fgd->hash = rcu_dereference_protected(ftrace_graph_notrace_hash, 5150 lockdep_is_held(&graph_lock)); 5151 5152 /* Nothing, tell g_show to print all functions are enabled */ 5153 if (ftrace_hash_empty(fgd->hash) && !*pos) 5154 return FTRACE_GRAPH_EMPTY; 5155 5156 fgd->idx = 0; 5157 fgd->entry = NULL; 5158 return __g_next(m, pos); 5159 } 5160 5161 static void g_stop(struct seq_file *m, void *p) 5162 { 5163 mutex_unlock(&graph_lock); 5164 } 5165 5166 static int g_show(struct seq_file *m, void *v) 5167 { 5168 struct ftrace_func_entry *entry = v; 5169 5170 if (!entry) 5171 return 0; 5172 5173 if (entry == FTRACE_GRAPH_EMPTY) { 5174 struct ftrace_graph_data *fgd = m->private; 5175 5176 if (fgd->type == GRAPH_FILTER_FUNCTION) 5177 seq_puts(m, "#### all functions enabled ####\n"); 5178 else 5179 seq_puts(m, "#### no functions disabled ####\n"); 5180 return 0; 5181 } 5182 5183 seq_printf(m, "%ps\n", (void *)entry->ip); 5184 5185 return 0; 5186 } 5187 5188 static const struct seq_operations ftrace_graph_seq_ops = { 5189 .start = g_start, 5190 .next = g_next, 5191 .stop = g_stop, 5192 .show = g_show, 5193 }; 5194 5195 static int 5196 __ftrace_graph_open(struct inode *inode, struct file *file, 5197 struct ftrace_graph_data *fgd) 5198 { 5199 int ret = 0; 5200 struct ftrace_hash *new_hash = NULL; 5201 5202 if (file->f_mode & FMODE_WRITE) { 5203 const int size_bits = FTRACE_HASH_DEFAULT_BITS; 5204 5205 if (trace_parser_get_init(&fgd->parser, FTRACE_BUFF_MAX)) 5206 return -ENOMEM; 5207 5208 if (file->f_flags & O_TRUNC) 5209 new_hash = alloc_ftrace_hash(size_bits); 5210 else 5211 new_hash = alloc_and_copy_ftrace_hash(size_bits, 5212 fgd->hash); 5213 if (!new_hash) { 5214 ret = -ENOMEM; 5215 goto out; 5216 } 5217 } 5218 5219 if (file->f_mode & FMODE_READ) { 5220 ret = seq_open(file, &ftrace_graph_seq_ops); 5221 if (!ret) { 5222 struct seq_file *m = file->private_data; 5223 m->private = fgd; 5224 } else { 5225 /* Failed */ 5226 free_ftrace_hash(new_hash); 5227 new_hash = NULL; 5228 } 5229 } else 5230 file->private_data = fgd; 5231 5232 out: 5233 if (ret < 0 && file->f_mode & FMODE_WRITE) 5234 trace_parser_put(&fgd->parser); 5235 5236 fgd->new_hash = new_hash; 5237 5238 /* 5239 * All uses of fgd->hash must be taken with the graph_lock 5240 * held. The graph_lock is going to be released, so force 5241 * fgd->hash to be reinitialized when it is taken again. 5242 */ 5243 fgd->hash = NULL; 5244 5245 return ret; 5246 } 5247 5248 static int 5249 ftrace_graph_open(struct inode *inode, struct file *file) 5250 { 5251 struct ftrace_graph_data *fgd; 5252 int ret; 5253 5254 if (unlikely(ftrace_disabled)) 5255 return -ENODEV; 5256 5257 fgd = kmalloc(sizeof(*fgd), GFP_KERNEL); 5258 if (fgd == NULL) 5259 return -ENOMEM; 5260 5261 mutex_lock(&graph_lock); 5262 5263 fgd->hash = rcu_dereference_protected(ftrace_graph_hash, 5264 lockdep_is_held(&graph_lock)); 5265 fgd->type = GRAPH_FILTER_FUNCTION; 5266 fgd->seq_ops = &ftrace_graph_seq_ops; 5267 5268 ret = __ftrace_graph_open(inode, file, fgd); 5269 if (ret < 0) 5270 kfree(fgd); 5271 5272 mutex_unlock(&graph_lock); 5273 return ret; 5274 } 5275 5276 static int 5277 ftrace_graph_notrace_open(struct inode *inode, struct file *file) 5278 { 5279 struct ftrace_graph_data *fgd; 5280 int ret; 5281 5282 if (unlikely(ftrace_disabled)) 5283 return -ENODEV; 5284 5285 fgd = kmalloc(sizeof(*fgd), GFP_KERNEL); 5286 if (fgd == NULL) 5287 return -ENOMEM; 5288 5289 mutex_lock(&graph_lock); 5290 5291 fgd->hash = rcu_dereference_protected(ftrace_graph_notrace_hash, 5292 lockdep_is_held(&graph_lock)); 5293 fgd->type = GRAPH_FILTER_NOTRACE; 5294 fgd->seq_ops = &ftrace_graph_seq_ops; 5295 5296 ret = __ftrace_graph_open(inode, file, fgd); 5297 if (ret < 0) 5298 kfree(fgd); 5299 5300 mutex_unlock(&graph_lock); 5301 return ret; 5302 } 5303 5304 static int 5305 ftrace_graph_release(struct inode *inode, struct file *file) 5306 { 5307 struct ftrace_graph_data *fgd; 5308 struct ftrace_hash *old_hash, *new_hash; 5309 struct trace_parser *parser; 5310 int ret = 0; 5311 5312 if (file->f_mode & FMODE_READ) { 5313 struct seq_file *m = file->private_data; 5314 5315 fgd = m->private; 5316 seq_release(inode, file); 5317 } else { 5318 fgd = file->private_data; 5319 } 5320 5321 5322 if (file->f_mode & FMODE_WRITE) { 5323 5324 parser = &fgd->parser; 5325 5326 if (trace_parser_loaded((parser))) { 5327 parser->buffer[parser->idx] = 0; 5328 ret = ftrace_graph_set_hash(fgd->new_hash, 5329 parser->buffer); 5330 } 5331 5332 trace_parser_put(parser); 5333 5334 new_hash = __ftrace_hash_move(fgd->new_hash); 5335 if (!new_hash) { 5336 ret = -ENOMEM; 5337 goto out; 5338 } 5339 5340 mutex_lock(&graph_lock); 5341 5342 if (fgd->type == GRAPH_FILTER_FUNCTION) { 5343 old_hash = rcu_dereference_protected(ftrace_graph_hash, 5344 lockdep_is_held(&graph_lock)); 5345 rcu_assign_pointer(ftrace_graph_hash, new_hash); 5346 } else { 5347 old_hash = rcu_dereference_protected(ftrace_graph_notrace_hash, 5348 lockdep_is_held(&graph_lock)); 5349 rcu_assign_pointer(ftrace_graph_notrace_hash, new_hash); 5350 } 5351 5352 mutex_unlock(&graph_lock); 5353 5354 /* Wait till all users are no longer using the old hash */ 5355 synchronize_sched(); 5356 5357 free_ftrace_hash(old_hash); 5358 } 5359 5360 out: 5361 free_ftrace_hash(fgd->new_hash); 5362 kfree(fgd); 5363 5364 return ret; 5365 } 5366 5367 static int 5368 ftrace_graph_set_hash(struct ftrace_hash *hash, char *buffer) 5369 { 5370 struct ftrace_glob func_g; 5371 struct dyn_ftrace *rec; 5372 struct ftrace_page *pg; 5373 struct ftrace_func_entry *entry; 5374 int fail = 1; 5375 int not; 5376 5377 /* decode regex */ 5378 func_g.type = filter_parse_regex(buffer, strlen(buffer), 5379 &func_g.search, ¬); 5380 5381 func_g.len = strlen(func_g.search); 5382 5383 mutex_lock(&ftrace_lock); 5384 5385 if (unlikely(ftrace_disabled)) { 5386 mutex_unlock(&ftrace_lock); 5387 return -ENODEV; 5388 } 5389 5390 do_for_each_ftrace_rec(pg, rec) { 5391 5392 if (rec->flags & FTRACE_FL_DISABLED) 5393 continue; 5394 5395 if (ftrace_match_record(rec, &func_g, NULL, 0)) { 5396 entry = ftrace_lookup_ip(hash, rec->ip); 5397 5398 if (!not) { 5399 fail = 0; 5400 5401 if (entry) 5402 continue; 5403 if (add_hash_entry(hash, rec->ip) < 0) 5404 goto out; 5405 } else { 5406 if (entry) { 5407 free_hash_entry(hash, entry); 5408 fail = 0; 5409 } 5410 } 5411 } 5412 } while_for_each_ftrace_rec(); 5413 out: 5414 mutex_unlock(&ftrace_lock); 5415 5416 if (fail) 5417 return -EINVAL; 5418 5419 return 0; 5420 } 5421 5422 static ssize_t 5423 ftrace_graph_write(struct file *file, const char __user *ubuf, 5424 size_t cnt, loff_t *ppos) 5425 { 5426 ssize_t read, ret = 0; 5427 struct ftrace_graph_data *fgd = file->private_data; 5428 struct trace_parser *parser; 5429 5430 if (!cnt) 5431 return 0; 5432 5433 /* Read mode uses seq functions */ 5434 if (file->f_mode & FMODE_READ) { 5435 struct seq_file *m = file->private_data; 5436 fgd = m->private; 5437 } 5438 5439 parser = &fgd->parser; 5440 5441 read = trace_get_user(parser, ubuf, cnt, ppos); 5442 5443 if (read >= 0 && trace_parser_loaded(parser) && 5444 !trace_parser_cont(parser)) { 5445 5446 ret = ftrace_graph_set_hash(fgd->new_hash, 5447 parser->buffer); 5448 trace_parser_clear(parser); 5449 } 5450 5451 if (!ret) 5452 ret = read; 5453 5454 return ret; 5455 } 5456 5457 static const struct file_operations ftrace_graph_fops = { 5458 .open = ftrace_graph_open, 5459 .read = seq_read, 5460 .write = ftrace_graph_write, 5461 .llseek = tracing_lseek, 5462 .release = ftrace_graph_release, 5463 }; 5464 5465 static const struct file_operations ftrace_graph_notrace_fops = { 5466 .open = ftrace_graph_notrace_open, 5467 .read = seq_read, 5468 .write = ftrace_graph_write, 5469 .llseek = tracing_lseek, 5470 .release = ftrace_graph_release, 5471 }; 5472 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 5473 5474 void ftrace_create_filter_files(struct ftrace_ops *ops, 5475 struct dentry *parent) 5476 { 5477 5478 trace_create_file("set_ftrace_filter", 0644, parent, 5479 ops, &ftrace_filter_fops); 5480 5481 trace_create_file("set_ftrace_notrace", 0644, parent, 5482 ops, &ftrace_notrace_fops); 5483 } 5484 5485 /* 5486 * The name "destroy_filter_files" is really a misnomer. Although 5487 * in the future, it may actualy delete the files, but this is 5488 * really intended to make sure the ops passed in are disabled 5489 * and that when this function returns, the caller is free to 5490 * free the ops. 5491 * 5492 * The "destroy" name is only to match the "create" name that this 5493 * should be paired with. 5494 */ 5495 void ftrace_destroy_filter_files(struct ftrace_ops *ops) 5496 { 5497 mutex_lock(&ftrace_lock); 5498 if (ops->flags & FTRACE_OPS_FL_ENABLED) 5499 ftrace_shutdown(ops, 0); 5500 ops->flags |= FTRACE_OPS_FL_DELETED; 5501 mutex_unlock(&ftrace_lock); 5502 } 5503 5504 static __init int ftrace_init_dyn_tracefs(struct dentry *d_tracer) 5505 { 5506 5507 trace_create_file("available_filter_functions", 0444, 5508 d_tracer, NULL, &ftrace_avail_fops); 5509 5510 trace_create_file("enabled_functions", 0444, 5511 d_tracer, NULL, &ftrace_enabled_fops); 5512 5513 ftrace_create_filter_files(&global_ops, d_tracer); 5514 5515 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 5516 trace_create_file("set_graph_function", 0444, d_tracer, 5517 NULL, 5518 &ftrace_graph_fops); 5519 trace_create_file("set_graph_notrace", 0444, d_tracer, 5520 NULL, 5521 &ftrace_graph_notrace_fops); 5522 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 5523 5524 return 0; 5525 } 5526 5527 static int ftrace_cmp_ips(const void *a, const void *b) 5528 { 5529 const unsigned long *ipa = a; 5530 const unsigned long *ipb = b; 5531 5532 if (*ipa > *ipb) 5533 return 1; 5534 if (*ipa < *ipb) 5535 return -1; 5536 return 0; 5537 } 5538 5539 static int ftrace_process_locs(struct module *mod, 5540 unsigned long *start, 5541 unsigned long *end) 5542 { 5543 struct ftrace_page *start_pg; 5544 struct ftrace_page *pg; 5545 struct dyn_ftrace *rec; 5546 unsigned long count; 5547 unsigned long *p; 5548 unsigned long addr; 5549 unsigned long flags = 0; /* Shut up gcc */ 5550 int ret = -ENOMEM; 5551 5552 count = end - start; 5553 5554 if (!count) 5555 return 0; 5556 5557 sort(start, count, sizeof(*start), 5558 ftrace_cmp_ips, NULL); 5559 5560 start_pg = ftrace_allocate_pages(count); 5561 if (!start_pg) 5562 return -ENOMEM; 5563 5564 mutex_lock(&ftrace_lock); 5565 5566 /* 5567 * Core and each module needs their own pages, as 5568 * modules will free them when they are removed. 5569 * Force a new page to be allocated for modules. 5570 */ 5571 if (!mod) { 5572 WARN_ON(ftrace_pages || ftrace_pages_start); 5573 /* First initialization */ 5574 ftrace_pages = ftrace_pages_start = start_pg; 5575 } else { 5576 if (!ftrace_pages) 5577 goto out; 5578 5579 if (WARN_ON(ftrace_pages->next)) { 5580 /* Hmm, we have free pages? */ 5581 while (ftrace_pages->next) 5582 ftrace_pages = ftrace_pages->next; 5583 } 5584 5585 ftrace_pages->next = start_pg; 5586 } 5587 5588 p = start; 5589 pg = start_pg; 5590 while (p < end) { 5591 addr = ftrace_call_adjust(*p++); 5592 /* 5593 * Some architecture linkers will pad between 5594 * the different mcount_loc sections of different 5595 * object files to satisfy alignments. 5596 * Skip any NULL pointers. 5597 */ 5598 if (!addr) 5599 continue; 5600 5601 if (pg->index == pg->size) { 5602 /* We should have allocated enough */ 5603 if (WARN_ON(!pg->next)) 5604 break; 5605 pg = pg->next; 5606 } 5607 5608 rec = &pg->records[pg->index++]; 5609 rec->ip = addr; 5610 } 5611 5612 /* We should have used all pages */ 5613 WARN_ON(pg->next); 5614 5615 /* Assign the last page to ftrace_pages */ 5616 ftrace_pages = pg; 5617 5618 /* 5619 * We only need to disable interrupts on start up 5620 * because we are modifying code that an interrupt 5621 * may execute, and the modification is not atomic. 5622 * But for modules, nothing runs the code we modify 5623 * until we are finished with it, and there's no 5624 * reason to cause large interrupt latencies while we do it. 5625 */ 5626 if (!mod) 5627 local_irq_save(flags); 5628 ftrace_update_code(mod, start_pg); 5629 if (!mod) 5630 local_irq_restore(flags); 5631 ret = 0; 5632 out: 5633 mutex_unlock(&ftrace_lock); 5634 5635 return ret; 5636 } 5637 5638 struct ftrace_mod_func { 5639 struct list_head list; 5640 char *name; 5641 unsigned long ip; 5642 unsigned int size; 5643 }; 5644 5645 struct ftrace_mod_map { 5646 struct rcu_head rcu; 5647 struct list_head list; 5648 struct module *mod; 5649 unsigned long start_addr; 5650 unsigned long end_addr; 5651 struct list_head funcs; 5652 unsigned int num_funcs; 5653 }; 5654 5655 #ifdef CONFIG_MODULES 5656 5657 #define next_to_ftrace_page(p) container_of(p, struct ftrace_page, next) 5658 5659 static LIST_HEAD(ftrace_mod_maps); 5660 5661 static int referenced_filters(struct dyn_ftrace *rec) 5662 { 5663 struct ftrace_ops *ops; 5664 int cnt = 0; 5665 5666 for (ops = ftrace_ops_list; ops != &ftrace_list_end; ops = ops->next) { 5667 if (ops_references_rec(ops, rec)) 5668 cnt++; 5669 } 5670 5671 return cnt; 5672 } 5673 5674 static void 5675 clear_mod_from_hash(struct ftrace_page *pg, struct ftrace_hash *hash) 5676 { 5677 struct ftrace_func_entry *entry; 5678 struct dyn_ftrace *rec; 5679 int i; 5680 5681 if (ftrace_hash_empty(hash)) 5682 return; 5683 5684 for (i = 0; i < pg->index; i++) { 5685 rec = &pg->records[i]; 5686 entry = __ftrace_lookup_ip(hash, rec->ip); 5687 /* 5688 * Do not allow this rec to match again. 5689 * Yeah, it may waste some memory, but will be removed 5690 * if/when the hash is modified again. 5691 */ 5692 if (entry) 5693 entry->ip = 0; 5694 } 5695 } 5696 5697 /* Clear any records from hashs */ 5698 static void clear_mod_from_hashes(struct ftrace_page *pg) 5699 { 5700 struct trace_array *tr; 5701 5702 mutex_lock(&trace_types_lock); 5703 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 5704 if (!tr->ops || !tr->ops->func_hash) 5705 continue; 5706 mutex_lock(&tr->ops->func_hash->regex_lock); 5707 clear_mod_from_hash(pg, tr->ops->func_hash->filter_hash); 5708 clear_mod_from_hash(pg, tr->ops->func_hash->notrace_hash); 5709 mutex_unlock(&tr->ops->func_hash->regex_lock); 5710 } 5711 mutex_unlock(&trace_types_lock); 5712 } 5713 5714 static void ftrace_free_mod_map(struct rcu_head *rcu) 5715 { 5716 struct ftrace_mod_map *mod_map = container_of(rcu, struct ftrace_mod_map, rcu); 5717 struct ftrace_mod_func *mod_func; 5718 struct ftrace_mod_func *n; 5719 5720 /* All the contents of mod_map are now not visible to readers */ 5721 list_for_each_entry_safe(mod_func, n, &mod_map->funcs, list) { 5722 kfree(mod_func->name); 5723 list_del(&mod_func->list); 5724 kfree(mod_func); 5725 } 5726 5727 kfree(mod_map); 5728 } 5729 5730 void ftrace_release_mod(struct module *mod) 5731 { 5732 struct ftrace_mod_map *mod_map; 5733 struct ftrace_mod_map *n; 5734 struct dyn_ftrace *rec; 5735 struct ftrace_page **last_pg; 5736 struct ftrace_page *tmp_page = NULL; 5737 struct ftrace_page *pg; 5738 int order; 5739 5740 mutex_lock(&ftrace_lock); 5741 5742 if (ftrace_disabled) 5743 goto out_unlock; 5744 5745 list_for_each_entry_safe(mod_map, n, &ftrace_mod_maps, list) { 5746 if (mod_map->mod == mod) { 5747 list_del_rcu(&mod_map->list); 5748 call_rcu_sched(&mod_map->rcu, ftrace_free_mod_map); 5749 break; 5750 } 5751 } 5752 5753 /* 5754 * Each module has its own ftrace_pages, remove 5755 * them from the list. 5756 */ 5757 last_pg = &ftrace_pages_start; 5758 for (pg = ftrace_pages_start; pg; pg = *last_pg) { 5759 rec = &pg->records[0]; 5760 if (within_module_core(rec->ip, mod) || 5761 within_module_init(rec->ip, mod)) { 5762 /* 5763 * As core pages are first, the first 5764 * page should never be a module page. 5765 */ 5766 if (WARN_ON(pg == ftrace_pages_start)) 5767 goto out_unlock; 5768 5769 /* Check if we are deleting the last page */ 5770 if (pg == ftrace_pages) 5771 ftrace_pages = next_to_ftrace_page(last_pg); 5772 5773 ftrace_update_tot_cnt -= pg->index; 5774 *last_pg = pg->next; 5775 5776 pg->next = tmp_page; 5777 tmp_page = pg; 5778 } else 5779 last_pg = &pg->next; 5780 } 5781 out_unlock: 5782 mutex_unlock(&ftrace_lock); 5783 5784 for (pg = tmp_page; pg; pg = tmp_page) { 5785 5786 /* Needs to be called outside of ftrace_lock */ 5787 clear_mod_from_hashes(pg); 5788 5789 order = get_count_order(pg->size / ENTRIES_PER_PAGE); 5790 free_pages((unsigned long)pg->records, order); 5791 tmp_page = pg->next; 5792 kfree(pg); 5793 } 5794 } 5795 5796 void ftrace_module_enable(struct module *mod) 5797 { 5798 struct dyn_ftrace *rec; 5799 struct ftrace_page *pg; 5800 5801 mutex_lock(&ftrace_lock); 5802 5803 if (ftrace_disabled) 5804 goto out_unlock; 5805 5806 /* 5807 * If the tracing is enabled, go ahead and enable the record. 5808 * 5809 * The reason not to enable the record immediatelly is the 5810 * inherent check of ftrace_make_nop/ftrace_make_call for 5811 * correct previous instructions. Making first the NOP 5812 * conversion puts the module to the correct state, thus 5813 * passing the ftrace_make_call check. 5814 * 5815 * We also delay this to after the module code already set the 5816 * text to read-only, as we now need to set it back to read-write 5817 * so that we can modify the text. 5818 */ 5819 if (ftrace_start_up) 5820 ftrace_arch_code_modify_prepare(); 5821 5822 do_for_each_ftrace_rec(pg, rec) { 5823 int cnt; 5824 /* 5825 * do_for_each_ftrace_rec() is a double loop. 5826 * module text shares the pg. If a record is 5827 * not part of this module, then skip this pg, 5828 * which the "break" will do. 5829 */ 5830 if (!within_module_core(rec->ip, mod) && 5831 !within_module_init(rec->ip, mod)) 5832 break; 5833 5834 cnt = 0; 5835 5836 /* 5837 * When adding a module, we need to check if tracers are 5838 * currently enabled and if they are, and can trace this record, 5839 * we need to enable the module functions as well as update the 5840 * reference counts for those function records. 5841 */ 5842 if (ftrace_start_up) 5843 cnt += referenced_filters(rec); 5844 5845 /* This clears FTRACE_FL_DISABLED */ 5846 rec->flags = cnt; 5847 5848 if (ftrace_start_up && cnt) { 5849 int failed = __ftrace_replace_code(rec, 1); 5850 if (failed) { 5851 ftrace_bug(failed, rec); 5852 goto out_loop; 5853 } 5854 } 5855 5856 } while_for_each_ftrace_rec(); 5857 5858 out_loop: 5859 if (ftrace_start_up) 5860 ftrace_arch_code_modify_post_process(); 5861 5862 out_unlock: 5863 mutex_unlock(&ftrace_lock); 5864 5865 process_cached_mods(mod->name); 5866 } 5867 5868 void ftrace_module_init(struct module *mod) 5869 { 5870 if (ftrace_disabled || !mod->num_ftrace_callsites) 5871 return; 5872 5873 ftrace_process_locs(mod, mod->ftrace_callsites, 5874 mod->ftrace_callsites + mod->num_ftrace_callsites); 5875 } 5876 5877 static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map, 5878 struct dyn_ftrace *rec) 5879 { 5880 struct ftrace_mod_func *mod_func; 5881 unsigned long symsize; 5882 unsigned long offset; 5883 char str[KSYM_SYMBOL_LEN]; 5884 char *modname; 5885 const char *ret; 5886 5887 ret = kallsyms_lookup(rec->ip, &symsize, &offset, &modname, str); 5888 if (!ret) 5889 return; 5890 5891 mod_func = kmalloc(sizeof(*mod_func), GFP_KERNEL); 5892 if (!mod_func) 5893 return; 5894 5895 mod_func->name = kstrdup(str, GFP_KERNEL); 5896 if (!mod_func->name) { 5897 kfree(mod_func); 5898 return; 5899 } 5900 5901 mod_func->ip = rec->ip - offset; 5902 mod_func->size = symsize; 5903 5904 mod_map->num_funcs++; 5905 5906 list_add_rcu(&mod_func->list, &mod_map->funcs); 5907 } 5908 5909 static struct ftrace_mod_map * 5910 allocate_ftrace_mod_map(struct module *mod, 5911 unsigned long start, unsigned long end) 5912 { 5913 struct ftrace_mod_map *mod_map; 5914 5915 mod_map = kmalloc(sizeof(*mod_map), GFP_KERNEL); 5916 if (!mod_map) 5917 return NULL; 5918 5919 mod_map->mod = mod; 5920 mod_map->start_addr = start; 5921 mod_map->end_addr = end; 5922 mod_map->num_funcs = 0; 5923 5924 INIT_LIST_HEAD_RCU(&mod_map->funcs); 5925 5926 list_add_rcu(&mod_map->list, &ftrace_mod_maps); 5927 5928 return mod_map; 5929 } 5930 5931 static const char * 5932 ftrace_func_address_lookup(struct ftrace_mod_map *mod_map, 5933 unsigned long addr, unsigned long *size, 5934 unsigned long *off, char *sym) 5935 { 5936 struct ftrace_mod_func *found_func = NULL; 5937 struct ftrace_mod_func *mod_func; 5938 5939 list_for_each_entry_rcu(mod_func, &mod_map->funcs, list) { 5940 if (addr >= mod_func->ip && 5941 addr < mod_func->ip + mod_func->size) { 5942 found_func = mod_func; 5943 break; 5944 } 5945 } 5946 5947 if (found_func) { 5948 if (size) 5949 *size = found_func->size; 5950 if (off) 5951 *off = addr - found_func->ip; 5952 if (sym) 5953 strlcpy(sym, found_func->name, KSYM_NAME_LEN); 5954 5955 return found_func->name; 5956 } 5957 5958 return NULL; 5959 } 5960 5961 const char * 5962 ftrace_mod_address_lookup(unsigned long addr, unsigned long *size, 5963 unsigned long *off, char **modname, char *sym) 5964 { 5965 struct ftrace_mod_map *mod_map; 5966 const char *ret = NULL; 5967 5968 /* mod_map is freed via call_rcu_sched() */ 5969 preempt_disable(); 5970 list_for_each_entry_rcu(mod_map, &ftrace_mod_maps, list) { 5971 ret = ftrace_func_address_lookup(mod_map, addr, size, off, sym); 5972 if (ret) { 5973 if (modname) 5974 *modname = mod_map->mod->name; 5975 break; 5976 } 5977 } 5978 preempt_enable(); 5979 5980 return ret; 5981 } 5982 5983 int ftrace_mod_get_kallsym(unsigned int symnum, unsigned long *value, 5984 char *type, char *name, 5985 char *module_name, int *exported) 5986 { 5987 struct ftrace_mod_map *mod_map; 5988 struct ftrace_mod_func *mod_func; 5989 5990 preempt_disable(); 5991 list_for_each_entry_rcu(mod_map, &ftrace_mod_maps, list) { 5992 5993 if (symnum >= mod_map->num_funcs) { 5994 symnum -= mod_map->num_funcs; 5995 continue; 5996 } 5997 5998 list_for_each_entry_rcu(mod_func, &mod_map->funcs, list) { 5999 if (symnum > 1) { 6000 symnum--; 6001 continue; 6002 } 6003 6004 *value = mod_func->ip; 6005 *type = 'T'; 6006 strlcpy(name, mod_func->name, KSYM_NAME_LEN); 6007 strlcpy(module_name, mod_map->mod->name, MODULE_NAME_LEN); 6008 *exported = 1; 6009 preempt_enable(); 6010 return 0; 6011 } 6012 WARN_ON(1); 6013 break; 6014 } 6015 preempt_enable(); 6016 return -ERANGE; 6017 } 6018 6019 #else 6020 static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map, 6021 struct dyn_ftrace *rec) { } 6022 static inline struct ftrace_mod_map * 6023 allocate_ftrace_mod_map(struct module *mod, 6024 unsigned long start, unsigned long end) 6025 { 6026 return NULL; 6027 } 6028 #endif /* CONFIG_MODULES */ 6029 6030 struct ftrace_init_func { 6031 struct list_head list; 6032 unsigned long ip; 6033 }; 6034 6035 /* Clear any init ips from hashes */ 6036 static void 6037 clear_func_from_hash(struct ftrace_init_func *func, struct ftrace_hash *hash) 6038 { 6039 struct ftrace_func_entry *entry; 6040 6041 if (ftrace_hash_empty(hash)) 6042 return; 6043 6044 entry = __ftrace_lookup_ip(hash, func->ip); 6045 6046 /* 6047 * Do not allow this rec to match again. 6048 * Yeah, it may waste some memory, but will be removed 6049 * if/when the hash is modified again. 6050 */ 6051 if (entry) 6052 entry->ip = 0; 6053 } 6054 6055 static void 6056 clear_func_from_hashes(struct ftrace_init_func *func) 6057 { 6058 struct trace_array *tr; 6059 6060 mutex_lock(&trace_types_lock); 6061 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 6062 if (!tr->ops || !tr->ops->func_hash) 6063 continue; 6064 mutex_lock(&tr->ops->func_hash->regex_lock); 6065 clear_func_from_hash(func, tr->ops->func_hash->filter_hash); 6066 clear_func_from_hash(func, tr->ops->func_hash->notrace_hash); 6067 mutex_unlock(&tr->ops->func_hash->regex_lock); 6068 } 6069 mutex_unlock(&trace_types_lock); 6070 } 6071 6072 static void add_to_clear_hash_list(struct list_head *clear_list, 6073 struct dyn_ftrace *rec) 6074 { 6075 struct ftrace_init_func *func; 6076 6077 func = kmalloc(sizeof(*func), GFP_KERNEL); 6078 if (!func) { 6079 WARN_ONCE(1, "alloc failure, ftrace filter could be stale\n"); 6080 return; 6081 } 6082 6083 func->ip = rec->ip; 6084 list_add(&func->list, clear_list); 6085 } 6086 6087 void ftrace_free_mem(struct module *mod, void *start_ptr, void *end_ptr) 6088 { 6089 unsigned long start = (unsigned long)(start_ptr); 6090 unsigned long end = (unsigned long)(end_ptr); 6091 struct ftrace_page **last_pg = &ftrace_pages_start; 6092 struct ftrace_page *pg; 6093 struct dyn_ftrace *rec; 6094 struct dyn_ftrace key; 6095 struct ftrace_mod_map *mod_map = NULL; 6096 struct ftrace_init_func *func, *func_next; 6097 struct list_head clear_hash; 6098 int order; 6099 6100 INIT_LIST_HEAD(&clear_hash); 6101 6102 key.ip = start; 6103 key.flags = end; /* overload flags, as it is unsigned long */ 6104 6105 mutex_lock(&ftrace_lock); 6106 6107 /* 6108 * If we are freeing module init memory, then check if 6109 * any tracer is active. If so, we need to save a mapping of 6110 * the module functions being freed with the address. 6111 */ 6112 if (mod && ftrace_ops_list != &ftrace_list_end) 6113 mod_map = allocate_ftrace_mod_map(mod, start, end); 6114 6115 for (pg = ftrace_pages_start; pg; last_pg = &pg->next, pg = *last_pg) { 6116 if (end < pg->records[0].ip || 6117 start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE)) 6118 continue; 6119 again: 6120 rec = bsearch(&key, pg->records, pg->index, 6121 sizeof(struct dyn_ftrace), 6122 ftrace_cmp_recs); 6123 if (!rec) 6124 continue; 6125 6126 /* rec will be cleared from hashes after ftrace_lock unlock */ 6127 add_to_clear_hash_list(&clear_hash, rec); 6128 6129 if (mod_map) 6130 save_ftrace_mod_rec(mod_map, rec); 6131 6132 pg->index--; 6133 ftrace_update_tot_cnt--; 6134 if (!pg->index) { 6135 *last_pg = pg->next; 6136 order = get_count_order(pg->size / ENTRIES_PER_PAGE); 6137 free_pages((unsigned long)pg->records, order); 6138 kfree(pg); 6139 pg = container_of(last_pg, struct ftrace_page, next); 6140 if (!(*last_pg)) 6141 ftrace_pages = pg; 6142 continue; 6143 } 6144 memmove(rec, rec + 1, 6145 (pg->index - (rec - pg->records)) * sizeof(*rec)); 6146 /* More than one function may be in this block */ 6147 goto again; 6148 } 6149 mutex_unlock(&ftrace_lock); 6150 6151 list_for_each_entry_safe(func, func_next, &clear_hash, list) { 6152 clear_func_from_hashes(func); 6153 kfree(func); 6154 } 6155 } 6156 6157 void __init ftrace_free_init_mem(void) 6158 { 6159 void *start = (void *)(&__init_begin); 6160 void *end = (void *)(&__init_end); 6161 6162 ftrace_free_mem(NULL, start, end); 6163 } 6164 6165 void __init ftrace_init(void) 6166 { 6167 extern unsigned long __start_mcount_loc[]; 6168 extern unsigned long __stop_mcount_loc[]; 6169 unsigned long count, flags; 6170 int ret; 6171 6172 local_irq_save(flags); 6173 ret = ftrace_dyn_arch_init(); 6174 local_irq_restore(flags); 6175 if (ret) 6176 goto failed; 6177 6178 count = __stop_mcount_loc - __start_mcount_loc; 6179 if (!count) { 6180 pr_info("ftrace: No functions to be traced?\n"); 6181 goto failed; 6182 } 6183 6184 pr_info("ftrace: allocating %ld entries in %ld pages\n", 6185 count, count / ENTRIES_PER_PAGE + 1); 6186 6187 last_ftrace_enabled = ftrace_enabled = 1; 6188 6189 ret = ftrace_process_locs(NULL, 6190 __start_mcount_loc, 6191 __stop_mcount_loc); 6192 6193 set_ftrace_early_filters(); 6194 6195 return; 6196 failed: 6197 ftrace_disabled = 1; 6198 } 6199 6200 /* Do nothing if arch does not support this */ 6201 void __weak arch_ftrace_update_trampoline(struct ftrace_ops *ops) 6202 { 6203 } 6204 6205 static void ftrace_update_trampoline(struct ftrace_ops *ops) 6206 { 6207 arch_ftrace_update_trampoline(ops); 6208 } 6209 6210 void ftrace_init_trace_array(struct trace_array *tr) 6211 { 6212 INIT_LIST_HEAD(&tr->func_probes); 6213 INIT_LIST_HEAD(&tr->mod_trace); 6214 INIT_LIST_HEAD(&tr->mod_notrace); 6215 } 6216 #else 6217 6218 static struct ftrace_ops global_ops = { 6219 .func = ftrace_stub, 6220 .flags = FTRACE_OPS_FL_RECURSION_SAFE | 6221 FTRACE_OPS_FL_INITIALIZED | 6222 FTRACE_OPS_FL_PID, 6223 }; 6224 6225 static int __init ftrace_nodyn_init(void) 6226 { 6227 ftrace_enabled = 1; 6228 return 0; 6229 } 6230 core_initcall(ftrace_nodyn_init); 6231 6232 static inline int ftrace_init_dyn_tracefs(struct dentry *d_tracer) { return 0; } 6233 static inline void ftrace_startup_enable(int command) { } 6234 static inline void ftrace_startup_all(int command) { } 6235 /* Keep as macros so we do not need to define the commands */ 6236 # define ftrace_startup(ops, command) \ 6237 ({ \ 6238 int ___ret = __register_ftrace_function(ops); \ 6239 if (!___ret) \ 6240 (ops)->flags |= FTRACE_OPS_FL_ENABLED; \ 6241 ___ret; \ 6242 }) 6243 # define ftrace_shutdown(ops, command) \ 6244 ({ \ 6245 int ___ret = __unregister_ftrace_function(ops); \ 6246 if (!___ret) \ 6247 (ops)->flags &= ~FTRACE_OPS_FL_ENABLED; \ 6248 ___ret; \ 6249 }) 6250 6251 # define ftrace_startup_sysctl() do { } while (0) 6252 # define ftrace_shutdown_sysctl() do { } while (0) 6253 6254 static inline int 6255 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs) 6256 { 6257 return 1; 6258 } 6259 6260 static void ftrace_update_trampoline(struct ftrace_ops *ops) 6261 { 6262 } 6263 6264 #endif /* CONFIG_DYNAMIC_FTRACE */ 6265 6266 __init void ftrace_init_global_array_ops(struct trace_array *tr) 6267 { 6268 tr->ops = &global_ops; 6269 tr->ops->private = tr; 6270 ftrace_init_trace_array(tr); 6271 } 6272 6273 void ftrace_init_array_ops(struct trace_array *tr, ftrace_func_t func) 6274 { 6275 /* If we filter on pids, update to use the pid function */ 6276 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) { 6277 if (WARN_ON(tr->ops->func != ftrace_stub)) 6278 printk("ftrace ops had %pS for function\n", 6279 tr->ops->func); 6280 } 6281 tr->ops->func = func; 6282 tr->ops->private = tr; 6283 } 6284 6285 void ftrace_reset_array_ops(struct trace_array *tr) 6286 { 6287 tr->ops->func = ftrace_stub; 6288 } 6289 6290 static inline void 6291 __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, 6292 struct ftrace_ops *ignored, struct pt_regs *regs) 6293 { 6294 struct ftrace_ops *op; 6295 int bit; 6296 6297 bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX); 6298 if (bit < 0) 6299 return; 6300 6301 /* 6302 * Some of the ops may be dynamically allocated, 6303 * they must be freed after a synchronize_sched(). 6304 */ 6305 preempt_disable_notrace(); 6306 6307 do_for_each_ftrace_op(op, ftrace_ops_list) { 6308 /* 6309 * Check the following for each ops before calling their func: 6310 * if RCU flag is set, then rcu_is_watching() must be true 6311 * if PER_CPU is set, then ftrace_function_local_disable() 6312 * must be false 6313 * Otherwise test if the ip matches the ops filter 6314 * 6315 * If any of the above fails then the op->func() is not executed. 6316 */ 6317 if ((!(op->flags & FTRACE_OPS_FL_RCU) || rcu_is_watching()) && 6318 ftrace_ops_test(op, ip, regs)) { 6319 if (FTRACE_WARN_ON(!op->func)) { 6320 pr_warn("op=%p %pS\n", op, op); 6321 goto out; 6322 } 6323 op->func(ip, parent_ip, op, regs); 6324 } 6325 } while_for_each_ftrace_op(op); 6326 out: 6327 preempt_enable_notrace(); 6328 trace_clear_recursion(bit); 6329 } 6330 6331 /* 6332 * Some archs only support passing ip and parent_ip. Even though 6333 * the list function ignores the op parameter, we do not want any 6334 * C side effects, where a function is called without the caller 6335 * sending a third parameter. 6336 * Archs are to support both the regs and ftrace_ops at the same time. 6337 * If they support ftrace_ops, it is assumed they support regs. 6338 * If call backs want to use regs, they must either check for regs 6339 * being NULL, or CONFIG_DYNAMIC_FTRACE_WITH_REGS. 6340 * Note, CONFIG_DYNAMIC_FTRACE_WITH_REGS expects a full regs to be saved. 6341 * An architecture can pass partial regs with ftrace_ops and still 6342 * set the ARCH_SUPPORTS_FTRACE_OPS. 6343 */ 6344 #if ARCH_SUPPORTS_FTRACE_OPS 6345 static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, 6346 struct ftrace_ops *op, struct pt_regs *regs) 6347 { 6348 __ftrace_ops_list_func(ip, parent_ip, NULL, regs); 6349 } 6350 #else 6351 static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip) 6352 { 6353 __ftrace_ops_list_func(ip, parent_ip, NULL, NULL); 6354 } 6355 #endif 6356 6357 /* 6358 * If there's only one function registered but it does not support 6359 * recursion, needs RCU protection and/or requires per cpu handling, then 6360 * this function will be called by the mcount trampoline. 6361 */ 6362 static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip, 6363 struct ftrace_ops *op, struct pt_regs *regs) 6364 { 6365 int bit; 6366 6367 if ((op->flags & FTRACE_OPS_FL_RCU) && !rcu_is_watching()) 6368 return; 6369 6370 bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX); 6371 if (bit < 0) 6372 return; 6373 6374 preempt_disable_notrace(); 6375 6376 op->func(ip, parent_ip, op, regs); 6377 6378 preempt_enable_notrace(); 6379 trace_clear_recursion(bit); 6380 } 6381 6382 /** 6383 * ftrace_ops_get_func - get the function a trampoline should call 6384 * @ops: the ops to get the function for 6385 * 6386 * Normally the mcount trampoline will call the ops->func, but there 6387 * are times that it should not. For example, if the ops does not 6388 * have its own recursion protection, then it should call the 6389 * ftrace_ops_assist_func() instead. 6390 * 6391 * Returns the function that the trampoline should call for @ops. 6392 */ 6393 ftrace_func_t ftrace_ops_get_func(struct ftrace_ops *ops) 6394 { 6395 /* 6396 * If the function does not handle recursion, needs to be RCU safe, 6397 * or does per cpu logic, then we need to call the assist handler. 6398 */ 6399 if (!(ops->flags & FTRACE_OPS_FL_RECURSION_SAFE) || 6400 ops->flags & FTRACE_OPS_FL_RCU) 6401 return ftrace_ops_assist_func; 6402 6403 return ops->func; 6404 } 6405 6406 static void 6407 ftrace_filter_pid_sched_switch_probe(void *data, bool preempt, 6408 struct task_struct *prev, struct task_struct *next) 6409 { 6410 struct trace_array *tr = data; 6411 struct trace_pid_list *pid_list; 6412 6413 pid_list = rcu_dereference_sched(tr->function_pids); 6414 6415 this_cpu_write(tr->trace_buffer.data->ftrace_ignore_pid, 6416 trace_ignore_this_task(pid_list, next)); 6417 } 6418 6419 static void 6420 ftrace_pid_follow_sched_process_fork(void *data, 6421 struct task_struct *self, 6422 struct task_struct *task) 6423 { 6424 struct trace_pid_list *pid_list; 6425 struct trace_array *tr = data; 6426 6427 pid_list = rcu_dereference_sched(tr->function_pids); 6428 trace_filter_add_remove_task(pid_list, self, task); 6429 } 6430 6431 static void 6432 ftrace_pid_follow_sched_process_exit(void *data, struct task_struct *task) 6433 { 6434 struct trace_pid_list *pid_list; 6435 struct trace_array *tr = data; 6436 6437 pid_list = rcu_dereference_sched(tr->function_pids); 6438 trace_filter_add_remove_task(pid_list, NULL, task); 6439 } 6440 6441 void ftrace_pid_follow_fork(struct trace_array *tr, bool enable) 6442 { 6443 if (enable) { 6444 register_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork, 6445 tr); 6446 register_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit, 6447 tr); 6448 } else { 6449 unregister_trace_sched_process_fork(ftrace_pid_follow_sched_process_fork, 6450 tr); 6451 unregister_trace_sched_process_exit(ftrace_pid_follow_sched_process_exit, 6452 tr); 6453 } 6454 } 6455 6456 static void clear_ftrace_pids(struct trace_array *tr) 6457 { 6458 struct trace_pid_list *pid_list; 6459 int cpu; 6460 6461 pid_list = rcu_dereference_protected(tr->function_pids, 6462 lockdep_is_held(&ftrace_lock)); 6463 if (!pid_list) 6464 return; 6465 6466 unregister_trace_sched_switch(ftrace_filter_pid_sched_switch_probe, tr); 6467 6468 for_each_possible_cpu(cpu) 6469 per_cpu_ptr(tr->trace_buffer.data, cpu)->ftrace_ignore_pid = false; 6470 6471 rcu_assign_pointer(tr->function_pids, NULL); 6472 6473 /* Wait till all users are no longer using pid filtering */ 6474 synchronize_sched(); 6475 6476 trace_free_pid_list(pid_list); 6477 } 6478 6479 void ftrace_clear_pids(struct trace_array *tr) 6480 { 6481 mutex_lock(&ftrace_lock); 6482 6483 clear_ftrace_pids(tr); 6484 6485 mutex_unlock(&ftrace_lock); 6486 } 6487 6488 static void ftrace_pid_reset(struct trace_array *tr) 6489 { 6490 mutex_lock(&ftrace_lock); 6491 clear_ftrace_pids(tr); 6492 6493 ftrace_update_pid_func(); 6494 ftrace_startup_all(0); 6495 6496 mutex_unlock(&ftrace_lock); 6497 } 6498 6499 /* Greater than any max PID */ 6500 #define FTRACE_NO_PIDS (void *)(PID_MAX_LIMIT + 1) 6501 6502 static void *fpid_start(struct seq_file *m, loff_t *pos) 6503 __acquires(RCU) 6504 { 6505 struct trace_pid_list *pid_list; 6506 struct trace_array *tr = m->private; 6507 6508 mutex_lock(&ftrace_lock); 6509 rcu_read_lock_sched(); 6510 6511 pid_list = rcu_dereference_sched(tr->function_pids); 6512 6513 if (!pid_list) 6514 return !(*pos) ? FTRACE_NO_PIDS : NULL; 6515 6516 return trace_pid_start(pid_list, pos); 6517 } 6518 6519 static void *fpid_next(struct seq_file *m, void *v, loff_t *pos) 6520 { 6521 struct trace_array *tr = m->private; 6522 struct trace_pid_list *pid_list = rcu_dereference_sched(tr->function_pids); 6523 6524 if (v == FTRACE_NO_PIDS) 6525 return NULL; 6526 6527 return trace_pid_next(pid_list, v, pos); 6528 } 6529 6530 static void fpid_stop(struct seq_file *m, void *p) 6531 __releases(RCU) 6532 { 6533 rcu_read_unlock_sched(); 6534 mutex_unlock(&ftrace_lock); 6535 } 6536 6537 static int fpid_show(struct seq_file *m, void *v) 6538 { 6539 if (v == FTRACE_NO_PIDS) { 6540 seq_puts(m, "no pid\n"); 6541 return 0; 6542 } 6543 6544 return trace_pid_show(m, v); 6545 } 6546 6547 static const struct seq_operations ftrace_pid_sops = { 6548 .start = fpid_start, 6549 .next = fpid_next, 6550 .stop = fpid_stop, 6551 .show = fpid_show, 6552 }; 6553 6554 static int 6555 ftrace_pid_open(struct inode *inode, struct file *file) 6556 { 6557 struct trace_array *tr = inode->i_private; 6558 struct seq_file *m; 6559 int ret = 0; 6560 6561 if (trace_array_get(tr) < 0) 6562 return -ENODEV; 6563 6564 if ((file->f_mode & FMODE_WRITE) && 6565 (file->f_flags & O_TRUNC)) 6566 ftrace_pid_reset(tr); 6567 6568 ret = seq_open(file, &ftrace_pid_sops); 6569 if (ret < 0) { 6570 trace_array_put(tr); 6571 } else { 6572 m = file->private_data; 6573 /* copy tr over to seq ops */ 6574 m->private = tr; 6575 } 6576 6577 return ret; 6578 } 6579 6580 static void ignore_task_cpu(void *data) 6581 { 6582 struct trace_array *tr = data; 6583 struct trace_pid_list *pid_list; 6584 6585 /* 6586 * This function is called by on_each_cpu() while the 6587 * event_mutex is held. 6588 */ 6589 pid_list = rcu_dereference_protected(tr->function_pids, 6590 mutex_is_locked(&ftrace_lock)); 6591 6592 this_cpu_write(tr->trace_buffer.data->ftrace_ignore_pid, 6593 trace_ignore_this_task(pid_list, current)); 6594 } 6595 6596 static ssize_t 6597 ftrace_pid_write(struct file *filp, const char __user *ubuf, 6598 size_t cnt, loff_t *ppos) 6599 { 6600 struct seq_file *m = filp->private_data; 6601 struct trace_array *tr = m->private; 6602 struct trace_pid_list *filtered_pids = NULL; 6603 struct trace_pid_list *pid_list; 6604 ssize_t ret; 6605 6606 if (!cnt) 6607 return 0; 6608 6609 mutex_lock(&ftrace_lock); 6610 6611 filtered_pids = rcu_dereference_protected(tr->function_pids, 6612 lockdep_is_held(&ftrace_lock)); 6613 6614 ret = trace_pid_write(filtered_pids, &pid_list, ubuf, cnt); 6615 if (ret < 0) 6616 goto out; 6617 6618 rcu_assign_pointer(tr->function_pids, pid_list); 6619 6620 if (filtered_pids) { 6621 synchronize_sched(); 6622 trace_free_pid_list(filtered_pids); 6623 } else if (pid_list) { 6624 /* Register a probe to set whether to ignore the tracing of a task */ 6625 register_trace_sched_switch(ftrace_filter_pid_sched_switch_probe, tr); 6626 } 6627 6628 /* 6629 * Ignoring of pids is done at task switch. But we have to 6630 * check for those tasks that are currently running. 6631 * Always do this in case a pid was appended or removed. 6632 */ 6633 on_each_cpu(ignore_task_cpu, tr, 1); 6634 6635 ftrace_update_pid_func(); 6636 ftrace_startup_all(0); 6637 out: 6638 mutex_unlock(&ftrace_lock); 6639 6640 if (ret > 0) 6641 *ppos += ret; 6642 6643 return ret; 6644 } 6645 6646 static int 6647 ftrace_pid_release(struct inode *inode, struct file *file) 6648 { 6649 struct trace_array *tr = inode->i_private; 6650 6651 trace_array_put(tr); 6652 6653 return seq_release(inode, file); 6654 } 6655 6656 static const struct file_operations ftrace_pid_fops = { 6657 .open = ftrace_pid_open, 6658 .write = ftrace_pid_write, 6659 .read = seq_read, 6660 .llseek = tracing_lseek, 6661 .release = ftrace_pid_release, 6662 }; 6663 6664 void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d_tracer) 6665 { 6666 trace_create_file("set_ftrace_pid", 0644, d_tracer, 6667 tr, &ftrace_pid_fops); 6668 } 6669 6670 void __init ftrace_init_tracefs_toplevel(struct trace_array *tr, 6671 struct dentry *d_tracer) 6672 { 6673 /* Only the top level directory has the dyn_tracefs and profile */ 6674 WARN_ON(!(tr->flags & TRACE_ARRAY_FL_GLOBAL)); 6675 6676 ftrace_init_dyn_tracefs(d_tracer); 6677 ftrace_profile_tracefs(d_tracer); 6678 } 6679 6680 /** 6681 * ftrace_kill - kill ftrace 6682 * 6683 * This function should be used by panic code. It stops ftrace 6684 * but in a not so nice way. If you need to simply kill ftrace 6685 * from a non-atomic section, use ftrace_kill. 6686 */ 6687 void ftrace_kill(void) 6688 { 6689 ftrace_disabled = 1; 6690 ftrace_enabled = 0; 6691 clear_ftrace_function(); 6692 } 6693 6694 /** 6695 * Test if ftrace is dead or not. 6696 */ 6697 int ftrace_is_dead(void) 6698 { 6699 return ftrace_disabled; 6700 } 6701 6702 /** 6703 * register_ftrace_function - register a function for profiling 6704 * @ops - ops structure that holds the function for profiling. 6705 * 6706 * Register a function to be called by all functions in the 6707 * kernel. 6708 * 6709 * Note: @ops->func and all the functions it calls must be labeled 6710 * with "notrace", otherwise it will go into a 6711 * recursive loop. 6712 */ 6713 int register_ftrace_function(struct ftrace_ops *ops) 6714 { 6715 int ret = -1; 6716 6717 ftrace_ops_init(ops); 6718 6719 mutex_lock(&ftrace_lock); 6720 6721 ret = ftrace_startup(ops, 0); 6722 6723 mutex_unlock(&ftrace_lock); 6724 6725 return ret; 6726 } 6727 EXPORT_SYMBOL_GPL(register_ftrace_function); 6728 6729 /** 6730 * unregister_ftrace_function - unregister a function for profiling. 6731 * @ops - ops structure that holds the function to unregister 6732 * 6733 * Unregister a function that was added to be called by ftrace profiling. 6734 */ 6735 int unregister_ftrace_function(struct ftrace_ops *ops) 6736 { 6737 int ret; 6738 6739 mutex_lock(&ftrace_lock); 6740 ret = ftrace_shutdown(ops, 0); 6741 mutex_unlock(&ftrace_lock); 6742 6743 return ret; 6744 } 6745 EXPORT_SYMBOL_GPL(unregister_ftrace_function); 6746 6747 int 6748 ftrace_enable_sysctl(struct ctl_table *table, int write, 6749 void __user *buffer, size_t *lenp, 6750 loff_t *ppos) 6751 { 6752 int ret = -ENODEV; 6753 6754 mutex_lock(&ftrace_lock); 6755 6756 if (unlikely(ftrace_disabled)) 6757 goto out; 6758 6759 ret = proc_dointvec(table, write, buffer, lenp, ppos); 6760 6761 if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) 6762 goto out; 6763 6764 last_ftrace_enabled = !!ftrace_enabled; 6765 6766 if (ftrace_enabled) { 6767 6768 /* we are starting ftrace again */ 6769 if (rcu_dereference_protected(ftrace_ops_list, 6770 lockdep_is_held(&ftrace_lock)) != &ftrace_list_end) 6771 update_ftrace_function(); 6772 6773 ftrace_startup_sysctl(); 6774 6775 } else { 6776 /* stopping ftrace calls (just send to ftrace_stub) */ 6777 ftrace_trace_function = ftrace_stub; 6778 6779 ftrace_shutdown_sysctl(); 6780 } 6781 6782 out: 6783 mutex_unlock(&ftrace_lock); 6784 return ret; 6785 } 6786 6787 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 6788 6789 static struct ftrace_ops graph_ops = { 6790 .func = ftrace_stub, 6791 .flags = FTRACE_OPS_FL_RECURSION_SAFE | 6792 FTRACE_OPS_FL_INITIALIZED | 6793 FTRACE_OPS_FL_PID | 6794 FTRACE_OPS_FL_STUB, 6795 #ifdef FTRACE_GRAPH_TRAMP_ADDR 6796 .trampoline = FTRACE_GRAPH_TRAMP_ADDR, 6797 /* trampoline_size is only needed for dynamically allocated tramps */ 6798 #endif 6799 ASSIGN_OPS_HASH(graph_ops, &global_ops.local_hash) 6800 }; 6801 6802 void ftrace_graph_sleep_time_control(bool enable) 6803 { 6804 fgraph_sleep_time = enable; 6805 } 6806 6807 void ftrace_graph_graph_time_control(bool enable) 6808 { 6809 fgraph_graph_time = enable; 6810 } 6811 6812 int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) 6813 { 6814 return 0; 6815 } 6816 6817 /* The callbacks that hook a function */ 6818 trace_func_graph_ret_t ftrace_graph_return = 6819 (trace_func_graph_ret_t)ftrace_stub; 6820 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; 6821 static trace_func_graph_ent_t __ftrace_graph_entry = ftrace_graph_entry_stub; 6822 6823 /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ 6824 static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) 6825 { 6826 int i; 6827 int ret = 0; 6828 int start = 0, end = FTRACE_RETSTACK_ALLOC_SIZE; 6829 struct task_struct *g, *t; 6830 6831 for (i = 0; i < FTRACE_RETSTACK_ALLOC_SIZE; i++) { 6832 ret_stack_list[i] = kmalloc(FTRACE_RETFUNC_DEPTH 6833 * sizeof(struct ftrace_ret_stack), 6834 GFP_KERNEL); 6835 if (!ret_stack_list[i]) { 6836 start = 0; 6837 end = i; 6838 ret = -ENOMEM; 6839 goto free; 6840 } 6841 } 6842 6843 read_lock(&tasklist_lock); 6844 do_each_thread(g, t) { 6845 if (start == end) { 6846 ret = -EAGAIN; 6847 goto unlock; 6848 } 6849 6850 if (t->ret_stack == NULL) { 6851 atomic_set(&t->tracing_graph_pause, 0); 6852 atomic_set(&t->trace_overrun, 0); 6853 t->curr_ret_stack = -1; 6854 /* Make sure the tasks see the -1 first: */ 6855 smp_wmb(); 6856 t->ret_stack = ret_stack_list[start++]; 6857 } 6858 } while_each_thread(g, t); 6859 6860 unlock: 6861 read_unlock(&tasklist_lock); 6862 free: 6863 for (i = start; i < end; i++) 6864 kfree(ret_stack_list[i]); 6865 return ret; 6866 } 6867 6868 static void 6869 ftrace_graph_probe_sched_switch(void *ignore, bool preempt, 6870 struct task_struct *prev, struct task_struct *next) 6871 { 6872 unsigned long long timestamp; 6873 int index; 6874 6875 /* 6876 * Does the user want to count the time a function was asleep. 6877 * If so, do not update the time stamps. 6878 */ 6879 if (fgraph_sleep_time) 6880 return; 6881 6882 timestamp = trace_clock_local(); 6883 6884 prev->ftrace_timestamp = timestamp; 6885 6886 /* only process tasks that we timestamped */ 6887 if (!next->ftrace_timestamp) 6888 return; 6889 6890 /* 6891 * Update all the counters in next to make up for the 6892 * time next was sleeping. 6893 */ 6894 timestamp -= next->ftrace_timestamp; 6895 6896 for (index = next->curr_ret_stack; index >= 0; index--) 6897 next->ret_stack[index].calltime += timestamp; 6898 } 6899 6900 /* Allocate a return stack for each task */ 6901 static int start_graph_tracing(void) 6902 { 6903 struct ftrace_ret_stack **ret_stack_list; 6904 int ret, cpu; 6905 6906 ret_stack_list = kmalloc(FTRACE_RETSTACK_ALLOC_SIZE * 6907 sizeof(struct ftrace_ret_stack *), 6908 GFP_KERNEL); 6909 6910 if (!ret_stack_list) 6911 return -ENOMEM; 6912 6913 /* The cpu_boot init_task->ret_stack will never be freed */ 6914 for_each_online_cpu(cpu) { 6915 if (!idle_task(cpu)->ret_stack) 6916 ftrace_graph_init_idle_task(idle_task(cpu), cpu); 6917 } 6918 6919 do { 6920 ret = alloc_retstack_tasklist(ret_stack_list); 6921 } while (ret == -EAGAIN); 6922 6923 if (!ret) { 6924 ret = register_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 6925 if (ret) 6926 pr_info("ftrace_graph: Couldn't activate tracepoint" 6927 " probe to kernel_sched_switch\n"); 6928 } 6929 6930 kfree(ret_stack_list); 6931 return ret; 6932 } 6933 6934 /* 6935 * Hibernation protection. 6936 * The state of the current task is too much unstable during 6937 * suspend/restore to disk. We want to protect against that. 6938 */ 6939 static int 6940 ftrace_suspend_notifier_call(struct notifier_block *bl, unsigned long state, 6941 void *unused) 6942 { 6943 switch (state) { 6944 case PM_HIBERNATION_PREPARE: 6945 pause_graph_tracing(); 6946 break; 6947 6948 case PM_POST_HIBERNATION: 6949 unpause_graph_tracing(); 6950 break; 6951 } 6952 return NOTIFY_DONE; 6953 } 6954 6955 static int ftrace_graph_entry_test(struct ftrace_graph_ent *trace) 6956 { 6957 if (!ftrace_ops_test(&global_ops, trace->func, NULL)) 6958 return 0; 6959 return __ftrace_graph_entry(trace); 6960 } 6961 6962 /* 6963 * The function graph tracer should only trace the functions defined 6964 * by set_ftrace_filter and set_ftrace_notrace. If another function 6965 * tracer ops is registered, the graph tracer requires testing the 6966 * function against the global ops, and not just trace any function 6967 * that any ftrace_ops registered. 6968 */ 6969 static void update_function_graph_func(void) 6970 { 6971 struct ftrace_ops *op; 6972 bool do_test = false; 6973 6974 /* 6975 * The graph and global ops share the same set of functions 6976 * to test. If any other ops is on the list, then 6977 * the graph tracing needs to test if its the function 6978 * it should call. 6979 */ 6980 do_for_each_ftrace_op(op, ftrace_ops_list) { 6981 if (op != &global_ops && op != &graph_ops && 6982 op != &ftrace_list_end) { 6983 do_test = true; 6984 /* in double loop, break out with goto */ 6985 goto out; 6986 } 6987 } while_for_each_ftrace_op(op); 6988 out: 6989 if (do_test) 6990 ftrace_graph_entry = ftrace_graph_entry_test; 6991 else 6992 ftrace_graph_entry = __ftrace_graph_entry; 6993 } 6994 6995 static struct notifier_block ftrace_suspend_notifier = { 6996 .notifier_call = ftrace_suspend_notifier_call, 6997 }; 6998 6999 int register_ftrace_graph(trace_func_graph_ret_t retfunc, 7000 trace_func_graph_ent_t entryfunc) 7001 { 7002 int ret = 0; 7003 7004 mutex_lock(&ftrace_lock); 7005 7006 /* we currently allow only one tracer registered at a time */ 7007 if (ftrace_graph_active) { 7008 ret = -EBUSY; 7009 goto out; 7010 } 7011 7012 register_pm_notifier(&ftrace_suspend_notifier); 7013 7014 ftrace_graph_active++; 7015 ret = start_graph_tracing(); 7016 if (ret) { 7017 ftrace_graph_active--; 7018 goto out; 7019 } 7020 7021 ftrace_graph_return = retfunc; 7022 7023 /* 7024 * Update the indirect function to the entryfunc, and the 7025 * function that gets called to the entry_test first. Then 7026 * call the update fgraph entry function to determine if 7027 * the entryfunc should be called directly or not. 7028 */ 7029 __ftrace_graph_entry = entryfunc; 7030 ftrace_graph_entry = ftrace_graph_entry_test; 7031 update_function_graph_func(); 7032 7033 ret = ftrace_startup(&graph_ops, FTRACE_START_FUNC_RET); 7034 out: 7035 mutex_unlock(&ftrace_lock); 7036 return ret; 7037 } 7038 7039 void unregister_ftrace_graph(void) 7040 { 7041 mutex_lock(&ftrace_lock); 7042 7043 if (unlikely(!ftrace_graph_active)) 7044 goto out; 7045 7046 ftrace_graph_active--; 7047 ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub; 7048 ftrace_graph_entry = ftrace_graph_entry_stub; 7049 __ftrace_graph_entry = ftrace_graph_entry_stub; 7050 ftrace_shutdown(&graph_ops, FTRACE_STOP_FUNC_RET); 7051 unregister_pm_notifier(&ftrace_suspend_notifier); 7052 unregister_trace_sched_switch(ftrace_graph_probe_sched_switch, NULL); 7053 7054 out: 7055 mutex_unlock(&ftrace_lock); 7056 } 7057 7058 static DEFINE_PER_CPU(struct ftrace_ret_stack *, idle_ret_stack); 7059 7060 static void 7061 graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack) 7062 { 7063 atomic_set(&t->tracing_graph_pause, 0); 7064 atomic_set(&t->trace_overrun, 0); 7065 t->ftrace_timestamp = 0; 7066 /* make curr_ret_stack visible before we add the ret_stack */ 7067 smp_wmb(); 7068 t->ret_stack = ret_stack; 7069 } 7070 7071 /* 7072 * Allocate a return stack for the idle task. May be the first 7073 * time through, or it may be done by CPU hotplug online. 7074 */ 7075 void ftrace_graph_init_idle_task(struct task_struct *t, int cpu) 7076 { 7077 t->curr_ret_stack = -1; 7078 /* 7079 * The idle task has no parent, it either has its own 7080 * stack or no stack at all. 7081 */ 7082 if (t->ret_stack) 7083 WARN_ON(t->ret_stack != per_cpu(idle_ret_stack, cpu)); 7084 7085 if (ftrace_graph_active) { 7086 struct ftrace_ret_stack *ret_stack; 7087 7088 ret_stack = per_cpu(idle_ret_stack, cpu); 7089 if (!ret_stack) { 7090 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 7091 * sizeof(struct ftrace_ret_stack), 7092 GFP_KERNEL); 7093 if (!ret_stack) 7094 return; 7095 per_cpu(idle_ret_stack, cpu) = ret_stack; 7096 } 7097 graph_init_task(t, ret_stack); 7098 } 7099 } 7100 7101 /* Allocate a return stack for newly created task */ 7102 void ftrace_graph_init_task(struct task_struct *t) 7103 { 7104 /* Make sure we do not use the parent ret_stack */ 7105 t->ret_stack = NULL; 7106 t->curr_ret_stack = -1; 7107 7108 if (ftrace_graph_active) { 7109 struct ftrace_ret_stack *ret_stack; 7110 7111 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 7112 * sizeof(struct ftrace_ret_stack), 7113 GFP_KERNEL); 7114 if (!ret_stack) 7115 return; 7116 graph_init_task(t, ret_stack); 7117 } 7118 } 7119 7120 void ftrace_graph_exit_task(struct task_struct *t) 7121 { 7122 struct ftrace_ret_stack *ret_stack = t->ret_stack; 7123 7124 t->ret_stack = NULL; 7125 /* NULL must become visible to IRQs before we free it: */ 7126 barrier(); 7127 7128 kfree(ret_stack); 7129 } 7130 #endif 7131