LCOV - code coverage report
Current view: top level - kernel/trace - trace.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 16 76 21.1 %
Date: 2021-04-22 12:43:58 Functions: 1 4 25.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : 
       3             : #ifndef _LINUX_KERNEL_TRACE_H
       4             : #define _LINUX_KERNEL_TRACE_H
       5             : 
       6             : #include <linux/fs.h>
       7             : #include <linux/atomic.h>
       8             : #include <linux/sched.h>
       9             : #include <linux/clocksource.h>
      10             : #include <linux/ring_buffer.h>
      11             : #include <linux/mmiotrace.h>
      12             : #include <linux/tracepoint.h>
      13             : #include <linux/ftrace.h>
      14             : #include <linux/trace.h>
      15             : #include <linux/hw_breakpoint.h>
      16             : #include <linux/trace_seq.h>
      17             : #include <linux/trace_events.h>
      18             : #include <linux/compiler.h>
      19             : #include <linux/glob.h>
      20             : #include <linux/irq_work.h>
      21             : #include <linux/workqueue.h>
      22             : #include <linux/ctype.h>
      23             : 
      24             : #ifdef CONFIG_FTRACE_SYSCALLS
      25             : #include <asm/unistd.h>           /* For NR_SYSCALLS           */
      26             : #include <asm/syscall.h>  /* some archs define it here */
      27             : #endif
      28             : 
      29             : enum trace_type {
      30             :         __TRACE_FIRST_TYPE = 0,
      31             : 
      32             :         TRACE_FN,
      33             :         TRACE_CTX,
      34             :         TRACE_WAKE,
      35             :         TRACE_STACK,
      36             :         TRACE_PRINT,
      37             :         TRACE_BPRINT,
      38             :         TRACE_MMIO_RW,
      39             :         TRACE_MMIO_MAP,
      40             :         TRACE_BRANCH,
      41             :         TRACE_GRAPH_RET,
      42             :         TRACE_GRAPH_ENT,
      43             :         TRACE_USER_STACK,
      44             :         TRACE_BLK,
      45             :         TRACE_BPUTS,
      46             :         TRACE_HWLAT,
      47             :         TRACE_RAW_DATA,
      48             : 
      49             :         __TRACE_LAST_TYPE,
      50             : };
      51             : 
      52             : 
      53             : #undef __field
      54             : #define __field(type, item)             type    item;
      55             : 
      56             : #undef __field_fn
      57             : #define __field_fn(type, item)          type    item;
      58             : 
      59             : #undef __field_struct
      60             : #define __field_struct(type, item)      __field(type, item)
      61             : 
      62             : #undef __field_desc
      63             : #define __field_desc(type, container, item)
      64             : 
      65             : #undef __field_packed
      66             : #define __field_packed(type, container, item)
      67             : 
      68             : #undef __array
      69             : #define __array(type, item, size)       type    item[size];
      70             : 
      71             : #undef __array_desc
      72             : #define __array_desc(type, container, item, size)
      73             : 
      74             : #undef __dynamic_array
      75             : #define __dynamic_array(type, item)     type    item[];
      76             : 
      77             : #undef F_STRUCT
      78             : #define F_STRUCT(args...)               args
      79             : 
      80             : #undef FTRACE_ENTRY
      81             : #define FTRACE_ENTRY(name, struct_name, id, tstruct, print)             \
      82             :         struct struct_name {                                            \
      83             :                 struct trace_entry      ent;                            \
      84             :                 tstruct                                                 \
      85             :         }
      86             : 
      87             : #undef FTRACE_ENTRY_DUP
      88             : #define FTRACE_ENTRY_DUP(name, name_struct, id, tstruct, printk)
      89             : 
      90             : #undef FTRACE_ENTRY_REG
      91             : #define FTRACE_ENTRY_REG(name, struct_name, id, tstruct, print, regfn)  \
      92             :         FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print))
      93             : 
      94             : #undef FTRACE_ENTRY_PACKED
      95             : #define FTRACE_ENTRY_PACKED(name, struct_name, id, tstruct, print)      \
      96             :         FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print)) __packed
      97             : 
      98             : #include "trace_entries.h"
      99             : 
     100             : /* Use this for memory failure errors */
     101             : #define MEM_FAIL(condition, fmt, ...) ({                        \
     102             :         static bool __section(".data.once") __warned;         \
     103             :         int __ret_warn_once = !!(condition);                    \
     104             :                                                                 \
     105             :         if (unlikely(__ret_warn_once && !__warned)) {           \
     106             :                 __warned = true;                                \
     107             :                 pr_err("ERROR: " fmt, ##__VA_ARGS__);         \
     108             :         }                                                       \
     109             :         unlikely(__ret_warn_once);                              \
     110             : })
     111             : 
     112             : /*
     113             :  * syscalls are special, and need special handling, this is why
     114             :  * they are not included in trace_entries.h
     115             :  */
     116             : struct syscall_trace_enter {
     117             :         struct trace_entry      ent;
     118             :         int                     nr;
     119             :         unsigned long           args[];
     120             : };
     121             : 
     122             : struct syscall_trace_exit {
     123             :         struct trace_entry      ent;
     124             :         int                     nr;
     125             :         long                    ret;
     126             : };
     127             : 
     128             : struct kprobe_trace_entry_head {
     129             :         struct trace_entry      ent;
     130             :         unsigned long           ip;
     131             : };
     132             : 
     133             : struct kretprobe_trace_entry_head {
     134             :         struct trace_entry      ent;
     135             :         unsigned long           func;
     136             :         unsigned long           ret_ip;
     137             : };
     138             : 
     139             : #define TRACE_BUF_SIZE          1024
     140             : 
     141             : struct trace_array;
     142             : 
     143             : /*
     144             :  * The CPU trace array - it consists of thousands of trace entries
     145             :  * plus some other descriptor data: (for example which task started
     146             :  * the trace, etc.)
     147             :  */
     148             : struct trace_array_cpu {
     149             :         atomic_t                disabled;
     150             :         void                    *buffer_page;   /* ring buffer spare */
     151             : 
     152             :         unsigned long           entries;
     153             :         unsigned long           saved_latency;
     154             :         unsigned long           critical_start;
     155             :         unsigned long           critical_end;
     156             :         unsigned long           critical_sequence;
     157             :         unsigned long           nice;
     158             :         unsigned long           policy;
     159             :         unsigned long           rt_priority;
     160             :         unsigned long           skipped_entries;
     161             :         u64                     preempt_timestamp;
     162             :         pid_t                   pid;
     163             :         kuid_t                  uid;
     164             :         char                    comm[TASK_COMM_LEN];
     165             : 
     166             : #ifdef CONFIG_FUNCTION_TRACER
     167             :         int                     ftrace_ignore_pid;
     168             : #endif
     169             :         bool                    ignore_pid;
     170             : };
     171             : 
     172             : struct tracer;
     173             : struct trace_option_dentry;
     174             : 
     175             : struct array_buffer {
     176             :         struct trace_array              *tr;
     177             :         struct trace_buffer             *buffer;
     178             :         struct trace_array_cpu __percpu *data;
     179             :         u64                             time_start;
     180             :         int                             cpu;
     181             : };
     182             : 
     183             : #define TRACE_FLAGS_MAX_SIZE            32
     184             : 
     185             : struct trace_options {
     186             :         struct tracer                   *tracer;
     187             :         struct trace_option_dentry      *topts;
     188             : };
     189             : 
     190             : struct trace_pid_list {
     191             :         int                             pid_max;
     192             :         unsigned long                   *pids;
     193             : };
     194             : 
     195             : enum {
     196             :         TRACE_PIDS              = BIT(0),
     197             :         TRACE_NO_PIDS           = BIT(1),
     198             : };
     199             : 
     200           0 : static inline bool pid_type_enabled(int type, struct trace_pid_list *pid_list,
     201             :                                     struct trace_pid_list *no_pid_list)
     202             : {
     203             :         /* Return true if the pid list in type has pids */
     204           0 :         return ((type & TRACE_PIDS) && pid_list) ||
     205           0 :                 ((type & TRACE_NO_PIDS) && no_pid_list);
     206             : }
     207             : 
     208           0 : static inline bool still_need_pid_events(int type, struct trace_pid_list *pid_list,
     209             :                                          struct trace_pid_list *no_pid_list)
     210             : {
     211             :         /*
     212             :          * Turning off what is in @type, return true if the "other"
     213             :          * pid list, still has pids in it.
     214             :          */
     215           0 :         return (!(type & TRACE_PIDS) && pid_list) ||
     216           0 :                 (!(type & TRACE_NO_PIDS) && no_pid_list);
     217             : }
     218             : 
     219             : typedef bool (*cond_update_fn_t)(struct trace_array *tr, void *cond_data);
     220             : 
     221             : /**
     222             :  * struct cond_snapshot - conditional snapshot data and callback
     223             :  *
     224             :  * The cond_snapshot structure encapsulates a callback function and
     225             :  * data associated with the snapshot for a given tracing instance.
     226             :  *
     227             :  * When a snapshot is taken conditionally, by invoking
     228             :  * tracing_snapshot_cond(tr, cond_data), the cond_data passed in is
     229             :  * passed in turn to the cond_snapshot.update() function.  That data
     230             :  * can be compared by the update() implementation with the cond_data
     231             :  * contained within the struct cond_snapshot instance associated with
     232             :  * the trace_array.  Because the tr->max_lock is held throughout the
     233             :  * update() call, the update() function can directly retrieve the
     234             :  * cond_snapshot and cond_data associated with the per-instance
     235             :  * snapshot associated with the trace_array.
     236             :  *
     237             :  * The cond_snapshot.update() implementation can save data to be
     238             :  * associated with the snapshot if it decides to, and returns 'true'
     239             :  * in that case, or it returns 'false' if the conditional snapshot
     240             :  * shouldn't be taken.
     241             :  *
     242             :  * The cond_snapshot instance is created and associated with the
     243             :  * user-defined cond_data by tracing_cond_snapshot_enable().
     244             :  * Likewise, the cond_snapshot instance is destroyed and is no longer
     245             :  * associated with the trace instance by
     246             :  * tracing_cond_snapshot_disable().
     247             :  *
     248             :  * The method below is required.
     249             :  *
     250             :  * @update: When a conditional snapshot is invoked, the update()
     251             :  *      callback function is invoked with the tr->max_lock held.  The
     252             :  *      update() implementation signals whether or not to actually
     253             :  *      take the snapshot, by returning 'true' if so, 'false' if no
     254             :  *      snapshot should be taken.  Because the max_lock is held for
     255             :  *      the duration of update(), the implementation is safe to
     256             :  *      directly retrieved and save any implementation data it needs
     257             :  *      to in association with the snapshot.
     258             :  */
     259             : struct cond_snapshot {
     260             :         void                            *cond_data;
     261             :         cond_update_fn_t                update;
     262             : };
     263             : 
     264             : /*
     265             :  * The trace array - an array of per-CPU trace arrays. This is the
     266             :  * highest level data structure that individual tracers deal with.
     267             :  * They have on/off state as well:
     268             :  */
     269             : struct trace_array {
     270             :         struct list_head        list;
     271             :         char                    *name;
     272             :         struct array_buffer     array_buffer;
     273             : #ifdef CONFIG_TRACER_MAX_TRACE
     274             :         /*
     275             :          * The max_buffer is used to snapshot the trace when a maximum
     276             :          * latency is reached, or when the user initiates a snapshot.
     277             :          * Some tracers will use this to store a maximum trace while
     278             :          * it continues examining live traces.
     279             :          *
     280             :          * The buffers for the max_buffer are set up the same as the array_buffer
     281             :          * When a snapshot is taken, the buffer of the max_buffer is swapped
     282             :          * with the buffer of the array_buffer and the buffers are reset for
     283             :          * the array_buffer so the tracing can continue.
     284             :          */
     285             :         struct array_buffer     max_buffer;
     286             :         bool                    allocated_snapshot;
     287             : #endif
     288             : #if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
     289             :         unsigned long           max_latency;
     290             : #ifdef CONFIG_FSNOTIFY
     291             :         struct dentry           *d_max_latency;
     292             :         struct work_struct      fsnotify_work;
     293             :         struct irq_work         fsnotify_irqwork;
     294             : #endif
     295             : #endif
     296             :         struct trace_pid_list   __rcu *filtered_pids;
     297             :         struct trace_pid_list   __rcu *filtered_no_pids;
     298             :         /*
     299             :          * max_lock is used to protect the swapping of buffers
     300             :          * when taking a max snapshot. The buffers themselves are
     301             :          * protected by per_cpu spinlocks. But the action of the swap
     302             :          * needs its own lock.
     303             :          *
     304             :          * This is defined as a arch_spinlock_t in order to help
     305             :          * with performance when lockdep debugging is enabled.
     306             :          *
     307             :          * It is also used in other places outside the update_max_tr
     308             :          * so it needs to be defined outside of the
     309             :          * CONFIG_TRACER_MAX_TRACE.
     310             :          */
     311             :         arch_spinlock_t         max_lock;
     312             :         int                     buffer_disabled;
     313             : #ifdef CONFIG_FTRACE_SYSCALLS
     314             :         int                     sys_refcount_enter;
     315             :         int                     sys_refcount_exit;
     316             :         struct trace_event_file __rcu *enter_syscall_files[NR_syscalls];
     317             :         struct trace_event_file __rcu *exit_syscall_files[NR_syscalls];
     318             : #endif
     319             :         int                     stop_count;
     320             :         int                     clock_id;
     321             :         int                     nr_topts;
     322             :         bool                    clear_trace;
     323             :         int                     buffer_percent;
     324             :         unsigned int            n_err_log_entries;
     325             :         struct tracer           *current_trace;
     326             :         unsigned int            trace_flags;
     327             :         unsigned char           trace_flags_index[TRACE_FLAGS_MAX_SIZE];
     328             :         unsigned int            flags;
     329             :         raw_spinlock_t          start_lock;
     330             :         struct list_head        err_log;
     331             :         struct dentry           *dir;
     332             :         struct dentry           *options;
     333             :         struct dentry           *percpu_dir;
     334             :         struct dentry           *event_dir;
     335             :         struct trace_options    *topts;
     336             :         struct list_head        systems;
     337             :         struct list_head        events;
     338             :         struct trace_event_file *trace_marker_file;
     339             :         cpumask_var_t           tracing_cpumask; /* only trace on set CPUs */
     340             :         int                     ref;
     341             :         int                     trace_ref;
     342             : #ifdef CONFIG_FUNCTION_TRACER
     343             :         struct ftrace_ops       *ops;
     344             :         struct trace_pid_list   __rcu *function_pids;
     345             :         struct trace_pid_list   __rcu *function_no_pids;
     346             : #ifdef CONFIG_DYNAMIC_FTRACE
     347             :         /* All of these are protected by the ftrace_lock */
     348             :         struct list_head        func_probes;
     349             :         struct list_head        mod_trace;
     350             :         struct list_head        mod_notrace;
     351             : #endif
     352             :         /* function tracing enabled */
     353             :         int                     function_enabled;
     354             : #endif
     355             :         int                     time_stamp_abs_ref;
     356             :         struct list_head        hist_vars;
     357             : #ifdef CONFIG_TRACER_SNAPSHOT
     358             :         struct cond_snapshot    *cond_snapshot;
     359             : #endif
     360             : };
     361             : 
     362             : enum {
     363             :         TRACE_ARRAY_FL_GLOBAL   = (1 << 0)
     364             : };
     365             : 
     366             : extern struct list_head ftrace_trace_arrays;
     367             : 
     368             : extern struct mutex trace_types_lock;
     369             : 
     370             : extern int trace_array_get(struct trace_array *tr);
     371             : extern int tracing_check_open_get_tr(struct trace_array *tr);
     372             : extern struct trace_array *trace_array_find(const char *instance);
     373             : extern struct trace_array *trace_array_find_get(const char *instance);
     374             : 
     375             : extern int tracing_set_time_stamp_abs(struct trace_array *tr, bool abs);
     376             : extern int tracing_set_clock(struct trace_array *tr, const char *clockstr);
     377             : 
     378             : extern bool trace_clock_in_ns(struct trace_array *tr);
     379             : 
     380             : /*
     381             :  * The global tracer (top) should be the first trace array added,
     382             :  * but we check the flag anyway.
     383             :  */
     384           3 : static inline struct trace_array *top_trace_array(void)
     385             : {
     386           3 :         struct trace_array *tr;
     387             : 
     388           3 :         if (list_empty(&ftrace_trace_arrays))
     389             :                 return NULL;
     390             : 
     391           3 :         tr = list_entry(ftrace_trace_arrays.prev,
     392             :                         typeof(*tr), list);
     393           3 :         WARN_ON(!(tr->flags & TRACE_ARRAY_FL_GLOBAL));
     394             :         return tr;
     395             : }
     396             : 
     397             : #define FTRACE_CMP_TYPE(var, type) \
     398             :         __builtin_types_compatible_p(typeof(var), type *)
     399             : 
     400             : #undef IF_ASSIGN
     401             : #define IF_ASSIGN(var, entry, etype, id)                        \
     402             :         if (FTRACE_CMP_TYPE(var, etype)) {                      \
     403             :                 var = (typeof(var))(entry);                     \
     404             :                 WARN_ON(id != 0 && (entry)->type != id);     \
     405             :                 break;                                          \
     406             :         }
     407             : 
     408             : /* Will cause compile errors if type is not found. */
     409             : extern void __ftrace_bad_type(void);
     410             : 
     411             : /*
     412             :  * The trace_assign_type is a verifier that the entry type is
     413             :  * the same as the type being assigned. To add new types simply
     414             :  * add a line with the following format:
     415             :  *
     416             :  * IF_ASSIGN(var, ent, type, id);
     417             :  *
     418             :  *  Where "type" is the trace type that includes the trace_entry
     419             :  *  as the "ent" item. And "id" is the trace identifier that is
     420             :  *  used in the trace_type enum.
     421             :  *
     422             :  *  If the type can have more than one id, then use zero.
     423             :  */
     424             : #define trace_assign_type(var, ent)                                     \
     425             :         do {                                                            \
     426             :                 IF_ASSIGN(var, ent, struct ftrace_entry, TRACE_FN);     \
     427             :                 IF_ASSIGN(var, ent, struct ctx_switch_entry, 0);        \
     428             :                 IF_ASSIGN(var, ent, struct stack_entry, TRACE_STACK);   \
     429             :                 IF_ASSIGN(var, ent, struct userstack_entry, TRACE_USER_STACK);\
     430             :                 IF_ASSIGN(var, ent, struct print_entry, TRACE_PRINT);   \
     431             :                 IF_ASSIGN(var, ent, struct bprint_entry, TRACE_BPRINT); \
     432             :                 IF_ASSIGN(var, ent, struct bputs_entry, TRACE_BPUTS);   \
     433             :                 IF_ASSIGN(var, ent, struct hwlat_entry, TRACE_HWLAT);   \
     434             :                 IF_ASSIGN(var, ent, struct raw_data_entry, TRACE_RAW_DATA);\
     435             :                 IF_ASSIGN(var, ent, struct trace_mmiotrace_rw,          \
     436             :                           TRACE_MMIO_RW);                               \
     437             :                 IF_ASSIGN(var, ent, struct trace_mmiotrace_map,         \
     438             :                           TRACE_MMIO_MAP);                              \
     439             :                 IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \
     440             :                 IF_ASSIGN(var, ent, struct ftrace_graph_ent_entry,      \
     441             :                           TRACE_GRAPH_ENT);             \
     442             :                 IF_ASSIGN(var, ent, struct ftrace_graph_ret_entry,      \
     443             :                           TRACE_GRAPH_RET);             \
     444             :                 __ftrace_bad_type();                                    \
     445             :         } while (0)
     446             : 
     447             : /*
     448             :  * An option specific to a tracer. This is a boolean value.
     449             :  * The bit is the bit index that sets its value on the
     450             :  * flags value in struct tracer_flags.
     451             :  */
     452             : struct tracer_opt {
     453             :         const char      *name; /* Will appear on the trace_options file */
     454             :         u32             bit; /* Mask assigned in val field in tracer_flags */
     455             : };
     456             : 
     457             : /*
     458             :  * The set of specific options for a tracer. Your tracer
     459             :  * have to set the initial value of the flags val.
     460             :  */
     461             : struct tracer_flags {
     462             :         u32                     val;
     463             :         struct tracer_opt       *opts;
     464             :         struct tracer           *trace;
     465             : };
     466             : 
     467             : /* Makes more easy to define a tracer opt */
     468             : #define TRACER_OPT(s, b)        .name = #s, .bit = b
     469             : 
     470             : 
     471             : struct trace_option_dentry {
     472             :         struct tracer_opt               *opt;
     473             :         struct tracer_flags             *flags;
     474             :         struct trace_array              *tr;
     475             :         struct dentry                   *entry;
     476             : };
     477             : 
     478             : /**
     479             :  * struct tracer - a specific tracer and its callbacks to interact with tracefs
     480             :  * @name: the name chosen to select it on the available_tracers file
     481             :  * @init: called when one switches to this tracer (echo name > current_tracer)
     482             :  * @reset: called when one switches to another tracer
     483             :  * @start: called when tracing is unpaused (echo 1 > tracing_on)
     484             :  * @stop: called when tracing is paused (echo 0 > tracing_on)
     485             :  * @update_thresh: called when tracing_thresh is updated
     486             :  * @open: called when the trace file is opened
     487             :  * @pipe_open: called when the trace_pipe file is opened
     488             :  * @close: called when the trace file is released
     489             :  * @pipe_close: called when the trace_pipe file is released
     490             :  * @read: override the default read callback on trace_pipe
     491             :  * @splice_read: override the default splice_read callback on trace_pipe
     492             :  * @selftest: selftest to run on boot (see trace_selftest.c)
     493             :  * @print_headers: override the first lines that describe your columns
     494             :  * @print_line: callback that prints a trace
     495             :  * @set_flag: signals one of your private flags changed (trace_options file)
     496             :  * @flags: your private flags
     497             :  */
     498             : struct tracer {
     499             :         const char              *name;
     500             :         int                     (*init)(struct trace_array *tr);
     501             :         void                    (*reset)(struct trace_array *tr);
     502             :         void                    (*start)(struct trace_array *tr);
     503             :         void                    (*stop)(struct trace_array *tr);
     504             :         int                     (*update_thresh)(struct trace_array *tr);
     505             :         void                    (*open)(struct trace_iterator *iter);
     506             :         void                    (*pipe_open)(struct trace_iterator *iter);
     507             :         void                    (*close)(struct trace_iterator *iter);
     508             :         void                    (*pipe_close)(struct trace_iterator *iter);
     509             :         ssize_t                 (*read)(struct trace_iterator *iter,
     510             :                                         struct file *filp, char __user *ubuf,
     511             :                                         size_t cnt, loff_t *ppos);
     512             :         ssize_t                 (*splice_read)(struct trace_iterator *iter,
     513             :                                                struct file *filp,
     514             :                                                loff_t *ppos,
     515             :                                                struct pipe_inode_info *pipe,
     516             :                                                size_t len,
     517             :                                                unsigned int flags);
     518             : #ifdef CONFIG_FTRACE_STARTUP_TEST
     519             :         int                     (*selftest)(struct tracer *trace,
     520             :                                             struct trace_array *tr);
     521             : #endif
     522             :         void                    (*print_header)(struct seq_file *m);
     523             :         enum print_line_t       (*print_line)(struct trace_iterator *iter);
     524             :         /* If you handled the flag setting, return 0 */
     525             :         int                     (*set_flag)(struct trace_array *tr,
     526             :                                             u32 old_flags, u32 bit, int set);
     527             :         /* Return 0 if OK with change, else return non-zero */
     528             :         int                     (*flag_changed)(struct trace_array *tr,
     529             :                                                 u32 mask, int set);
     530             :         struct tracer           *next;
     531             :         struct tracer_flags     *flags;
     532             :         int                     enabled;
     533             :         bool                    print_max;
     534             :         bool                    allow_instances;
     535             : #ifdef CONFIG_TRACER_MAX_TRACE
     536             :         bool                    use_max_tr;
     537             : #endif
     538             :         /* True if tracer cannot be enabled in kernel param */
     539             :         bool                    noboot;
     540             : };
     541             : 
     542             : static inline struct ring_buffer_iter *
     543           0 : trace_buffer_iter(struct trace_iterator *iter, int cpu)
     544             : {
     545           0 :         return iter->buffer_iter ? iter->buffer_iter[cpu] : NULL;
     546             : }
     547             : 
     548             : int tracer_init(struct tracer *t, struct trace_array *tr);
     549             : int tracing_is_enabled(void);
     550             : void tracing_reset_online_cpus(struct array_buffer *buf);
     551             : void tracing_reset_current(int cpu);
     552             : void tracing_reset_all_online_cpus(void);
     553             : int tracing_open_generic(struct inode *inode, struct file *filp);
     554             : int tracing_open_generic_tr(struct inode *inode, struct file *filp);
     555             : bool tracing_is_disabled(void);
     556             : bool tracer_tracing_is_on(struct trace_array *tr);
     557             : void tracer_tracing_on(struct trace_array *tr);
     558             : void tracer_tracing_off(struct trace_array *tr);
     559             : struct dentry *trace_create_file(const char *name,
     560             :                                  umode_t mode,
     561             :                                  struct dentry *parent,
     562             :                                  void *data,
     563             :                                  const struct file_operations *fops);
     564             : 
     565             : int tracing_init_dentry(void);
     566             : 
     567             : struct ring_buffer_event;
     568             : 
     569             : struct ring_buffer_event *
     570             : trace_buffer_lock_reserve(struct trace_buffer *buffer,
     571             :                           int type,
     572             :                           unsigned long len,
     573             :                           unsigned int trace_ctx);
     574             : 
     575             : struct trace_entry *tracing_get_trace_entry(struct trace_array *tr,
     576             :                                                 struct trace_array_cpu *data);
     577             : 
     578             : struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
     579             :                                           int *ent_cpu, u64 *ent_ts);
     580             : 
     581             : void trace_buffer_unlock_commit_nostack(struct trace_buffer *buffer,
     582             :                                         struct ring_buffer_event *event);
     583             : 
     584             : const char *trace_event_format(struct trace_iterator *iter, const char *fmt);
     585             : 
     586             : int trace_empty(struct trace_iterator *iter);
     587             : 
     588             : void *trace_find_next_entry_inc(struct trace_iterator *iter);
     589             : 
     590             : void trace_init_global_iter(struct trace_iterator *iter);
     591             : 
     592             : void tracing_iter_reset(struct trace_iterator *iter, int cpu);
     593             : 
     594             : unsigned long trace_total_entries_cpu(struct trace_array *tr, int cpu);
     595             : unsigned long trace_total_entries(struct trace_array *tr);
     596             : 
     597             : void trace_function(struct trace_array *tr,
     598             :                     unsigned long ip,
     599             :                     unsigned long parent_ip,
     600             :                     unsigned int trace_ctx);
     601             : void trace_graph_function(struct trace_array *tr,
     602             :                     unsigned long ip,
     603             :                     unsigned long parent_ip,
     604             :                     unsigned int trace_ctx);
     605             : void trace_latency_header(struct seq_file *m);
     606             : void trace_default_header(struct seq_file *m);
     607             : void print_trace_header(struct seq_file *m, struct trace_iterator *iter);
     608             : 
     609             : void trace_graph_return(struct ftrace_graph_ret *trace);
     610             : int trace_graph_entry(struct ftrace_graph_ent *trace);
     611             : void set_graph_array(struct trace_array *tr);
     612             : 
     613             : void tracing_start_cmdline_record(void);
     614             : void tracing_stop_cmdline_record(void);
     615             : void tracing_start_tgid_record(void);
     616             : void tracing_stop_tgid_record(void);
     617             : 
     618             : int register_tracer(struct tracer *type);
     619             : int is_tracing_stopped(void);
     620             : 
     621             : loff_t tracing_lseek(struct file *file, loff_t offset, int whence);
     622             : 
     623             : extern cpumask_var_t __read_mostly tracing_buffer_mask;
     624             : 
     625             : #define for_each_tracing_cpu(cpu)       \
     626             :         for_each_cpu(cpu, tracing_buffer_mask)
     627             : 
     628             : extern unsigned long nsecs_to_usecs(unsigned long nsecs);
     629             : 
     630             : extern unsigned long tracing_thresh;
     631             : 
     632             : /* PID filtering */
     633             : 
     634             : extern int pid_max;
     635             : 
     636             : bool trace_find_filtered_pid(struct trace_pid_list *filtered_pids,
     637             :                              pid_t search_pid);
     638             : bool trace_ignore_this_task(struct trace_pid_list *filtered_pids,
     639             :                             struct trace_pid_list *filtered_no_pids,
     640             :                             struct task_struct *task);
     641             : void trace_filter_add_remove_task(struct trace_pid_list *pid_list,
     642             :                                   struct task_struct *self,
     643             :                                   struct task_struct *task);
     644             : void *trace_pid_next(struct trace_pid_list *pid_list, void *v, loff_t *pos);
     645             : void *trace_pid_start(struct trace_pid_list *pid_list, loff_t *pos);
     646             : int trace_pid_show(struct seq_file *m, void *v);
     647             : void trace_free_pid_list(struct trace_pid_list *pid_list);
     648             : int trace_pid_write(struct trace_pid_list *filtered_pids,
     649             :                     struct trace_pid_list **new_pid_list,
     650             :                     const char __user *ubuf, size_t cnt);
     651             : 
     652             : #ifdef CONFIG_TRACER_MAX_TRACE
     653             : void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu,
     654             :                    void *cond_data);
     655             : void update_max_tr_single(struct trace_array *tr,
     656             :                           struct task_struct *tsk, int cpu);
     657             : #endif /* CONFIG_TRACER_MAX_TRACE */
     658             : 
     659             : #if (defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)) && \
     660             :         defined(CONFIG_FSNOTIFY)
     661             : 
     662             : void latency_fsnotify(struct trace_array *tr);
     663             : 
     664             : #else
     665             : 
     666             : static inline void latency_fsnotify(struct trace_array *tr) { }
     667             : 
     668             : #endif
     669             : 
     670             : #ifdef CONFIG_STACKTRACE
     671             : void __trace_stack(struct trace_array *tr, unsigned int trace_ctx, int skip);
     672             : #else
     673             : static inline void __trace_stack(struct trace_array *tr, unsigned int trace_ctx,
     674             :                                  int skip)
     675             : {
     676             : }
     677             : #endif /* CONFIG_STACKTRACE */
     678             : 
     679             : extern u64 ftrace_now(int cpu);
     680             : 
     681             : extern void trace_find_cmdline(int pid, char comm[]);
     682             : extern int trace_find_tgid(int pid);
     683             : extern void trace_event_follow_fork(struct trace_array *tr, bool enable);
     684             : 
     685             : #ifdef CONFIG_DYNAMIC_FTRACE
     686             : extern unsigned long ftrace_update_tot_cnt;
     687             : extern unsigned long ftrace_number_of_pages;
     688             : extern unsigned long ftrace_number_of_groups;
     689             : void ftrace_init_trace_array(struct trace_array *tr);
     690             : #else
     691             : static inline void ftrace_init_trace_array(struct trace_array *tr) { }
     692             : #endif
     693             : #define DYN_FTRACE_TEST_NAME trace_selftest_dynamic_test_func
     694             : extern int DYN_FTRACE_TEST_NAME(void);
     695             : #define DYN_FTRACE_TEST_NAME2 trace_selftest_dynamic_test_func2
     696             : extern int DYN_FTRACE_TEST_NAME2(void);
     697             : 
     698             : extern bool ring_buffer_expanded;
     699             : extern bool tracing_selftest_disabled;
     700             : 
     701             : #ifdef CONFIG_FTRACE_STARTUP_TEST
     702             : extern void __init disable_tracing_selftest(const char *reason);
     703             : 
     704             : extern int trace_selftest_startup_function(struct tracer *trace,
     705             :                                            struct trace_array *tr);
     706             : extern int trace_selftest_startup_function_graph(struct tracer *trace,
     707             :                                                  struct trace_array *tr);
     708             : extern int trace_selftest_startup_irqsoff(struct tracer *trace,
     709             :                                           struct trace_array *tr);
     710             : extern int trace_selftest_startup_preemptoff(struct tracer *trace,
     711             :                                              struct trace_array *tr);
     712             : extern int trace_selftest_startup_preemptirqsoff(struct tracer *trace,
     713             :                                                  struct trace_array *tr);
     714             : extern int trace_selftest_startup_wakeup(struct tracer *trace,
     715             :                                          struct trace_array *tr);
     716             : extern int trace_selftest_startup_nop(struct tracer *trace,
     717             :                                          struct trace_array *tr);
     718             : extern int trace_selftest_startup_branch(struct tracer *trace,
     719             :                                          struct trace_array *tr);
     720             : /*
     721             :  * Tracer data references selftest functions that only occur
     722             :  * on boot up. These can be __init functions. Thus, when selftests
     723             :  * are enabled, then the tracers need to reference __init functions.
     724             :  */
     725             : #define __tracer_data           __refdata
     726             : #else
     727           0 : static inline void __init disable_tracing_selftest(const char *reason)
     728             : {
     729           0 : }
     730             : /* Tracers are seldom changed. Optimize when selftests are disabled. */
     731             : #define __tracer_data           __read_mostly
     732             : #endif /* CONFIG_FTRACE_STARTUP_TEST */
     733             : 
     734             : extern void *head_page(struct trace_array_cpu *data);
     735             : extern unsigned long long ns2usecs(u64 nsec);
     736             : extern int
     737             : trace_vbprintk(unsigned long ip, const char *fmt, va_list args);
     738             : extern int
     739             : trace_vprintk(unsigned long ip, const char *fmt, va_list args);
     740             : extern int
     741             : trace_array_vprintk(struct trace_array *tr,
     742             :                     unsigned long ip, const char *fmt, va_list args);
     743             : int trace_array_printk_buf(struct trace_buffer *buffer,
     744             :                            unsigned long ip, const char *fmt, ...);
     745             : void trace_printk_seq(struct trace_seq *s);
     746             : enum print_line_t print_trace_line(struct trace_iterator *iter);
     747             : 
     748             : extern char trace_find_mark(unsigned long long duration);
     749             : 
     750             : struct ftrace_hash;
     751             : 
     752             : struct ftrace_mod_load {
     753             :         struct list_head        list;
     754             :         char                    *func;
     755             :         char                    *module;
     756             :         int                      enable;
     757             : };
     758             : 
     759             : enum {
     760             :         FTRACE_HASH_FL_MOD      = (1 << 0),
     761             : };
     762             : 
     763             : struct ftrace_hash {
     764             :         unsigned long           size_bits;
     765             :         struct hlist_head       *buckets;
     766             :         unsigned long           count;
     767             :         unsigned long           flags;
     768             :         struct rcu_head         rcu;
     769             : };
     770             : 
     771             : struct ftrace_func_entry *
     772             : ftrace_lookup_ip(struct ftrace_hash *hash, unsigned long ip);
     773             : 
     774             : static __always_inline bool ftrace_hash_empty(struct ftrace_hash *hash)
     775             : {
     776             :         return !hash || !(hash->count || (hash->flags & FTRACE_HASH_FL_MOD));
     777             : }
     778             : 
     779             : /* Standard output formatting function used for function return traces */
     780             : #ifdef CONFIG_FUNCTION_GRAPH_TRACER
     781             : 
     782             : /* Flag options */
     783             : #define TRACE_GRAPH_PRINT_OVERRUN       0x1
     784             : #define TRACE_GRAPH_PRINT_CPU           0x2
     785             : #define TRACE_GRAPH_PRINT_OVERHEAD      0x4
     786             : #define TRACE_GRAPH_PRINT_PROC          0x8
     787             : #define TRACE_GRAPH_PRINT_DURATION      0x10
     788             : #define TRACE_GRAPH_PRINT_ABS_TIME      0x20
     789             : #define TRACE_GRAPH_PRINT_REL_TIME      0x40
     790             : #define TRACE_GRAPH_PRINT_IRQS          0x80
     791             : #define TRACE_GRAPH_PRINT_TAIL          0x100
     792             : #define TRACE_GRAPH_SLEEP_TIME          0x200
     793             : #define TRACE_GRAPH_GRAPH_TIME          0x400
     794             : #define TRACE_GRAPH_PRINT_FILL_SHIFT    28
     795             : #define TRACE_GRAPH_PRINT_FILL_MASK     (0x3 << TRACE_GRAPH_PRINT_FILL_SHIFT)
     796             : 
     797             : extern void ftrace_graph_sleep_time_control(bool enable);
     798             : 
     799             : #ifdef CONFIG_FUNCTION_PROFILER
     800             : extern void ftrace_graph_graph_time_control(bool enable);
     801             : #else
     802             : static inline void ftrace_graph_graph_time_control(bool enable) { }
     803             : #endif
     804             : 
     805             : extern enum print_line_t
     806             : print_graph_function_flags(struct trace_iterator *iter, u32 flags);
     807             : extern void print_graph_headers_flags(struct seq_file *s, u32 flags);
     808             : extern void
     809             : trace_print_graph_duration(unsigned long long duration, struct trace_seq *s);
     810             : extern void graph_trace_open(struct trace_iterator *iter);
     811             : extern void graph_trace_close(struct trace_iterator *iter);
     812             : extern int __trace_graph_entry(struct trace_array *tr,
     813             :                                struct ftrace_graph_ent *trace,
     814             :                                unsigned int trace_ctx);
     815             : extern void __trace_graph_return(struct trace_array *tr,
     816             :                                  struct ftrace_graph_ret *trace,
     817             :                                  unsigned int trace_ctx);
     818             : 
     819             : #ifdef CONFIG_DYNAMIC_FTRACE
     820             : extern struct ftrace_hash __rcu *ftrace_graph_hash;
     821             : extern struct ftrace_hash __rcu *ftrace_graph_notrace_hash;
     822             : 
     823             : static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
     824             : {
     825             :         unsigned long addr = trace->func;
     826             :         int ret = 0;
     827             :         struct ftrace_hash *hash;
     828             : 
     829             :         preempt_disable_notrace();
     830             : 
     831             :         /*
     832             :          * Have to open code "rcu_dereference_sched()" because the
     833             :          * function graph tracer can be called when RCU is not
     834             :          * "watching".
     835             :          * Protected with schedule_on_each_cpu(ftrace_sync)
     836             :          */
     837             :         hash = rcu_dereference_protected(ftrace_graph_hash, !preemptible());
     838             : 
     839             :         if (ftrace_hash_empty(hash)) {
     840             :                 ret = 1;
     841             :                 goto out;
     842             :         }
     843             : 
     844             :         if (ftrace_lookup_ip(hash, addr)) {
     845             : 
     846             :                 /*
     847             :                  * This needs to be cleared on the return functions
     848             :                  * when the depth is zero.
     849             :                  */
     850             :                 trace_recursion_set(TRACE_GRAPH_BIT);
     851             :                 trace_recursion_set_depth(trace->depth);
     852             : 
     853             :                 /*
     854             :                  * If no irqs are to be traced, but a set_graph_function
     855             :                  * is set, and called by an interrupt handler, we still
     856             :                  * want to trace it.
     857             :                  */
     858             :                 if (in_irq())
     859             :                         trace_recursion_set(TRACE_IRQ_BIT);
     860             :                 else
     861             :                         trace_recursion_clear(TRACE_IRQ_BIT);
     862             :                 ret = 1;
     863             :         }
     864             : 
     865             : out:
     866             :         preempt_enable_notrace();
     867             :         return ret;
     868             : }
     869             : 
     870             : static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
     871             : {
     872             :         if (trace_recursion_test(TRACE_GRAPH_BIT) &&
     873             :             trace->depth == trace_recursion_depth())
     874             :                 trace_recursion_clear(TRACE_GRAPH_BIT);
     875             : }
     876             : 
     877             : static inline int ftrace_graph_notrace_addr(unsigned long addr)
     878             : {
     879             :         int ret = 0;
     880             :         struct ftrace_hash *notrace_hash;
     881             : 
     882             :         preempt_disable_notrace();
     883             : 
     884             :         /*
     885             :          * Have to open code "rcu_dereference_sched()" because the
     886             :          * function graph tracer can be called when RCU is not
     887             :          * "watching".
     888             :          * Protected with schedule_on_each_cpu(ftrace_sync)
     889             :          */
     890             :         notrace_hash = rcu_dereference_protected(ftrace_graph_notrace_hash,
     891             :                                                  !preemptible());
     892             : 
     893             :         if (ftrace_lookup_ip(notrace_hash, addr))
     894             :                 ret = 1;
     895             : 
     896             :         preempt_enable_notrace();
     897             :         return ret;
     898             : }
     899             : #else
     900             : static inline int ftrace_graph_addr(struct ftrace_graph_ent *trace)
     901             : {
     902             :         return 1;
     903             : }
     904             : 
     905             : static inline int ftrace_graph_notrace_addr(unsigned long addr)
     906             : {
     907             :         return 0;
     908             : }
     909             : static inline void ftrace_graph_addr_finish(struct ftrace_graph_ret *trace)
     910             : { }
     911             : #endif /* CONFIG_DYNAMIC_FTRACE */
     912             : 
     913             : extern unsigned int fgraph_max_depth;
     914             : 
     915             : static inline bool ftrace_graph_ignore_func(struct ftrace_graph_ent *trace)
     916             : {
     917             :         /* trace it when it is-nested-in or is a function enabled. */
     918             :         return !(trace_recursion_test(TRACE_GRAPH_BIT) ||
     919             :                  ftrace_graph_addr(trace)) ||
     920             :                 (trace->depth < 0) ||
     921             :                 (fgraph_max_depth && trace->depth >= fgraph_max_depth);
     922             : }
     923             : 
     924             : #else /* CONFIG_FUNCTION_GRAPH_TRACER */
     925             : static inline enum print_line_t
     926             : print_graph_function_flags(struct trace_iterator *iter, u32 flags)
     927             : {
     928             :         return TRACE_TYPE_UNHANDLED;
     929             : }
     930             : #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
     931             : 
     932             : extern struct list_head ftrace_pids;
     933             : 
     934             : #ifdef CONFIG_FUNCTION_TRACER
     935             : 
     936             : #define FTRACE_PID_IGNORE       -1
     937             : #define FTRACE_PID_TRACE        -2
     938             : 
     939             : struct ftrace_func_command {
     940             :         struct list_head        list;
     941             :         char                    *name;
     942             :         int                     (*func)(struct trace_array *tr,
     943             :                                         struct ftrace_hash *hash,
     944             :                                         char *func, char *cmd,
     945             :                                         char *params, int enable);
     946             : };
     947             : extern bool ftrace_filter_param __initdata;
     948             : static inline int ftrace_trace_task(struct trace_array *tr)
     949             : {
     950             :         return this_cpu_read(tr->array_buffer.data->ftrace_ignore_pid) !=
     951             :                 FTRACE_PID_IGNORE;
     952             : }
     953             : extern int ftrace_is_dead(void);
     954             : int ftrace_create_function_files(struct trace_array *tr,
     955             :                                  struct dentry *parent);
     956             : void ftrace_destroy_function_files(struct trace_array *tr);
     957             : int ftrace_allocate_ftrace_ops(struct trace_array *tr);
     958             : void ftrace_free_ftrace_ops(struct trace_array *tr);
     959             : void ftrace_init_global_array_ops(struct trace_array *tr);
     960             : void ftrace_init_array_ops(struct trace_array *tr, ftrace_func_t func);
     961             : void ftrace_reset_array_ops(struct trace_array *tr);
     962             : void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d_tracer);
     963             : void ftrace_init_tracefs_toplevel(struct trace_array *tr,
     964             :                                   struct dentry *d_tracer);
     965             : void ftrace_clear_pids(struct trace_array *tr);
     966             : int init_function_trace(void);
     967             : void ftrace_pid_follow_fork(struct trace_array *tr, bool enable);
     968             : #else
     969             : static inline int ftrace_trace_task(struct trace_array *tr)
     970             : {
     971             :         return 1;
     972             : }
     973           0 : static inline int ftrace_is_dead(void) { return 0; }
     974             : static inline int
     975           1 : ftrace_create_function_files(struct trace_array *tr,
     976             :                              struct dentry *parent)
     977             : {
     978           1 :         return 0;
     979             : }
     980             : static inline int ftrace_allocate_ftrace_ops(struct trace_array *tr)
     981             : {
     982             :         return 0;
     983             : }
     984           0 : static inline void ftrace_free_ftrace_ops(struct trace_array *tr) { }
     985           0 : static inline void ftrace_destroy_function_files(struct trace_array *tr) { }
     986             : static inline __init void
     987           1 : ftrace_init_global_array_ops(struct trace_array *tr) { }
     988             : static inline void ftrace_reset_array_ops(struct trace_array *tr) { }
     989           1 : static inline void ftrace_init_tracefs(struct trace_array *tr, struct dentry *d) { }
     990           1 : static inline void ftrace_init_tracefs_toplevel(struct trace_array *tr, struct dentry *d) { }
     991           0 : static inline void ftrace_clear_pids(struct trace_array *tr) { }
     992           1 : static inline int init_function_trace(void) { return 0; }
     993             : static inline void ftrace_pid_follow_fork(struct trace_array *tr, bool enable) { }
     994             : /* ftace_func_t type is not defined, use macro instead of static inline */
     995             : #define ftrace_init_array_ops(tr, func) do { } while (0)
     996             : #endif /* CONFIG_FUNCTION_TRACER */
     997             : 
     998             : #if defined(CONFIG_FUNCTION_TRACER) && defined(CONFIG_DYNAMIC_FTRACE)
     999             : 
    1000             : struct ftrace_probe_ops {
    1001             :         void                    (*func)(unsigned long ip,
    1002             :                                         unsigned long parent_ip,
    1003             :                                         struct trace_array *tr,
    1004             :                                         struct ftrace_probe_ops *ops,
    1005             :                                         void *data);
    1006             :         int                     (*init)(struct ftrace_probe_ops *ops,
    1007             :                                         struct trace_array *tr,
    1008             :                                         unsigned long ip, void *init_data,
    1009             :                                         void **data);
    1010             :         void                    (*free)(struct ftrace_probe_ops *ops,
    1011             :                                         struct trace_array *tr,
    1012             :                                         unsigned long ip, void *data);
    1013             :         int                     (*print)(struct seq_file *m,
    1014             :                                          unsigned long ip,
    1015             :                                          struct ftrace_probe_ops *ops,
    1016             :                                          void *data);
    1017             : };
    1018             : 
    1019             : struct ftrace_func_mapper;
    1020             : typedef int (*ftrace_mapper_func)(void *data);
    1021             : 
    1022             : struct ftrace_func_mapper *allocate_ftrace_func_mapper(void);
    1023             : void **ftrace_func_mapper_find_ip(struct ftrace_func_mapper *mapper,
    1024             :                                            unsigned long ip);
    1025             : int ftrace_func_mapper_add_ip(struct ftrace_func_mapper *mapper,
    1026             :                                unsigned long ip, void *data);
    1027             : void *ftrace_func_mapper_remove_ip(struct ftrace_func_mapper *mapper,
    1028             :                                    unsigned long ip);
    1029             : void free_ftrace_func_mapper(struct ftrace_func_mapper *mapper,
    1030             :                              ftrace_mapper_func free_func);
    1031             : 
    1032             : extern int
    1033             : register_ftrace_function_probe(char *glob, struct trace_array *tr,
    1034             :                                struct ftrace_probe_ops *ops, void *data);
    1035             : extern int
    1036             : unregister_ftrace_function_probe_func(char *glob, struct trace_array *tr,
    1037             :                                       struct ftrace_probe_ops *ops);
    1038             : extern void clear_ftrace_function_probes(struct trace_array *tr);
    1039             : 
    1040             : int register_ftrace_command(struct ftrace_func_command *cmd);
    1041             : int unregister_ftrace_command(struct ftrace_func_command *cmd);
    1042             : 
    1043             : void ftrace_create_filter_files(struct ftrace_ops *ops,
    1044             :                                 struct dentry *parent);
    1045             : void ftrace_destroy_filter_files(struct ftrace_ops *ops);
    1046             : 
    1047             : extern int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
    1048             :                              int len, int reset);
    1049             : extern int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
    1050             :                               int len, int reset);
    1051             : #else
    1052             : struct ftrace_func_command;
    1053             : 
    1054             : static inline __init int register_ftrace_command(struct ftrace_func_command *cmd)
    1055             : {
    1056             :         return -EINVAL;
    1057             : }
    1058             : static inline __init int unregister_ftrace_command(char *cmd_name)
    1059             : {
    1060             :         return -EINVAL;
    1061             : }
    1062           0 : static inline void clear_ftrace_function_probes(struct trace_array *tr)
    1063             : {
    1064           0 : }
    1065             : 
    1066             : /*
    1067             :  * The ops parameter passed in is usually undefined.
    1068             :  * This must be a macro.
    1069             :  */
    1070             : #define ftrace_create_filter_files(ops, parent) do { } while (0)
    1071             : #define ftrace_destroy_filter_files(ops) do { } while (0)
    1072             : #endif /* CONFIG_FUNCTION_TRACER && CONFIG_DYNAMIC_FTRACE */
    1073             : 
    1074             : bool ftrace_event_is_function(struct trace_event_call *call);
    1075             : 
    1076             : /*
    1077             :  * struct trace_parser - servers for reading the user input separated by spaces
    1078             :  * @cont: set if the input is not complete - no final space char was found
    1079             :  * @buffer: holds the parsed user input
    1080             :  * @idx: user input length
    1081             :  * @size: buffer size
    1082             :  */
    1083             : struct trace_parser {
    1084             :         bool            cont;
    1085             :         char            *buffer;
    1086             :         unsigned        idx;
    1087             :         unsigned        size;
    1088             : };
    1089             : 
    1090           0 : static inline bool trace_parser_loaded(struct trace_parser *parser)
    1091             : {
    1092           0 :         return (parser->idx != 0);
    1093             : }
    1094             : 
    1095             : static inline bool trace_parser_cont(struct trace_parser *parser)
    1096             : {
    1097             :         return parser->cont;
    1098             : }
    1099             : 
    1100           0 : static inline void trace_parser_clear(struct trace_parser *parser)
    1101             : {
    1102           0 :         parser->cont = false;
    1103           0 :         parser->idx = 0;
    1104           0 : }
    1105             : 
    1106             : extern int trace_parser_get_init(struct trace_parser *parser, int size);
    1107             : extern void trace_parser_put(struct trace_parser *parser);
    1108             : extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
    1109             :         size_t cnt, loff_t *ppos);
    1110             : 
    1111             : /*
    1112             :  * Only create function graph options if function graph is configured.
    1113             :  */
    1114             : #ifdef CONFIG_FUNCTION_GRAPH_TRACER
    1115             : # define FGRAPH_FLAGS                                           \
    1116             :                 C(DISPLAY_GRAPH,        "display-graph"),
    1117             : #else
    1118             : # define FGRAPH_FLAGS
    1119             : #endif
    1120             : 
    1121             : #ifdef CONFIG_BRANCH_TRACER
    1122             : # define BRANCH_FLAGS                                   \
    1123             :                 C(BRANCH,               "branch"),
    1124             : #else
    1125             : # define BRANCH_FLAGS
    1126             : #endif
    1127             : 
    1128             : #ifdef CONFIG_FUNCTION_TRACER
    1129             : # define FUNCTION_FLAGS                                         \
    1130             :                 C(FUNCTION,             "function-trace"),    \
    1131             :                 C(FUNC_FORK,            "function-fork"),
    1132             : # define FUNCTION_DEFAULT_FLAGS         TRACE_ITER_FUNCTION
    1133             : #else
    1134             : # define FUNCTION_FLAGS
    1135             : # define FUNCTION_DEFAULT_FLAGS         0UL
    1136             : # define TRACE_ITER_FUNC_FORK           0UL
    1137             : #endif
    1138             : 
    1139             : #ifdef CONFIG_STACKTRACE
    1140             : # define STACK_FLAGS                            \
    1141             :                 C(STACKTRACE,           "stacktrace"),
    1142             : #else
    1143             : # define STACK_FLAGS
    1144             : #endif
    1145             : 
    1146             : /*
    1147             :  * trace_iterator_flags is an enumeration that defines bit
    1148             :  * positions into trace_flags that controls the output.
    1149             :  *
    1150             :  * NOTE: These bits must match the trace_options array in
    1151             :  *       trace.c (this macro guarantees it).
    1152             :  */
    1153             : #define TRACE_FLAGS                                             \
    1154             :                 C(PRINT_PARENT,         "print-parent"),      \
    1155             :                 C(SYM_OFFSET,           "sym-offset"),                \
    1156             :                 C(SYM_ADDR,             "sym-addr"),          \
    1157             :                 C(VERBOSE,              "verbose"),           \
    1158             :                 C(RAW,                  "raw"),                       \
    1159             :                 C(HEX,                  "hex"),                       \
    1160             :                 C(BIN,                  "bin"),                       \
    1161             :                 C(BLOCK,                "block"),             \
    1162             :                 C(PRINTK,               "trace_printk"),      \
    1163             :                 C(ANNOTATE,             "annotate"),          \
    1164             :                 C(USERSTACKTRACE,       "userstacktrace"),    \
    1165             :                 C(SYM_USEROBJ,          "sym-userobj"),               \
    1166             :                 C(PRINTK_MSGONLY,       "printk-msg-only"),   \
    1167             :                 C(CONTEXT_INFO,         "context-info"),   /* Print pid/cpu/time */ \
    1168             :                 C(LATENCY_FMT,          "latency-format"),    \
    1169             :                 C(RECORD_CMD,           "record-cmd"),                \
    1170             :                 C(RECORD_TGID,          "record-tgid"),               \
    1171             :                 C(OVERWRITE,            "overwrite"),         \
    1172             :                 C(STOP_ON_FREE,         "disable_on_free"),   \
    1173             :                 C(IRQ_INFO,             "irq-info"),          \
    1174             :                 C(MARKERS,              "markers"),           \
    1175             :                 C(EVENT_FORK,           "event-fork"),                \
    1176             :                 C(PAUSE_ON_TRACE,       "pause-on-trace"),    \
    1177             :                 C(HASH_PTR,             "hash-ptr"),  /* Print hashed pointer */ \
    1178             :                 FUNCTION_FLAGS                                  \
    1179             :                 FGRAPH_FLAGS                                    \
    1180             :                 STACK_FLAGS                                     \
    1181             :                 BRANCH_FLAGS
    1182             : 
    1183             : /*
    1184             :  * By defining C, we can make TRACE_FLAGS a list of bit names
    1185             :  * that will define the bits for the flag masks.
    1186             :  */
    1187             : #undef C
    1188             : #define C(a, b) TRACE_ITER_##a##_BIT
    1189             : 
    1190             : enum trace_iterator_bits {
    1191             :         TRACE_FLAGS
    1192             :         /* Make sure we don't go more than we have bits for */
    1193             :         TRACE_ITER_LAST_BIT
    1194             : };
    1195             : 
    1196             : /*
    1197             :  * By redefining C, we can make TRACE_FLAGS a list of masks that
    1198             :  * use the bits as defined above.
    1199             :  */
    1200             : #undef C
    1201             : #define C(a, b) TRACE_ITER_##a = (1 << TRACE_ITER_##a##_BIT)
    1202             : 
    1203             : enum trace_iterator_flags { TRACE_FLAGS };
    1204             : 
    1205             : /*
    1206             :  * TRACE_ITER_SYM_MASK masks the options in trace_flags that
    1207             :  * control the output of kernel symbols.
    1208             :  */
    1209             : #define TRACE_ITER_SYM_MASK \
    1210             :         (TRACE_ITER_PRINT_PARENT|TRACE_ITER_SYM_OFFSET|TRACE_ITER_SYM_ADDR)
    1211             : 
    1212             : extern struct tracer nop_trace;
    1213             : 
    1214             : #ifdef CONFIG_BRANCH_TRACER
    1215             : extern int enable_branch_tracing(struct trace_array *tr);
    1216             : extern void disable_branch_tracing(void);
    1217             : static inline int trace_branch_enable(struct trace_array *tr)
    1218             : {
    1219             :         if (tr->trace_flags & TRACE_ITER_BRANCH)
    1220             :                 return enable_branch_tracing(tr);
    1221             :         return 0;
    1222             : }
    1223             : static inline void trace_branch_disable(void)
    1224             : {
    1225             :         /* due to races, always disable */
    1226             :         disable_branch_tracing();
    1227             : }
    1228             : #else
    1229           0 : static inline int trace_branch_enable(struct trace_array *tr)
    1230             : {
    1231           0 :         return 0;
    1232             : }
    1233           0 : static inline void trace_branch_disable(void)
    1234             : {
    1235           0 : }
    1236             : #endif /* CONFIG_BRANCH_TRACER */
    1237             : 
    1238             : /* set ring buffers to default size if not already done so */
    1239             : int tracing_update_buffers(void);
    1240             : 
    1241             : struct ftrace_event_field {
    1242             :         struct list_head        link;
    1243             :         const char              *name;
    1244             :         const char              *type;
    1245             :         int                     filter_type;
    1246             :         int                     offset;
    1247             :         int                     size;
    1248             :         int                     is_signed;
    1249             : };
    1250             : 
    1251             : struct prog_entry;
    1252             : 
    1253             : struct event_filter {
    1254             :         struct prog_entry __rcu *prog;
    1255             :         char                    *filter_string;
    1256             : };
    1257             : 
    1258             : struct event_subsystem {
    1259             :         struct list_head        list;
    1260             :         const char              *name;
    1261             :         struct event_filter     *filter;
    1262             :         int                     ref_count;
    1263             : };
    1264             : 
    1265             : struct trace_subsystem_dir {
    1266             :         struct list_head                list;
    1267             :         struct event_subsystem          *subsystem;
    1268             :         struct trace_array              *tr;
    1269             :         struct dentry                   *entry;
    1270             :         int                             ref_count;
    1271             :         int                             nr_events;
    1272             : };
    1273             : 
    1274             : extern int call_filter_check_discard(struct trace_event_call *call, void *rec,
    1275             :                                      struct trace_buffer *buffer,
    1276             :                                      struct ring_buffer_event *event);
    1277             : 
    1278             : void trace_buffer_unlock_commit_regs(struct trace_array *tr,
    1279             :                                      struct trace_buffer *buffer,
    1280             :                                      struct ring_buffer_event *event,
    1281             :                                      unsigned int trcace_ctx,
    1282             :                                      struct pt_regs *regs);
    1283             : 
    1284             : static inline void trace_buffer_unlock_commit(struct trace_array *tr,
    1285             :                                               struct trace_buffer *buffer,
    1286             :                                               struct ring_buffer_event *event,
    1287             :                                               unsigned int trace_ctx)
    1288             : {
    1289             :         trace_buffer_unlock_commit_regs(tr, buffer, event, trace_ctx, NULL);
    1290             : }
    1291             : 
    1292             : DECLARE_PER_CPU(struct ring_buffer_event *, trace_buffered_event);
    1293             : DECLARE_PER_CPU(int, trace_buffered_event_cnt);
    1294             : void trace_buffered_event_disable(void);
    1295             : void trace_buffered_event_enable(void);
    1296             : 
    1297             : static inline void
    1298           0 : __trace_event_discard_commit(struct trace_buffer *buffer,
    1299             :                              struct ring_buffer_event *event)
    1300             : {
    1301           0 :         if (this_cpu_read(trace_buffered_event) == event) {
    1302             :                 /* Simply release the temp buffer */
    1303           0 :                 this_cpu_dec(trace_buffered_event_cnt);
    1304           0 :                 return;
    1305             :         }
    1306           0 :         ring_buffer_discard_commit(buffer, event);
    1307             : }
    1308             : 
    1309             : /*
    1310             :  * Helper function for event_trigger_unlock_commit{_regs}().
    1311             :  * If there are event triggers attached to this event that requires
    1312             :  * filtering against its fields, then they will be called as the
    1313             :  * entry already holds the field information of the current event.
    1314             :  *
    1315             :  * It also checks if the event should be discarded or not.
    1316             :  * It is to be discarded if the event is soft disabled and the
    1317             :  * event was only recorded to process triggers, or if the event
    1318             :  * filter is active and this event did not match the filters.
    1319             :  *
    1320             :  * Returns true if the event is discarded, false otherwise.
    1321             :  */
    1322             : static inline bool
    1323           0 : __event_trigger_test_discard(struct trace_event_file *file,
    1324             :                              struct trace_buffer *buffer,
    1325             :                              struct ring_buffer_event *event,
    1326             :                              void *entry,
    1327             :                              enum event_trigger_type *tt)
    1328             : {
    1329           0 :         unsigned long eflags = file->flags;
    1330             : 
    1331           0 :         if (eflags & EVENT_FILE_FL_TRIGGER_COND)
    1332           0 :                 *tt = event_triggers_call(file, entry, event);
    1333             : 
    1334           0 :         if (test_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags) ||
    1335           0 :             (unlikely(file->flags & EVENT_FILE_FL_FILTERED) &&
    1336           0 :              !filter_match_preds(file->filter, entry))) {
    1337           0 :                 __trace_event_discard_commit(buffer, event);
    1338           0 :                 return true;
    1339             :         }
    1340             : 
    1341             :         return false;
    1342             : }
    1343             : 
    1344             : /**
    1345             :  * event_trigger_unlock_commit - handle triggers and finish event commit
    1346             :  * @file: The file pointer assoctiated to the event
    1347             :  * @buffer: The ring buffer that the event is being written to
    1348             :  * @event: The event meta data in the ring buffer
    1349             :  * @entry: The event itself
    1350             :  * @trace_ctx: The tracing context flags.
    1351             :  *
    1352             :  * This is a helper function to handle triggers that require data
    1353             :  * from the event itself. It also tests the event against filters and
    1354             :  * if the event is soft disabled and should be discarded.
    1355             :  */
    1356             : static inline void
    1357             : event_trigger_unlock_commit(struct trace_event_file *file,
    1358             :                             struct trace_buffer *buffer,
    1359             :                             struct ring_buffer_event *event,
    1360             :                             void *entry, unsigned int trace_ctx)
    1361             : {
    1362             :         enum event_trigger_type tt = ETT_NONE;
    1363             : 
    1364             :         if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
    1365             :                 trace_buffer_unlock_commit(file->tr, buffer, event, trace_ctx);
    1366             : 
    1367             :         if (tt)
    1368             :                 event_triggers_post_call(file, tt);
    1369             : }
    1370             : 
    1371             : /**
    1372             :  * event_trigger_unlock_commit_regs - handle triggers and finish event commit
    1373             :  * @file: The file pointer assoctiated to the event
    1374             :  * @buffer: The ring buffer that the event is being written to
    1375             :  * @event: The event meta data in the ring buffer
    1376             :  * @entry: The event itself
    1377             :  * @trace_ctx: The tracing context flags.
    1378             :  *
    1379             :  * This is a helper function to handle triggers that require data
    1380             :  * from the event itself. It also tests the event against filters and
    1381             :  * if the event is soft disabled and should be discarded.
    1382             :  *
    1383             :  * Same as event_trigger_unlock_commit() but calls
    1384             :  * trace_buffer_unlock_commit_regs() instead of trace_buffer_unlock_commit().
    1385             :  */
    1386             : static inline void
    1387           0 : event_trigger_unlock_commit_regs(struct trace_event_file *file,
    1388             :                                  struct trace_buffer *buffer,
    1389             :                                  struct ring_buffer_event *event,
    1390             :                                  void *entry, unsigned int trace_ctx,
    1391             :                                  struct pt_regs *regs)
    1392             : {
    1393           0 :         enum event_trigger_type tt = ETT_NONE;
    1394             : 
    1395           0 :         if (!__event_trigger_test_discard(file, buffer, event, entry, &tt))
    1396           0 :                 trace_buffer_unlock_commit_regs(file->tr, buffer, event,
    1397             :                                                 trace_ctx, regs);
    1398             : 
    1399           0 :         if (tt)
    1400           0 :                 event_triggers_post_call(file, tt);
    1401           0 : }
    1402             : 
    1403             : #define FILTER_PRED_INVALID     ((unsigned short)-1)
    1404             : #define FILTER_PRED_IS_RIGHT    (1 << 15)
    1405             : #define FILTER_PRED_FOLD        (1 << 15)
    1406             : 
    1407             : /*
    1408             :  * The max preds is the size of unsigned short with
    1409             :  * two flags at the MSBs. One bit is used for both the IS_RIGHT
    1410             :  * and FOLD flags. The other is reserved.
    1411             :  *
    1412             :  * 2^14 preds is way more than enough.
    1413             :  */
    1414             : #define MAX_FILTER_PRED         16384
    1415             : 
    1416             : struct filter_pred;
    1417             : struct regex;
    1418             : 
    1419             : typedef int (*filter_pred_fn_t) (struct filter_pred *pred, void *event);
    1420             : 
    1421             : typedef int (*regex_match_func)(char *str, struct regex *r, int len);
    1422             : 
    1423             : enum regex_type {
    1424             :         MATCH_FULL = 0,
    1425             :         MATCH_FRONT_ONLY,
    1426             :         MATCH_MIDDLE_ONLY,
    1427             :         MATCH_END_ONLY,
    1428             :         MATCH_GLOB,
    1429             :         MATCH_INDEX,
    1430             : };
    1431             : 
    1432             : struct regex {
    1433             :         char                    pattern[MAX_FILTER_STR_VAL];
    1434             :         int                     len;
    1435             :         int                     field_len;
    1436             :         regex_match_func        match;
    1437             : };
    1438             : 
    1439             : struct filter_pred {
    1440             :         filter_pred_fn_t        fn;
    1441             :         u64                     val;
    1442             :         struct regex            regex;
    1443             :         unsigned short          *ops;
    1444             :         struct ftrace_event_field *field;
    1445             :         int                     offset;
    1446             :         int                     not;
    1447             :         int                     op;
    1448             : };
    1449             : 
    1450           0 : static inline bool is_string_field(struct ftrace_event_field *field)
    1451             : {
    1452           0 :         return field->filter_type == FILTER_DYN_STRING ||
    1453             :                field->filter_type == FILTER_STATIC_STRING ||
    1454           0 :                field->filter_type == FILTER_PTR_STRING ||
    1455             :                field->filter_type == FILTER_COMM;
    1456             : }
    1457             : 
    1458             : static inline bool is_function_field(struct ftrace_event_field *field)
    1459             : {
    1460             :         return field->filter_type == FILTER_TRACE_FN;
    1461             : }
    1462             : 
    1463             : extern enum regex_type
    1464             : filter_parse_regex(char *buff, int len, char **search, int *not);
    1465             : extern void print_event_filter(struct trace_event_file *file,
    1466             :                                struct trace_seq *s);
    1467             : extern int apply_event_filter(struct trace_event_file *file,
    1468             :                               char *filter_string);
    1469             : extern int apply_subsystem_event_filter(struct trace_subsystem_dir *dir,
    1470             :                                         char *filter_string);
    1471             : extern void print_subsystem_event_filter(struct event_subsystem *system,
    1472             :                                          struct trace_seq *s);
    1473             : extern int filter_assign_type(const char *type);
    1474             : extern int create_event_filter(struct trace_array *tr,
    1475             :                                struct trace_event_call *call,
    1476             :                                char *filter_str, bool set_str,
    1477             :                                struct event_filter **filterp);
    1478             : extern void free_event_filter(struct event_filter *filter);
    1479             : 
    1480             : struct ftrace_event_field *
    1481             : trace_find_event_field(struct trace_event_call *call, char *name);
    1482             : 
    1483             : extern void trace_event_enable_cmd_record(bool enable);
    1484             : extern void trace_event_enable_tgid_record(bool enable);
    1485             : 
    1486             : extern int event_trace_init(void);
    1487             : extern int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr);
    1488             : extern int event_trace_del_tracer(struct trace_array *tr);
    1489             : extern void __trace_early_add_events(struct trace_array *tr);
    1490             : 
    1491             : extern struct trace_event_file *__find_event_file(struct trace_array *tr,
    1492             :                                                   const char *system,
    1493             :                                                   const char *event);
    1494             : extern struct trace_event_file *find_event_file(struct trace_array *tr,
    1495             :                                                 const char *system,
    1496             :                                                 const char *event);
    1497             : 
    1498           0 : static inline void *event_file_data(struct file *filp)
    1499             : {
    1500           0 :         return READ_ONCE(file_inode(filp)->i_private);
    1501             : }
    1502             : 
    1503             : extern struct mutex event_mutex;
    1504             : extern struct list_head ftrace_events;
    1505             : 
    1506             : extern const struct file_operations event_trigger_fops;
    1507             : extern const struct file_operations event_hist_fops;
    1508             : extern const struct file_operations event_hist_debug_fops;
    1509             : extern const struct file_operations event_inject_fops;
    1510             : 
    1511             : #ifdef CONFIG_HIST_TRIGGERS
    1512             : extern int register_trigger_hist_cmd(void);
    1513             : extern int register_trigger_hist_enable_disable_cmds(void);
    1514             : #else
    1515           1 : static inline int register_trigger_hist_cmd(void) { return 0; }
    1516           1 : static inline int register_trigger_hist_enable_disable_cmds(void) { return 0; }
    1517             : #endif
    1518             : 
    1519             : extern int register_trigger_cmds(void);
    1520             : extern void clear_event_triggers(struct trace_array *tr);
    1521             : 
    1522             : struct event_trigger_data {
    1523             :         unsigned long                   count;
    1524             :         int                             ref;
    1525             :         struct event_trigger_ops        *ops;
    1526             :         struct event_command            *cmd_ops;
    1527             :         struct event_filter __rcu       *filter;
    1528             :         char                            *filter_str;
    1529             :         void                            *private_data;
    1530             :         bool                            paused;
    1531             :         bool                            paused_tmp;
    1532             :         struct list_head                list;
    1533             :         char                            *name;
    1534             :         struct list_head                named_list;
    1535             :         struct event_trigger_data       *named_data;
    1536             : };
    1537             : 
    1538             : /* Avoid typos */
    1539             : #define ENABLE_EVENT_STR        "enable_event"
    1540             : #define DISABLE_EVENT_STR       "disable_event"
    1541             : #define ENABLE_HIST_STR         "enable_hist"
    1542             : #define DISABLE_HIST_STR        "disable_hist"
    1543             : 
    1544             : struct enable_trigger_data {
    1545             :         struct trace_event_file         *file;
    1546             :         bool                            enable;
    1547             :         bool                            hist;
    1548             : };
    1549             : 
    1550             : extern int event_enable_trigger_print(struct seq_file *m,
    1551             :                                       struct event_trigger_ops *ops,
    1552             :                                       struct event_trigger_data *data);
    1553             : extern void event_enable_trigger_free(struct event_trigger_ops *ops,
    1554             :                                       struct event_trigger_data *data);
    1555             : extern int event_enable_trigger_func(struct event_command *cmd_ops,
    1556             :                                      struct trace_event_file *file,
    1557             :                                      char *glob, char *cmd, char *param);
    1558             : extern int event_enable_register_trigger(char *glob,
    1559             :                                          struct event_trigger_ops *ops,
    1560             :                                          struct event_trigger_data *data,
    1561             :                                          struct trace_event_file *file);
    1562             : extern void event_enable_unregister_trigger(char *glob,
    1563             :                                             struct event_trigger_ops *ops,
    1564             :                                             struct event_trigger_data *test,
    1565             :                                             struct trace_event_file *file);
    1566             : extern void trigger_data_free(struct event_trigger_data *data);
    1567             : extern int event_trigger_init(struct event_trigger_ops *ops,
    1568             :                               struct event_trigger_data *data);
    1569             : extern int trace_event_trigger_enable_disable(struct trace_event_file *file,
    1570             :                                               int trigger_enable);
    1571             : extern void update_cond_flag(struct trace_event_file *file);
    1572             : extern int set_trigger_filter(char *filter_str,
    1573             :                               struct event_trigger_data *trigger_data,
    1574             :                               struct trace_event_file *file);
    1575             : extern struct event_trigger_data *find_named_trigger(const char *name);
    1576             : extern bool is_named_trigger(struct event_trigger_data *test);
    1577             : extern int save_named_trigger(const char *name,
    1578             :                               struct event_trigger_data *data);
    1579             : extern void del_named_trigger(struct event_trigger_data *data);
    1580             : extern void pause_named_trigger(struct event_trigger_data *data);
    1581             : extern void unpause_named_trigger(struct event_trigger_data *data);
    1582             : extern void set_named_trigger_data(struct event_trigger_data *data,
    1583             :                                    struct event_trigger_data *named_data);
    1584             : extern struct event_trigger_data *
    1585             : get_named_trigger_data(struct event_trigger_data *data);
    1586             : extern int register_event_command(struct event_command *cmd);
    1587             : extern int unregister_event_command(struct event_command *cmd);
    1588             : extern int register_trigger_hist_enable_disable_cmds(void);
    1589             : 
    1590             : /**
    1591             :  * struct event_trigger_ops - callbacks for trace event triggers
    1592             :  *
    1593             :  * The methods in this structure provide per-event trigger hooks for
    1594             :  * various trigger operations.
    1595             :  *
    1596             :  * All the methods below, except for @init() and @free(), must be
    1597             :  * implemented.
    1598             :  *
    1599             :  * @func: The trigger 'probe' function called when the triggering
    1600             :  *      event occurs.  The data passed into this callback is the data
    1601             :  *      that was supplied to the event_command @reg() function that
    1602             :  *      registered the trigger (see struct event_command) along with
    1603             :  *      the trace record, rec.
    1604             :  *
    1605             :  * @init: An optional initialization function called for the trigger
    1606             :  *      when the trigger is registered (via the event_command reg()
    1607             :  *      function).  This can be used to perform per-trigger
    1608             :  *      initialization such as incrementing a per-trigger reference
    1609             :  *      count, for instance.  This is usually implemented by the
    1610             :  *      generic utility function @event_trigger_init() (see
    1611             :  *      trace_event_triggers.c).
    1612             :  *
    1613             :  * @free: An optional de-initialization function called for the
    1614             :  *      trigger when the trigger is unregistered (via the
    1615             :  *      event_command @reg() function).  This can be used to perform
    1616             :  *      per-trigger de-initialization such as decrementing a
    1617             :  *      per-trigger reference count and freeing corresponding trigger
    1618             :  *      data, for instance.  This is usually implemented by the
    1619             :  *      generic utility function @event_trigger_free() (see
    1620             :  *      trace_event_triggers.c).
    1621             :  *
    1622             :  * @print: The callback function invoked to have the trigger print
    1623             :  *      itself.  This is usually implemented by a wrapper function
    1624             :  *      that calls the generic utility function @event_trigger_print()
    1625             :  *      (see trace_event_triggers.c).
    1626             :  */
    1627             : struct event_trigger_ops {
    1628             :         void                    (*func)(struct event_trigger_data *data,
    1629             :                                         void *rec,
    1630             :                                         struct ring_buffer_event *rbe);
    1631             :         int                     (*init)(struct event_trigger_ops *ops,
    1632             :                                         struct event_trigger_data *data);
    1633             :         void                    (*free)(struct event_trigger_ops *ops,
    1634             :                                         struct event_trigger_data *data);
    1635             :         int                     (*print)(struct seq_file *m,
    1636             :                                          struct event_trigger_ops *ops,
    1637             :                                          struct event_trigger_data *data);
    1638             : };
    1639             : 
    1640             : /**
    1641             :  * struct event_command - callbacks and data members for event commands
    1642             :  *
    1643             :  * Event commands are invoked by users by writing the command name
    1644             :  * into the 'trigger' file associated with a trace event.  The
    1645             :  * parameters associated with a specific invocation of an event
    1646             :  * command are used to create an event trigger instance, which is
    1647             :  * added to the list of trigger instances associated with that trace
    1648             :  * event.  When the event is hit, the set of triggers associated with
    1649             :  * that event is invoked.
    1650             :  *
    1651             :  * The data members in this structure provide per-event command data
    1652             :  * for various event commands.
    1653             :  *
    1654             :  * All the data members below, except for @post_trigger, must be set
    1655             :  * for each event command.
    1656             :  *
    1657             :  * @name: The unique name that identifies the event command.  This is
    1658             :  *      the name used when setting triggers via trigger files.
    1659             :  *
    1660             :  * @trigger_type: A unique id that identifies the event command
    1661             :  *      'type'.  This value has two purposes, the first to ensure that
    1662             :  *      only one trigger of the same type can be set at a given time
    1663             :  *      for a particular event e.g. it doesn't make sense to have both
    1664             :  *      a traceon and traceoff trigger attached to a single event at
    1665             :  *      the same time, so traceon and traceoff have the same type
    1666             :  *      though they have different names.  The @trigger_type value is
    1667             :  *      also used as a bit value for deferring the actual trigger
    1668             :  *      action until after the current event is finished.  Some
    1669             :  *      commands need to do this if they themselves log to the trace
    1670             :  *      buffer (see the @post_trigger() member below).  @trigger_type
    1671             :  *      values are defined by adding new values to the trigger_type
    1672             :  *      enum in include/linux/trace_events.h.
    1673             :  *
    1674             :  * @flags: See the enum event_command_flags below.
    1675             :  *
    1676             :  * All the methods below, except for @set_filter() and @unreg_all(),
    1677             :  * must be implemented.
    1678             :  *
    1679             :  * @func: The callback function responsible for parsing and
    1680             :  *      registering the trigger written to the 'trigger' file by the
    1681             :  *      user.  It allocates the trigger instance and registers it with
    1682             :  *      the appropriate trace event.  It makes use of the other
    1683             :  *      event_command callback functions to orchestrate this, and is
    1684             :  *      usually implemented by the generic utility function
    1685             :  *      @event_trigger_callback() (see trace_event_triggers.c).
    1686             :  *
    1687             :  * @reg: Adds the trigger to the list of triggers associated with the
    1688             :  *      event, and enables the event trigger itself, after
    1689             :  *      initializing it (via the event_trigger_ops @init() function).
    1690             :  *      This is also where commands can use the @trigger_type value to
    1691             :  *      make the decision as to whether or not multiple instances of
    1692             :  *      the trigger should be allowed.  This is usually implemented by
    1693             :  *      the generic utility function @register_trigger() (see
    1694             :  *      trace_event_triggers.c).
    1695             :  *
    1696             :  * @unreg: Removes the trigger from the list of triggers associated
    1697             :  *      with the event, and disables the event trigger itself, after
    1698             :  *      initializing it (via the event_trigger_ops @free() function).
    1699             :  *      This is usually implemented by the generic utility function
    1700             :  *      @unregister_trigger() (see trace_event_triggers.c).
    1701             :  *
    1702             :  * @unreg_all: An optional function called to remove all the triggers
    1703             :  *      from the list of triggers associated with the event.  Called
    1704             :  *      when a trigger file is opened in truncate mode.
    1705             :  *
    1706             :  * @set_filter: An optional function called to parse and set a filter
    1707             :  *      for the trigger.  If no @set_filter() method is set for the
    1708             :  *      event command, filters set by the user for the command will be
    1709             :  *      ignored.  This is usually implemented by the generic utility
    1710             :  *      function @set_trigger_filter() (see trace_event_triggers.c).
    1711             :  *
    1712             :  * @get_trigger_ops: The callback function invoked to retrieve the
    1713             :  *      event_trigger_ops implementation associated with the command.
    1714             :  */
    1715             : struct event_command {
    1716             :         struct list_head        list;
    1717             :         char                    *name;
    1718             :         enum event_trigger_type trigger_type;
    1719             :         int                     flags;
    1720             :         int                     (*func)(struct event_command *cmd_ops,
    1721             :                                         struct trace_event_file *file,
    1722             :                                         char *glob, char *cmd, char *params);
    1723             :         int                     (*reg)(char *glob,
    1724             :                                        struct event_trigger_ops *ops,
    1725             :                                        struct event_trigger_data *data,
    1726             :                                        struct trace_event_file *file);
    1727             :         void                    (*unreg)(char *glob,
    1728             :                                          struct event_trigger_ops *ops,
    1729             :                                          struct event_trigger_data *data,
    1730             :                                          struct trace_event_file *file);
    1731             :         void                    (*unreg_all)(struct trace_event_file *file);
    1732             :         int                     (*set_filter)(char *filter_str,
    1733             :                                               struct event_trigger_data *data,
    1734             :                                               struct trace_event_file *file);
    1735             :         struct event_trigger_ops *(*get_trigger_ops)(char *cmd, char *param);
    1736             : };
    1737             : 
    1738             : /**
    1739             :  * enum event_command_flags - flags for struct event_command
    1740             :  *
    1741             :  * @POST_TRIGGER: A flag that says whether or not this command needs
    1742             :  *      to have its action delayed until after the current event has
    1743             :  *      been closed.  Some triggers need to avoid being invoked while
    1744             :  *      an event is currently in the process of being logged, since
    1745             :  *      the trigger may itself log data into the trace buffer.  Thus
    1746             :  *      we make sure the current event is committed before invoking
    1747             :  *      those triggers.  To do that, the trigger invocation is split
    1748             :  *      in two - the first part checks the filter using the current
    1749             :  *      trace record; if a command has the @post_trigger flag set, it
    1750             :  *      sets a bit for itself in the return value, otherwise it
    1751             :  *      directly invokes the trigger.  Once all commands have been
    1752             :  *      either invoked or set their return flag, the current record is
    1753             :  *      either committed or discarded.  At that point, if any commands
    1754             :  *      have deferred their triggers, those commands are finally
    1755             :  *      invoked following the close of the current event.  In other
    1756             :  *      words, if the event_trigger_ops @func() probe implementation
    1757             :  *      itself logs to the trace buffer, this flag should be set,
    1758             :  *      otherwise it can be left unspecified.
    1759             :  *
    1760             :  * @NEEDS_REC: A flag that says whether or not this command needs
    1761             :  *      access to the trace record in order to perform its function,
    1762             :  *      regardless of whether or not it has a filter associated with
    1763             :  *      it (filters make a trigger require access to the trace record
    1764             :  *      but are not always present).
    1765             :  */
    1766             : enum event_command_flags {
    1767             :         EVENT_CMD_FL_POST_TRIGGER       = 1,
    1768             :         EVENT_CMD_FL_NEEDS_REC          = 2,
    1769             : };
    1770             : 
    1771           0 : static inline bool event_command_post_trigger(struct event_command *cmd_ops)
    1772             : {
    1773           0 :         return cmd_ops->flags & EVENT_CMD_FL_POST_TRIGGER;
    1774             : }
    1775             : 
    1776           0 : static inline bool event_command_needs_rec(struct event_command *cmd_ops)
    1777             : {
    1778           0 :         return cmd_ops->flags & EVENT_CMD_FL_NEEDS_REC;
    1779             : }
    1780             : 
    1781             : extern int trace_event_enable_disable(struct trace_event_file *file,
    1782             :                                       int enable, int soft_disable);
    1783             : extern int tracing_alloc_snapshot(void);
    1784             : extern void tracing_snapshot_cond(struct trace_array *tr, void *cond_data);
    1785             : extern int tracing_snapshot_cond_enable(struct trace_array *tr, void *cond_data, cond_update_fn_t update);
    1786             : 
    1787             : extern int tracing_snapshot_cond_disable(struct trace_array *tr);
    1788             : extern void *tracing_cond_snapshot_data(struct trace_array *tr);
    1789             : 
    1790             : extern const char *__start___trace_bprintk_fmt[];
    1791             : extern const char *__stop___trace_bprintk_fmt[];
    1792             : 
    1793             : extern const char *__start___tracepoint_str[];
    1794             : extern const char *__stop___tracepoint_str[];
    1795             : 
    1796             : void trace_printk_control(bool enabled);
    1797             : void trace_printk_start_comm(void);
    1798             : int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set);
    1799             : int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled);
    1800             : 
    1801             : /* Used from boot time tracer */
    1802             : extern int trace_set_options(struct trace_array *tr, char *option);
    1803             : extern int tracing_set_tracer(struct trace_array *tr, const char *buf);
    1804             : extern ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
    1805             :                                           unsigned long size, int cpu_id);
    1806             : extern int tracing_set_cpumask(struct trace_array *tr,
    1807             :                                 cpumask_var_t tracing_cpumask_new);
    1808             : 
    1809             : 
    1810             : #define MAX_EVENT_NAME_LEN      64
    1811             : 
    1812             : extern ssize_t trace_parse_run_command(struct file *file,
    1813             :                 const char __user *buffer, size_t count, loff_t *ppos,
    1814             :                 int (*createfn)(const char *));
    1815             : 
    1816             : extern unsigned int err_pos(char *cmd, const char *str);
    1817             : extern void tracing_log_err(struct trace_array *tr,
    1818             :                             const char *loc, const char *cmd,
    1819             :                             const char **errs, u8 type, u8 pos);
    1820             : 
    1821             : /*
    1822             :  * Normal trace_printk() and friends allocates special buffers
    1823             :  * to do the manipulation, as well as saves the print formats
    1824             :  * into sections to display. But the trace infrastructure wants
    1825             :  * to use these without the added overhead at the price of being
    1826             :  * a bit slower (used mainly for warnings, where we don't care
    1827             :  * about performance). The internal_trace_puts() is for such
    1828             :  * a purpose.
    1829             :  */
    1830             : #define internal_trace_puts(str) __trace_puts(_THIS_IP_, str, strlen(str))
    1831             : 
    1832             : #undef FTRACE_ENTRY
    1833             : #define FTRACE_ENTRY(call, struct_name, id, tstruct, print)     \
    1834             :         extern struct trace_event_call                                  \
    1835             :         __aligned(4) event_##call;
    1836             : #undef FTRACE_ENTRY_DUP
    1837             : #define FTRACE_ENTRY_DUP(call, struct_name, id, tstruct, print) \
    1838             :         FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print))
    1839             : #undef FTRACE_ENTRY_PACKED
    1840             : #define FTRACE_ENTRY_PACKED(call, struct_name, id, tstruct, print) \
    1841             :         FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print))
    1842             : 
    1843             : #include "trace_entries.h"
    1844             : 
    1845             : #if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_FUNCTION_TRACER)
    1846             : int perf_ftrace_event_register(struct trace_event_call *call,
    1847             :                                enum trace_reg type, void *data);
    1848             : #else
    1849             : #define perf_ftrace_event_register NULL
    1850             : #endif
    1851             : 
    1852             : #ifdef CONFIG_FTRACE_SYSCALLS
    1853             : void init_ftrace_syscalls(void);
    1854             : const char *get_syscall_name(int syscall);
    1855             : #else
    1856           1 : static inline void init_ftrace_syscalls(void) { }
    1857             : static inline const char *get_syscall_name(int syscall)
    1858             : {
    1859             :         return NULL;
    1860             : }
    1861             : #endif
    1862             : 
    1863             : #ifdef CONFIG_EVENT_TRACING
    1864             : void trace_event_init(void);
    1865             : void trace_event_eval_update(struct trace_eval_map **map, int len);
    1866             : /* Used from boot time tracer */
    1867             : extern int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
    1868             : extern int trigger_process_regex(struct trace_event_file *file, char *buff);
    1869             : #else
    1870             : static inline void __init trace_event_init(void) { }
    1871             : static inline void trace_event_eval_update(struct trace_eval_map **map, int len) { }
    1872             : #endif
    1873             : 
    1874             : #ifdef CONFIG_TRACER_SNAPSHOT
    1875             : void tracing_snapshot_instance(struct trace_array *tr);
    1876             : int tracing_alloc_snapshot_instance(struct trace_array *tr);
    1877             : #else
    1878             : static inline void tracing_snapshot_instance(struct trace_array *tr) { }
    1879             : static inline int tracing_alloc_snapshot_instance(struct trace_array *tr)
    1880             : {
    1881             :         return 0;
    1882             : }
    1883             : #endif
    1884             : 
    1885             : #ifdef CONFIG_PREEMPT_TRACER
    1886             : void tracer_preempt_on(unsigned long a0, unsigned long a1);
    1887             : void tracer_preempt_off(unsigned long a0, unsigned long a1);
    1888             : #else
    1889             : static inline void tracer_preempt_on(unsigned long a0, unsigned long a1) { }
    1890             : static inline void tracer_preempt_off(unsigned long a0, unsigned long a1) { }
    1891             : #endif
    1892             : #ifdef CONFIG_IRQSOFF_TRACER
    1893             : void tracer_hardirqs_on(unsigned long a0, unsigned long a1);
    1894             : void tracer_hardirqs_off(unsigned long a0, unsigned long a1);
    1895             : #else
    1896    12938081 : static inline void tracer_hardirqs_on(unsigned long a0, unsigned long a1) { }
    1897    12904352 : static inline void tracer_hardirqs_off(unsigned long a0, unsigned long a1) { }
    1898             : #endif
    1899             : 
    1900             : extern struct trace_iterator *tracepoint_print_iter;
    1901             : 
    1902             : /*
    1903             :  * Reset the state of the trace_iterator so that it can read consumed data.
    1904             :  * Normally, the trace_iterator is used for reading the data when it is not
    1905             :  * consumed, and must retain state.
    1906             :  */
    1907           0 : static __always_inline void trace_iterator_reset(struct trace_iterator *iter)
    1908             : {
    1909           0 :         const size_t offset = offsetof(struct trace_iterator, seq);
    1910             : 
    1911             :         /*
    1912             :          * Keep gcc from complaining about overwriting more than just one
    1913             :          * member in the structure.
    1914             :          */
    1915           0 :         memset((char *)iter + offset, 0, sizeof(struct trace_iterator) - offset);
    1916             : 
    1917           0 :         iter->pos = -1;
    1918             : }
    1919             : 
    1920             : /* Check the name is good for event/group/fields */
    1921             : static inline bool is_good_name(const char *name)
    1922             : {
    1923             :         if (!isalpha(*name) && *name != '_')
    1924             :                 return false;
    1925             :         while (*++name != '\0') {
    1926             :                 if (!isalpha(*name) && !isdigit(*name) && *name != '_')
    1927             :                         return false;
    1928             :         }
    1929             :         return true;
    1930             : }
    1931             : 
    1932             : #endif /* _LINUX_KERNEL_TRACE_H */

Generated by: LCOV version 1.14