GNU Linux-libre 5.10.217-gnu1
[releases.git] / include / linux / trace_events.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef _LINUX_TRACE_EVENT_H
4 #define _LINUX_TRACE_EVENT_H
5
6 #include <linux/ring_buffer.h>
7 #include <linux/trace_seq.h>
8 #include <linux/percpu.h>
9 #include <linux/hardirq.h>
10 #include <linux/perf_event.h>
11 #include <linux/tracepoint.h>
12
13 struct trace_array;
14 struct array_buffer;
15 struct tracer;
16 struct dentry;
17 struct bpf_prog;
18
19 const char *trace_print_flags_seq(struct trace_seq *p, const char *delim,
20                                   unsigned long flags,
21                                   const struct trace_print_flags *flag_array);
22
23 const char *trace_print_symbols_seq(struct trace_seq *p, unsigned long val,
24                                     const struct trace_print_flags *symbol_array);
25
26 #if BITS_PER_LONG == 32
27 const char *trace_print_flags_seq_u64(struct trace_seq *p, const char *delim,
28                       unsigned long long flags,
29                       const struct trace_print_flags_u64 *flag_array);
30
31 const char *trace_print_symbols_seq_u64(struct trace_seq *p,
32                                         unsigned long long val,
33                                         const struct trace_print_flags_u64
34                                                                  *symbol_array);
35 #endif
36
37 const char *trace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
38                                     unsigned int bitmask_size);
39
40 const char *trace_print_hex_seq(struct trace_seq *p,
41                                 const unsigned char *buf, int len,
42                                 bool concatenate);
43
44 const char *trace_print_array_seq(struct trace_seq *p,
45                                    const void *buf, int count,
46                                    size_t el_size);
47
48 const char *
49 trace_print_hex_dump_seq(struct trace_seq *p, const char *prefix_str,
50                          int prefix_type, int rowsize, int groupsize,
51                          const void *buf, size_t len, bool ascii);
52
53 struct trace_iterator;
54 struct trace_event;
55
56 int trace_raw_output_prep(struct trace_iterator *iter,
57                           struct trace_event *event);
58 extern __printf(2, 3)
59 void trace_event_printf(struct trace_iterator *iter, const char *fmt, ...);
60
61 /*
62  * The trace entry - the most basic unit of tracing. This is what
63  * is printed in the end as a single line in the trace output, such as:
64  *
65  *     bash-15816 [01]   235.197585: idle_cpu <- irq_enter
66  */
67 struct trace_entry {
68         unsigned short          type;
69         unsigned char           flags;
70         unsigned char           preempt_count;
71         int                     pid;
72 };
73
74 #define TRACE_EVENT_TYPE_MAX                                            \
75         ((1 << (sizeof(((struct trace_entry *)0)->type) * 8)) - 1)
76
77 /*
78  * Trace iterator - used by printout routines who present trace
79  * results to users and which routines might sleep, etc:
80  */
81 struct trace_iterator {
82         struct trace_array      *tr;
83         struct tracer           *trace;
84         struct array_buffer     *array_buffer;
85         void                    *private;
86         int                     cpu_file;
87         struct mutex            mutex;
88         struct ring_buffer_iter **buffer_iter;
89         unsigned long           iter_flags;
90         void                    *temp;  /* temp holder */
91         unsigned int            temp_size;
92         char                    *fmt;   /* modified format holder */
93         unsigned int            fmt_size;
94
95         /* trace_seq for __print_flags() and __print_symbolic() etc. */
96         struct trace_seq        tmp_seq;
97
98         cpumask_var_t           started;
99
100         /* it's true when current open file is snapshot */
101         bool                    snapshot;
102
103         /* The below is zeroed out in pipe_read */
104         struct trace_seq        seq;
105         struct trace_entry      *ent;
106         unsigned long           lost_events;
107         int                     leftover;
108         int                     ent_size;
109         int                     cpu;
110         u64                     ts;
111
112         loff_t                  pos;
113         long                    idx;
114
115         /* All new field here will be zeroed out in pipe_read */
116 };
117
118 enum trace_iter_flags {
119         TRACE_FILE_LAT_FMT      = 1,
120         TRACE_FILE_ANNOTATE     = 2,
121         TRACE_FILE_TIME_IN_NS   = 4,
122 };
123
124
125 typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
126                                       int flags, struct trace_event *event);
127
128 struct trace_event_functions {
129         trace_print_func        trace;
130         trace_print_func        raw;
131         trace_print_func        hex;
132         trace_print_func        binary;
133 };
134
135 struct trace_event {
136         struct hlist_node               node;
137         struct list_head                list;
138         int                             type;
139         struct trace_event_functions    *funcs;
140 };
141
142 extern int register_trace_event(struct trace_event *event);
143 extern int unregister_trace_event(struct trace_event *event);
144
145 /* Return values for print_line callback */
146 enum print_line_t {
147         TRACE_TYPE_PARTIAL_LINE = 0,    /* Retry after flushing the seq */
148         TRACE_TYPE_HANDLED      = 1,
149         TRACE_TYPE_UNHANDLED    = 2,    /* Relay to other output functions */
150         TRACE_TYPE_NO_CONSUME   = 3     /* Handled but ask to not consume */
151 };
152
153 enum print_line_t trace_handle_return(struct trace_seq *s);
154
155 void tracing_generic_entry_update(struct trace_entry *entry,
156                                   unsigned short type,
157                                   unsigned long flags,
158                                   int pc);
159 struct trace_event_file;
160
161 struct ring_buffer_event *
162 trace_event_buffer_lock_reserve(struct trace_buffer **current_buffer,
163                                 struct trace_event_file *trace_file,
164                                 int type, unsigned long len,
165                                 unsigned long flags, int pc);
166
167 #define TRACE_RECORD_CMDLINE    BIT(0)
168 #define TRACE_RECORD_TGID       BIT(1)
169
170 void tracing_record_taskinfo(struct task_struct *task, int flags);
171 void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
172                                           struct task_struct *next, int flags);
173
174 void tracing_record_cmdline(struct task_struct *task);
175 void tracing_record_tgid(struct task_struct *task);
176
177 int trace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...);
178
179 struct event_filter;
180
181 enum trace_reg {
182         TRACE_REG_REGISTER,
183         TRACE_REG_UNREGISTER,
184 #ifdef CONFIG_PERF_EVENTS
185         TRACE_REG_PERF_REGISTER,
186         TRACE_REG_PERF_UNREGISTER,
187         TRACE_REG_PERF_OPEN,
188         TRACE_REG_PERF_CLOSE,
189         /*
190          * These (ADD/DEL) use a 'boolean' return value, where 1 (true) means a
191          * custom action was taken and the default action is not to be
192          * performed.
193          */
194         TRACE_REG_PERF_ADD,
195         TRACE_REG_PERF_DEL,
196 #endif
197 };
198
199 struct trace_event_call;
200
201 #define TRACE_FUNCTION_TYPE ((const char *)~0UL)
202
203 struct trace_event_fields {
204         const char *type;
205         union {
206                 struct {
207                         const char *name;
208                         const int  size;
209                         const int  align;
210                         const int  is_signed;
211                         const int  filter_type;
212                 };
213                 int (*define_fields)(struct trace_event_call *);
214         };
215 };
216
217 struct trace_event_class {
218         const char              *system;
219         void                    *probe;
220 #ifdef CONFIG_PERF_EVENTS
221         void                    *perf_probe;
222 #endif
223         int                     (*reg)(struct trace_event_call *event,
224                                        enum trace_reg type, void *data);
225         struct trace_event_fields *fields_array;
226         struct list_head        *(*get_fields)(struct trace_event_call *);
227         struct list_head        fields;
228         int                     (*raw_init)(struct trace_event_call *);
229 };
230
231 extern int trace_event_reg(struct trace_event_call *event,
232                             enum trace_reg type, void *data);
233
234 struct trace_event_buffer {
235         struct trace_buffer             *buffer;
236         struct ring_buffer_event        *event;
237         struct trace_event_file         *trace_file;
238         void                            *entry;
239         unsigned long                   flags;
240         int                             pc;
241         struct pt_regs                  *regs;
242 };
243
244 void *trace_event_buffer_reserve(struct trace_event_buffer *fbuffer,
245                                   struct trace_event_file *trace_file,
246                                   unsigned long len);
247
248 void trace_event_buffer_commit(struct trace_event_buffer *fbuffer);
249
250 enum {
251         TRACE_EVENT_FL_FILTERED_BIT,
252         TRACE_EVENT_FL_CAP_ANY_BIT,
253         TRACE_EVENT_FL_NO_SET_FILTER_BIT,
254         TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
255         TRACE_EVENT_FL_TRACEPOINT_BIT,
256         TRACE_EVENT_FL_KPROBE_BIT,
257         TRACE_EVENT_FL_UPROBE_BIT,
258 };
259
260 /*
261  * Event flags:
262  *  FILTERED      - The event has a filter attached
263  *  CAP_ANY       - Any user can enable for perf
264  *  NO_SET_FILTER - Set when filter has error and is to be ignored
265  *  IGNORE_ENABLE - For trace internal events, do not enable with debugfs file
266  *  TRACEPOINT    - Event is a tracepoint
267  *  KPROBE        - Event is a kprobe
268  *  UPROBE        - Event is a uprobe
269  */
270 enum {
271         TRACE_EVENT_FL_FILTERED         = (1 << TRACE_EVENT_FL_FILTERED_BIT),
272         TRACE_EVENT_FL_CAP_ANY          = (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
273         TRACE_EVENT_FL_NO_SET_FILTER    = (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
274         TRACE_EVENT_FL_IGNORE_ENABLE    = (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
275         TRACE_EVENT_FL_TRACEPOINT       = (1 << TRACE_EVENT_FL_TRACEPOINT_BIT),
276         TRACE_EVENT_FL_KPROBE           = (1 << TRACE_EVENT_FL_KPROBE_BIT),
277         TRACE_EVENT_FL_UPROBE           = (1 << TRACE_EVENT_FL_UPROBE_BIT),
278 };
279
280 #define TRACE_EVENT_FL_UKPROBE (TRACE_EVENT_FL_KPROBE | TRACE_EVENT_FL_UPROBE)
281
282 struct trace_event_call {
283         struct list_head        list;
284         struct trace_event_class *class;
285         union {
286                 char                    *name;
287                 /* Set TRACE_EVENT_FL_TRACEPOINT flag when using "tp" */
288                 struct tracepoint       *tp;
289         };
290         struct trace_event      event;
291         char                    *print_fmt;
292         struct event_filter     *filter;
293         void                    *mod;
294         void                    *data;
295         /*
296          *   bit 0:             filter_active
297          *   bit 1:             allow trace by non root (cap any)
298          *   bit 2:             failed to apply filter
299          *   bit 3:             trace internal event (do not enable)
300          *   bit 4:             Event was enabled by module
301          *   bit 5:             use call filter rather than file filter
302          *   bit 6:             Event is a tracepoint
303          */
304         int                     flags; /* static flags of different events */
305
306 #ifdef CONFIG_PERF_EVENTS
307         int                             perf_refcount;
308         struct hlist_head __percpu      *perf_events;
309         struct bpf_prog_array __rcu     *prog_array;
310
311         int     (*perf_perm)(struct trace_event_call *,
312                              struct perf_event *);
313 #endif
314 };
315
316 #ifdef CONFIG_PERF_EVENTS
317 static inline bool bpf_prog_array_valid(struct trace_event_call *call)
318 {
319         /*
320          * This inline function checks whether call->prog_array
321          * is valid or not. The function is called in various places,
322          * outside rcu_read_lock/unlock, as a heuristic to speed up execution.
323          *
324          * If this function returns true, and later call->prog_array
325          * becomes false inside rcu_read_lock/unlock region,
326          * we bail out then. If this function return false,
327          * there is a risk that we might miss a few events if the checking
328          * were delayed until inside rcu_read_lock/unlock region and
329          * call->prog_array happened to become non-NULL then.
330          *
331          * Here, READ_ONCE() is used instead of rcu_access_pointer().
332          * rcu_access_pointer() requires the actual definition of
333          * "struct bpf_prog_array" while READ_ONCE() only needs
334          * a declaration of the same type.
335          */
336         return !!READ_ONCE(call->prog_array);
337 }
338 #endif
339
340 static inline const char *
341 trace_event_name(struct trace_event_call *call)
342 {
343         if (call->flags & TRACE_EVENT_FL_TRACEPOINT)
344                 return call->tp ? call->tp->name : NULL;
345         else
346                 return call->name;
347 }
348
349 static inline struct list_head *
350 trace_get_fields(struct trace_event_call *event_call)
351 {
352         if (!event_call->class->get_fields)
353                 return &event_call->class->fields;
354         return event_call->class->get_fields(event_call);
355 }
356
357 struct trace_array;
358 struct trace_subsystem_dir;
359
360 enum {
361         EVENT_FILE_FL_ENABLED_BIT,
362         EVENT_FILE_FL_RECORDED_CMD_BIT,
363         EVENT_FILE_FL_RECORDED_TGID_BIT,
364         EVENT_FILE_FL_FILTERED_BIT,
365         EVENT_FILE_FL_NO_SET_FILTER_BIT,
366         EVENT_FILE_FL_SOFT_MODE_BIT,
367         EVENT_FILE_FL_SOFT_DISABLED_BIT,
368         EVENT_FILE_FL_TRIGGER_MODE_BIT,
369         EVENT_FILE_FL_TRIGGER_COND_BIT,
370         EVENT_FILE_FL_PID_FILTER_BIT,
371         EVENT_FILE_FL_WAS_ENABLED_BIT,
372         EVENT_FILE_FL_FREED_BIT,
373 };
374
375 extern struct trace_event_file *trace_get_event_file(const char *instance,
376                                                      const char *system,
377                                                      const char *event);
378 extern void trace_put_event_file(struct trace_event_file *file);
379
380 #define MAX_DYNEVENT_CMD_LEN    (2048)
381
382 enum dynevent_type {
383         DYNEVENT_TYPE_SYNTH = 1,
384         DYNEVENT_TYPE_KPROBE,
385         DYNEVENT_TYPE_NONE,
386 };
387
388 struct dynevent_cmd;
389
390 typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *cmd);
391
392 struct dynevent_cmd {
393         struct seq_buf          seq;
394         const char              *event_name;
395         unsigned int            n_fields;
396         enum dynevent_type      type;
397         dynevent_create_fn_t    run_command;
398         void                    *private_data;
399 };
400
401 extern int dynevent_create(struct dynevent_cmd *cmd);
402
403 extern int synth_event_delete(const char *name);
404
405 extern void synth_event_cmd_init(struct dynevent_cmd *cmd,
406                                  char *buf, int maxlen);
407
408 extern int __synth_event_gen_cmd_start(struct dynevent_cmd *cmd,
409                                        const char *name,
410                                        struct module *mod, ...);
411
412 #define synth_event_gen_cmd_start(cmd, name, mod, ...)  \
413         __synth_event_gen_cmd_start(cmd, name, mod, ## __VA_ARGS__, NULL)
414
415 struct synth_field_desc {
416         const char *type;
417         const char *name;
418 };
419
420 extern int synth_event_gen_cmd_array_start(struct dynevent_cmd *cmd,
421                                            const char *name,
422                                            struct module *mod,
423                                            struct synth_field_desc *fields,
424                                            unsigned int n_fields);
425 extern int synth_event_create(const char *name,
426                               struct synth_field_desc *fields,
427                               unsigned int n_fields, struct module *mod);
428
429 extern int synth_event_add_field(struct dynevent_cmd *cmd,
430                                  const char *type,
431                                  const char *name);
432 extern int synth_event_add_field_str(struct dynevent_cmd *cmd,
433                                      const char *type_name);
434 extern int synth_event_add_fields(struct dynevent_cmd *cmd,
435                                   struct synth_field_desc *fields,
436                                   unsigned int n_fields);
437
438 #define synth_event_gen_cmd_end(cmd)    \
439         dynevent_create(cmd)
440
441 struct synth_event;
442
443 struct synth_event_trace_state {
444         struct trace_event_buffer fbuffer;
445         struct synth_trace_event *entry;
446         struct trace_buffer *buffer;
447         struct synth_event *event;
448         unsigned int cur_field;
449         unsigned int n_u64;
450         bool disabled;
451         bool add_next;
452         bool add_name;
453 };
454
455 extern int synth_event_trace(struct trace_event_file *file,
456                              unsigned int n_vals, ...);
457 extern int synth_event_trace_array(struct trace_event_file *file, u64 *vals,
458                                    unsigned int n_vals);
459 extern int synth_event_trace_start(struct trace_event_file *file,
460                                    struct synth_event_trace_state *trace_state);
461 extern int synth_event_add_next_val(u64 val,
462                                     struct synth_event_trace_state *trace_state);
463 extern int synth_event_add_val(const char *field_name, u64 val,
464                                struct synth_event_trace_state *trace_state);
465 extern int synth_event_trace_end(struct synth_event_trace_state *trace_state);
466
467 extern int kprobe_event_delete(const char *name);
468
469 extern void kprobe_event_cmd_init(struct dynevent_cmd *cmd,
470                                   char *buf, int maxlen);
471
472 #define kprobe_event_gen_cmd_start(cmd, name, loc, ...)                 \
473         __kprobe_event_gen_cmd_start(cmd, false, name, loc, ## __VA_ARGS__, NULL)
474
475 #define kretprobe_event_gen_cmd_start(cmd, name, loc, ...)              \
476         __kprobe_event_gen_cmd_start(cmd, true, name, loc, ## __VA_ARGS__, NULL)
477
478 extern int __kprobe_event_gen_cmd_start(struct dynevent_cmd *cmd,
479                                         bool kretprobe,
480                                         const char *name,
481                                         const char *loc, ...);
482
483 #define kprobe_event_add_fields(cmd, ...)       \
484         __kprobe_event_add_fields(cmd, ## __VA_ARGS__, NULL)
485
486 #define kprobe_event_add_field(cmd, field)      \
487         __kprobe_event_add_fields(cmd, field, NULL)
488
489 extern int __kprobe_event_add_fields(struct dynevent_cmd *cmd, ...);
490
491 #define kprobe_event_gen_cmd_end(cmd)           \
492         dynevent_create(cmd)
493
494 #define kretprobe_event_gen_cmd_end(cmd)        \
495         dynevent_create(cmd)
496
497 /*
498  * Event file flags:
499  *  ENABLED       - The event is enabled
500  *  RECORDED_CMD  - The comms should be recorded at sched_switch
501  *  RECORDED_TGID - The tgids should be recorded at sched_switch
502  *  FILTERED      - The event has a filter attached
503  *  NO_SET_FILTER - Set when filter has error and is to be ignored
504  *  SOFT_MODE     - The event is enabled/disabled by SOFT_DISABLED
505  *  SOFT_DISABLED - When set, do not trace the event (even though its
506  *                   tracepoint may be enabled)
507  *  TRIGGER_MODE  - When set, invoke the triggers associated with the event
508  *  TRIGGER_COND  - When set, one or more triggers has an associated filter
509  *  PID_FILTER    - When set, the event is filtered based on pid
510  *  WAS_ENABLED   - Set when enabled to know to clear trace on module removal
511  *  FREED         - File descriptor is freed, all fields should be considered invalid
512  */
513 enum {
514         EVENT_FILE_FL_ENABLED           = (1 << EVENT_FILE_FL_ENABLED_BIT),
515         EVENT_FILE_FL_RECORDED_CMD      = (1 << EVENT_FILE_FL_RECORDED_CMD_BIT),
516         EVENT_FILE_FL_RECORDED_TGID     = (1 << EVENT_FILE_FL_RECORDED_TGID_BIT),
517         EVENT_FILE_FL_FILTERED          = (1 << EVENT_FILE_FL_FILTERED_BIT),
518         EVENT_FILE_FL_NO_SET_FILTER     = (1 << EVENT_FILE_FL_NO_SET_FILTER_BIT),
519         EVENT_FILE_FL_SOFT_MODE         = (1 << EVENT_FILE_FL_SOFT_MODE_BIT),
520         EVENT_FILE_FL_SOFT_DISABLED     = (1 << EVENT_FILE_FL_SOFT_DISABLED_BIT),
521         EVENT_FILE_FL_TRIGGER_MODE      = (1 << EVENT_FILE_FL_TRIGGER_MODE_BIT),
522         EVENT_FILE_FL_TRIGGER_COND      = (1 << EVENT_FILE_FL_TRIGGER_COND_BIT),
523         EVENT_FILE_FL_PID_FILTER        = (1 << EVENT_FILE_FL_PID_FILTER_BIT),
524         EVENT_FILE_FL_WAS_ENABLED       = (1 << EVENT_FILE_FL_WAS_ENABLED_BIT),
525         EVENT_FILE_FL_FREED             = (1 << EVENT_FILE_FL_FREED_BIT),
526 };
527
528 struct trace_event_file {
529         struct list_head                list;
530         struct trace_event_call         *event_call;
531         struct event_filter __rcu       *filter;
532         struct dentry                   *dir;
533         struct trace_array              *tr;
534         struct trace_subsystem_dir      *system;
535         struct list_head                triggers;
536
537         /*
538          * 32 bit flags:
539          *   bit 0:             enabled
540          *   bit 1:             enabled cmd record
541          *   bit 2:             enable/disable with the soft disable bit
542          *   bit 3:             soft disabled
543          *   bit 4:             trigger enabled
544          *
545          * Note: The bits must be set atomically to prevent races
546          * from other writers. Reads of flags do not need to be in
547          * sync as they occur in critical sections. But the way flags
548          * is currently used, these changes do not affect the code
549          * except that when a change is made, it may have a slight
550          * delay in propagating the changes to other CPUs due to
551          * caching and such. Which is mostly OK ;-)
552          */
553         unsigned long           flags;
554         atomic_t                ref;    /* ref count for opened files */
555         atomic_t                sm_ref; /* soft-mode reference counter */
556         atomic_t                tm_ref; /* trigger-mode reference counter */
557 };
558
559 #define __TRACE_EVENT_FLAGS(name, value)                                \
560         static int __init trace_init_flags_##name(void)                 \
561         {                                                               \
562                 event_##name.flags |= value;                            \
563                 return 0;                                               \
564         }                                                               \
565         early_initcall(trace_init_flags_##name);
566
567 #define __TRACE_EVENT_PERF_PERM(name, expr...)                          \
568         static int perf_perm_##name(struct trace_event_call *tp_event, \
569                                     struct perf_event *p_event)         \
570         {                                                               \
571                 return ({ expr; });                                     \
572         }                                                               \
573         static int __init trace_init_perf_perm_##name(void)             \
574         {                                                               \
575                 event_##name.perf_perm = &perf_perm_##name;             \
576                 return 0;                                               \
577         }                                                               \
578         early_initcall(trace_init_perf_perm_##name);
579
580 #define PERF_MAX_TRACE_SIZE     8192
581
582 #define MAX_FILTER_STR_VAL      256U    /* Should handle KSYM_SYMBOL_LEN */
583
584 enum event_trigger_type {
585         ETT_NONE                = (0),
586         ETT_TRACE_ONOFF         = (1 << 0),
587         ETT_SNAPSHOT            = (1 << 1),
588         ETT_STACKTRACE          = (1 << 2),
589         ETT_EVENT_ENABLE        = (1 << 3),
590         ETT_EVENT_HIST          = (1 << 4),
591         ETT_HIST_ENABLE         = (1 << 5),
592 };
593
594 extern int filter_match_preds(struct event_filter *filter, void *rec);
595
596 extern enum event_trigger_type
597 event_triggers_call(struct trace_event_file *file, void *rec,
598                     struct ring_buffer_event *event);
599 extern void
600 event_triggers_post_call(struct trace_event_file *file,
601                          enum event_trigger_type tt);
602
603 bool trace_event_ignore_this_pid(struct trace_event_file *trace_file);
604
605 /**
606  * trace_trigger_soft_disabled - do triggers and test if soft disabled
607  * @file: The file pointer of the event to test
608  *
609  * If any triggers without filters are attached to this event, they
610  * will be called here. If the event is soft disabled and has no
611  * triggers that require testing the fields, it will return true,
612  * otherwise false.
613  */
614 static inline bool
615 trace_trigger_soft_disabled(struct trace_event_file *file)
616 {
617         unsigned long eflags = file->flags;
618
619         if (!(eflags & EVENT_FILE_FL_TRIGGER_COND)) {
620                 if (eflags & EVENT_FILE_FL_TRIGGER_MODE)
621                         event_triggers_call(file, NULL, NULL);
622                 if (eflags & EVENT_FILE_FL_SOFT_DISABLED)
623                         return true;
624                 if (eflags & EVENT_FILE_FL_PID_FILTER)
625                         return trace_event_ignore_this_pid(file);
626         }
627         return false;
628 }
629
630 #ifdef CONFIG_BPF_EVENTS
631 unsigned int trace_call_bpf(struct trace_event_call *call, void *ctx);
632 int perf_event_attach_bpf_prog(struct perf_event *event, struct bpf_prog *prog);
633 void perf_event_detach_bpf_prog(struct perf_event *event);
634 int perf_event_query_prog_array(struct perf_event *event, void __user *info);
635 int bpf_probe_register(struct bpf_raw_event_map *btp, struct bpf_prog *prog);
636 int bpf_probe_unregister(struct bpf_raw_event_map *btp, struct bpf_prog *prog);
637 struct bpf_raw_event_map *bpf_get_raw_tracepoint(const char *name);
638 void bpf_put_raw_tracepoint(struct bpf_raw_event_map *btp);
639 int bpf_get_perf_event_info(const struct perf_event *event, u32 *prog_id,
640                             u32 *fd_type, const char **buf,
641                             u64 *probe_offset, u64 *probe_addr);
642 #else
643 static inline unsigned int trace_call_bpf(struct trace_event_call *call, void *ctx)
644 {
645         return 1;
646 }
647
648 static inline int
649 perf_event_attach_bpf_prog(struct perf_event *event, struct bpf_prog *prog)
650 {
651         return -EOPNOTSUPP;
652 }
653
654 static inline void perf_event_detach_bpf_prog(struct perf_event *event) { }
655
656 static inline int
657 perf_event_query_prog_array(struct perf_event *event, void __user *info)
658 {
659         return -EOPNOTSUPP;
660 }
661 static inline int bpf_probe_register(struct bpf_raw_event_map *btp, struct bpf_prog *p)
662 {
663         return -EOPNOTSUPP;
664 }
665 static inline int bpf_probe_unregister(struct bpf_raw_event_map *btp, struct bpf_prog *p)
666 {
667         return -EOPNOTSUPP;
668 }
669 static inline struct bpf_raw_event_map *bpf_get_raw_tracepoint(const char *name)
670 {
671         return NULL;
672 }
673 static inline void bpf_put_raw_tracepoint(struct bpf_raw_event_map *btp)
674 {
675 }
676 static inline int bpf_get_perf_event_info(const struct perf_event *event,
677                                           u32 *prog_id, u32 *fd_type,
678                                           const char **buf, u64 *probe_offset,
679                                           u64 *probe_addr)
680 {
681         return -EOPNOTSUPP;
682 }
683 #endif
684
685 enum {
686         FILTER_OTHER = 0,
687         FILTER_STATIC_STRING,
688         FILTER_DYN_STRING,
689         FILTER_PTR_STRING,
690         FILTER_TRACE_FN,
691         FILTER_COMM,
692         FILTER_CPU,
693 };
694
695 extern int trace_event_raw_init(struct trace_event_call *call);
696 extern int trace_define_field(struct trace_event_call *call, const char *type,
697                               const char *name, int offset, int size,
698                               int is_signed, int filter_type);
699 extern int trace_add_event_call(struct trace_event_call *call);
700 extern int trace_remove_event_call(struct trace_event_call *call);
701 extern int trace_event_get_offsets(struct trace_event_call *call);
702
703 #define is_signed_type(type)    (((type)(-1)) < (type)1)
704
705 int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set);
706 int trace_set_clr_event(const char *system, const char *event, int set);
707 int trace_array_set_clr_event(struct trace_array *tr, const char *system,
708                 const char *event, bool enable);
709 /*
710  * The double __builtin_constant_p is because gcc will give us an error
711  * if we try to allocate the static variable to fmt if it is not a
712  * constant. Even with the outer if statement optimizing out.
713  */
714 #define event_trace_printk(ip, fmt, args...)                            \
715 do {                                                                    \
716         __trace_printk_check_format(fmt, ##args);                       \
717         tracing_record_cmdline(current);                                \
718         if (__builtin_constant_p(fmt)) {                                \
719                 static const char *trace_printk_fmt                     \
720                   __section("__trace_printk_fmt") =                     \
721                         __builtin_constant_p(fmt) ? fmt : NULL;         \
722                                                                         \
723                 __trace_bprintk(ip, trace_printk_fmt, ##args);          \
724         } else                                                          \
725                 __trace_printk(ip, fmt, ##args);                        \
726 } while (0)
727
728 #ifdef CONFIG_PERF_EVENTS
729 struct perf_event;
730
731 DECLARE_PER_CPU(struct pt_regs, perf_trace_regs);
732 DECLARE_PER_CPU(int, bpf_kprobe_override);
733
734 extern int  perf_trace_init(struct perf_event *event);
735 extern void perf_trace_destroy(struct perf_event *event);
736 extern int  perf_trace_add(struct perf_event *event, int flags);
737 extern void perf_trace_del(struct perf_event *event, int flags);
738 #ifdef CONFIG_KPROBE_EVENTS
739 extern int  perf_kprobe_init(struct perf_event *event, bool is_retprobe);
740 extern void perf_kprobe_destroy(struct perf_event *event);
741 extern int bpf_get_kprobe_info(const struct perf_event *event,
742                                u32 *fd_type, const char **symbol,
743                                u64 *probe_offset, u64 *probe_addr,
744                                bool perf_type_tracepoint);
745 #endif
746 #ifdef CONFIG_UPROBE_EVENTS
747 extern int  perf_uprobe_init(struct perf_event *event,
748                              unsigned long ref_ctr_offset, bool is_retprobe);
749 extern void perf_uprobe_destroy(struct perf_event *event);
750 extern int bpf_get_uprobe_info(const struct perf_event *event,
751                                u32 *fd_type, const char **filename,
752                                u64 *probe_offset, u64 *probe_addr,
753                                bool perf_type_tracepoint);
754 #endif
755 extern int  ftrace_profile_set_filter(struct perf_event *event, int event_id,
756                                      char *filter_str);
757 extern void ftrace_profile_free_filter(struct perf_event *event);
758 void perf_trace_buf_update(void *record, u16 type);
759 void *perf_trace_buf_alloc(int size, struct pt_regs **regs, int *rctxp);
760
761 void bpf_trace_run1(struct bpf_prog *prog, u64 arg1);
762 void bpf_trace_run2(struct bpf_prog *prog, u64 arg1, u64 arg2);
763 void bpf_trace_run3(struct bpf_prog *prog, u64 arg1, u64 arg2,
764                     u64 arg3);
765 void bpf_trace_run4(struct bpf_prog *prog, u64 arg1, u64 arg2,
766                     u64 arg3, u64 arg4);
767 void bpf_trace_run5(struct bpf_prog *prog, u64 arg1, u64 arg2,
768                     u64 arg3, u64 arg4, u64 arg5);
769 void bpf_trace_run6(struct bpf_prog *prog, u64 arg1, u64 arg2,
770                     u64 arg3, u64 arg4, u64 arg5, u64 arg6);
771 void bpf_trace_run7(struct bpf_prog *prog, u64 arg1, u64 arg2,
772                     u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7);
773 void bpf_trace_run8(struct bpf_prog *prog, u64 arg1, u64 arg2,
774                     u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7,
775                     u64 arg8);
776 void bpf_trace_run9(struct bpf_prog *prog, u64 arg1, u64 arg2,
777                     u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7,
778                     u64 arg8, u64 arg9);
779 void bpf_trace_run10(struct bpf_prog *prog, u64 arg1, u64 arg2,
780                      u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7,
781                      u64 arg8, u64 arg9, u64 arg10);
782 void bpf_trace_run11(struct bpf_prog *prog, u64 arg1, u64 arg2,
783                      u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7,
784                      u64 arg8, u64 arg9, u64 arg10, u64 arg11);
785 void bpf_trace_run12(struct bpf_prog *prog, u64 arg1, u64 arg2,
786                      u64 arg3, u64 arg4, u64 arg5, u64 arg6, u64 arg7,
787                      u64 arg8, u64 arg9, u64 arg10, u64 arg11, u64 arg12);
788 void perf_trace_run_bpf_submit(void *raw_data, int size, int rctx,
789                                struct trace_event_call *call, u64 count,
790                                struct pt_regs *regs, struct hlist_head *head,
791                                struct task_struct *task);
792
793 static inline void
794 perf_trace_buf_submit(void *raw_data, int size, int rctx, u16 type,
795                        u64 count, struct pt_regs *regs, void *head,
796                        struct task_struct *task)
797 {
798         perf_tp_event(type, count, raw_data, size, regs, head, rctx, task);
799 }
800
801 #endif
802
803 #endif /* _LINUX_TRACE_EVENT_H */