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