aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/rtc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/rtc.h')
0 files changed, 0 insertions, 0 deletions
)' href='/cgit/cgit.cgi/litmus-rt-ext-res.git/commit/include/linux/trace_events.h?id=645df987f7c1740bb1ba783ab907001720a20cf7'>645df987f7c1
be74b73a5764
645df987f7c1

0f4fc29dd68d
2fc1b6f0d0a7
d3213e8fd4b0



645df987f7c1


2fc1b6f0d0a7


645df987f7c1

4449bf927b61
645df987f7c1
2acae0d5b0f7
3898fac1f488
5a2e39959511
645df987f7c1
ac01ce1410fc
6ea22486ba46

f71130de5c7f


892c505aac2b

f71130de5c7f
97f202515349






89ec0dee9eba
97f202515349


97f202515349

609a74045238
89ec0dee9eba

97f202515349






12883efb670c
97f202515349


6d158a813efc
112f38a7e36e
97f202515349
bc289ae98b75


ed5467da0e36




97f202515349


bc21b478425a
a63ce5b30685
4a9bd3f134de
97f202515349


97f202515349


ed5467da0e36
97f202515349

8be0709f10e3





97f202515349

a9a577638020


97f202515349





a9a577638020






9023c930902f

97f202515349








af0009fc16a4
19a7fe206232
f413cdb80ce0


7f1d2f821019
ccb469a198cf


7f1d2f821019
ccb469a198cf

97f202515349
d914ba37d714








97f202515349
892c505aac2b
1d6bae966e90
1f9963cbb028

2239291aeb03


37d739989208
2239291aeb03

ceec0b6fc7cd

466c81c45b65




489c75c3b333

37d739989208
2239291aeb03

2425bcb9240f
2239291aeb03
2425bcb9240f
acd388fd3af3
2239291aeb03



2425bcb9240f
ceec0b6fc7cd
2425bcb9240f

2e33af029556
2425bcb9240f
8f0820183056

2425bcb9240f
ceec0b6fc7cd
a1d0ce8213e9
3f795dcfc736
3fd40d1ee6a3

7f1d2f821019
3fd40d1ee6a3




3f795dcfc736
7f1d2f821019
3fd40d1ee6a3

3f795dcfc736
3fd40d1ee6a3
553552ce1796
553552ce1796
61c32659b12c
27b14b56af08
9b63776fa3ca
de7b2973903c
72cbbc899424
04a22fae4cbc
553552ce1796

ae63b31e4d0e




5d6ad960a71f
de7b2973903c
72cbbc899424
04a22fae4cbc
ae63b31e4d0e
553552ce1796
e870e9a1240b
61c32659b12c
27b14b56af08
9b63776fa3ca
de7b2973903c
72cbbc899424
04a22fae4cbc
553552ce1796

04a22fae4cbc

2425bcb9240f
a59fd6027218
2425bcb9240f
de7b2973903c




80decc70afc5
0c564a538aa9
1f9963cbb028
6d723736e472
69fd4f0eb2ec
57d01ad09721



5d6ad960a71f
57d01ad09721
f306cc82a93d
de7b2973903c
57d01ad09721
ae63b31e4d0e




e87c6bc3852b
d5b5f391d434
2425bcb9240f
d5b5f391d434
ae63b31e4d0e


e87c6bc3852b























de7b2973903c
687fcc4aee45
de7b2973903c






ae63b31e4d0e
7967b3e0c40f
ae63b31e4d0e

5d6ad960a71f

d914ba37d714
5d6ad960a71f





3fdaf80f4a83
065e63f95143
ae63b31e4d0e


5d6ad960a71f
57d01ad09721
ae63b31e4d0e
d914ba37d714
f306cc82a93d

417944c4c7a0


85f2b08268c0
bac5fb97a173
3fdaf80f4a83
065e63f95143
ae63b31e4d0e

5d6ad960a71f

d914ba37d714
5d6ad960a71f





3fdaf80f4a83
065e63f95143
ae63b31e4d0e

7f1d2f821019
ae63b31e4d0e
2425bcb9240f
f86f418059b9
ae63b31e4d0e

7967b3e0c40f
85f2b08268c0
97f202515349
553552ce1796

57d01ad09721

417944c4c7a0

85f2b08268c0
553552ce1796
417944c4c7a0


ae63b31e4d0e
1eaa4787a774

417944c4c7a0
553552ce1796
417944c4c7a0
1cf4c0732db3
85f2b08268c0
97f202515349

53cf810b1934


de7b2973903c
53cf810b1934



d5b5f391d434
2425bcb9240f
d5b5f391d434










97d5a22005f3
20ab4425a77a
16bb8eb1b73b
97f202515349
85f2b08268c0

2a2df3211588
93e31ffbf417
f21ecbb35f86
7862ad1846e9
7ef224d1d0e3
d0bad49bb0a0
85f2b08268c0

6fb2915df7f0
f306cc82a93d
1ac4f51c0eb5




c94e45bc38ae
97f202515349
3fdaf80f4a83

13a1e4aef53b
09a5059aa1a2
13a1e4aef53b







09a5059aa1a2
13a1e4aef53b


5d6ad960a71f

1ac4f51c0eb5
5d6ad960a71f
13a1e4aef53b
3fdaf80f4a83

13a1e4aef53b



098d2164e344
e87c6bc3852b


f4e2298e63d2
c4f6699dfcb8


41bdc4b40ed6


2541517c32be
e87c6bc3852b
2541517c32be


e87c6bc3852b








f4e2298e63d2




c4f6699dfcb8











41bdc4b40ed6






2541517c32be

43b51ead3f75



87a342f5db69
02aa3162edaa
e57cbaf0eb00

43b51ead3f75

2425bcb9240f

aeaeae1187d7

2425bcb9240f

32bbe0078afe
97f202515349
d2802d0739dc
97f202515349
4671c79408a3

97f202515349


















07b139c8c81b
6fb2915df7f0
c530665c31c0

9802d86585db
c530665c31c0
1c024eca51fd

a4eaf7f14675

e12f03d7031a


41bdc4b40ed6



e12f03d7031a
33ea4b24277b
a6ca88b241d5

33ea4b24277b
41bdc4b40ed6


33ea4b24277b
1c024eca51fd
6fb2915df7f0

1e1dcd93b468

430ad5a600a8
c4f6699dfcb8


























85b67bcb7e4a




430ad5a600a8
1e1dcd93b468
e6dab5ffab59
8fd0fbbe8888
430ad5a600a8
8fd0fbbe8888
430ad5a600a8
e87c6bc3852b
6fb2915df7f0

2425bcb9240f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
                                      
 

                            
 
                              
                            
                         
                          
                             
                             

                   
                    
              
              
                
 


                                                                              
 

                                                                                  
 
                       



                                                                             


                                                                          


                                                                                

                                                                           
 
                                                    
                                                                  
                                                  
 
                                                      
                                                              

                                                   


                      

                                                      
 






                                                                       
                                     


                                              

  
                                                                         

                                                                  






                                                               
                                              


                                         
                                              
                                           
 


                                                                       




                                                          


                                                  
                                            
                                         
                                         


                                    


                                    
                                                                

  





                                    

                                                                          


                                                                            





                                       






                                               

                                                             








                                                                             
                                                           
 


                                                            
                        


                                                                    
                                                                    

                                                             
 








                                                                               
 
                                                                               
 

                    


                             
                         

                                  

                             




                                                                               

                           
      

  
                        
 
                          
                                        



                                            
                                                                      
                                                                        

                                                                            
                                       
                                                                       

  
                                                          
                                                             
 
                           

                                                
                                                    




                                               
                                                                    
                                                                      

                                                     
                                                                   
 
      
                                    
                                   
                                         
                                         
                                      
                                  
                                  

  




                                                                  
                                                                              
                                         
                                     
                                     
   
      
                                                                             
                                                                            
                                                                                  
                                                                                  
                                                                               
                                                                           
                                                                           

  

                                                                              
                         
                                     
                                        




                                                                        
                                      
                                           
                                        
                                     
                                      



                                                                 
                                                                    
                                                           
                                                                       
                                                     
           




                                                                             
                                                    
 
                                                       
                                                  


      























                                                                              
                          
                                               






                                                        
                   
                           

      

                                       
                                        





                                        
                                     
                                      


  
                    
                                        
                                                                
                                                                

                                                                  


                                                                     
                                                                           
                                                                           
                                                                
                                                                             

      

                                                                                
                                                                                 





                                                                                 
                                                                              
                                                                               

  
                         
                                             
                                                    
                                                

                                             
                                                
                                                 
 

                        

                                                  

                                                                        
                                               
          


                                                                     
                                                                  

                                                                  
                                                   
           
                                      
                                                                         
                                                                            

  


                                                                         
                                                                         



                                                                         
                                                                         
                                                                        










                                                                         
                                    
 
                                                                           
 

                                      
                                           
                                           
                                           
                                           
                                           
                                           

  
                                                                      
 




                                                             
                                                     
 

                                                                      
   
                                                                      







                                                                   
                                                          


                                           

                                                        
                                                              
                                                         
                                    

                                                                 



                     
                        


                                                                                
                                                                             


                                                                               


                                                                         
     
                                                                                   


                 








                                                                           




                                                                        











                                                                                         






                                                                              

      



                             
                          
                        

                    

  

                                                                              

                                                                     

                                                                  
                                                                  
 
                                                        
 

                                                                        


















                                                                         
                         
                  

                                                 
                                          
 

                                                         

                                                                


                                                                         



                                                                  
      
                           

                                                                             
                                                          


                                                                             
      
                                                                             

                                                                 

                                                                        
 


























                                                                          




                                                                             
                  
                                                                   
                                                                   
                                                
 
                                                                           
 
 

      
                                 
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef _LINUX_TRACE_EVENT_H
#define _LINUX_TRACE_EVENT_H

#include <linux/ring_buffer.h>
#include <linux/trace_seq.h>
#include <linux/percpu.h>
#include <linux/hardirq.h>
#include <linux/perf_event.h>
#include <linux/tracepoint.h>

struct trace_array;
struct trace_buffer;
struct tracer;
struct dentry;
struct bpf_prog;

const char *trace_print_flags_seq(struct trace_seq *p, const char *delim,
				  unsigned long flags,
				  const struct trace_print_flags *flag_array);

const char *trace_print_symbols_seq(struct trace_seq *p, unsigned long val,
				    const struct trace_print_flags *symbol_array);

#if BITS_PER_LONG == 32
const char *trace_print_flags_seq_u64(struct trace_seq *p, const char *delim,
		      unsigned long long flags,
		      const struct trace_print_flags_u64 *flag_array);

const char *trace_print_symbols_seq_u64(struct trace_seq *p,
					unsigned long long val,
					const struct trace_print_flags_u64
								 *symbol_array);
#endif

const char *trace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
				    unsigned int bitmask_size);

const char *trace_print_hex_seq(struct trace_seq *p,
				const unsigned char *buf, int len,
				bool concatenate);

const char *trace_print_array_seq(struct trace_seq *p,
				   const void *buf, int count,
				   size_t el_size);

struct trace_iterator;
struct trace_event;

int trace_raw_output_prep(struct trace_iterator *iter,
			  struct trace_event *event);

/*
 * The trace entry - the most basic unit of tracing. This is what
 * is printed in the end as a single line in the trace output, such as:
 *
 *     bash-15816 [01]   235.197585: idle_cpu <- irq_enter
 */
struct trace_entry {
	unsigned short		type;
	unsigned char		flags;
	unsigned char		preempt_count;
	int			pid;
};

#define TRACE_EVENT_TYPE_MAX						\
	((1 << (sizeof(((struct trace_entry *)0)->type) * 8)) - 1)

/*
 * Trace iterator - used by printout routines who present trace
 * results to users and which routines might sleep, etc:
 */
struct trace_iterator {
	struct trace_array	*tr;
	struct tracer		*trace;
	struct trace_buffer	*trace_buffer;
	void			*private;
	int			cpu_file;
	struct mutex		mutex;
	struct ring_buffer_iter	**buffer_iter;
	unsigned long		iter_flags;

	/* trace_seq for __print_flags() and __print_symbolic() etc. */
	struct trace_seq	tmp_seq;

	cpumask_var_t		started;

	/* it's true when current open file is snapshot */
	bool			snapshot;

	/* The below is zeroed out in pipe_read */
	struct trace_seq	seq;
	struct trace_entry	*ent;
	unsigned long		lost_events;
	int			leftover;
	int			ent_size;
	int			cpu;
	u64			ts;

	loff_t			pos;
	long			idx;

	/* All new field here will be zeroed out in pipe_read */
};

enum trace_iter_flags {
	TRACE_FILE_LAT_FMT	= 1,
	TRACE_FILE_ANNOTATE	= 2,
	TRACE_FILE_TIME_IN_NS	= 4,
};


typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
				      int flags, struct trace_event *event);

struct trace_event_functions {
	trace_print_func	trace;
	trace_print_func	raw;
	trace_print_func	hex;
	trace_print_func	binary;
};

struct trace_event {
	struct hlist_node		node;
	struct list_head		list;
	int				type;
	struct trace_event_functions	*funcs;
};

extern int register_trace_event(struct trace_event *event);
extern int unregister_trace_event(struct trace_event *event);

/* Return values for print_line callback */
enum print_line_t {
	TRACE_TYPE_PARTIAL_LINE	= 0,	/* Retry after flushing the seq */
	TRACE_TYPE_HANDLED	= 1,
	TRACE_TYPE_UNHANDLED	= 2,	/* Relay to other output functions */
	TRACE_TYPE_NO_CONSUME	= 3	/* Handled but ask to not consume */
};

enum print_line_t trace_handle_return(struct trace_seq *s);

void tracing_generic_entry_update(struct trace_entry *entry,
				  unsigned long flags,
				  int pc);
struct trace_event_file;

struct ring_buffer_event *
trace_event_buffer_lock_reserve(struct ring_buffer **current_buffer,
				struct trace_event_file *trace_file,
				int type, unsigned long len,
				unsigned long flags, int pc);

#define TRACE_RECORD_CMDLINE	BIT(0)
#define TRACE_RECORD_TGID	BIT(1)

void tracing_record_taskinfo(struct task_struct *task, int flags);
void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
					  struct task_struct *next, int flags);

void tracing_record_cmdline(struct task_struct *task);
void tracing_record_tgid(struct task_struct *task);

int trace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...);

struct event_filter;

enum trace_reg {
	TRACE_REG_REGISTER,
	TRACE_REG_UNREGISTER,
#ifdef CONFIG_PERF_EVENTS
	TRACE_REG_PERF_REGISTER,
	TRACE_REG_PERF_UNREGISTER,
	TRACE_REG_PERF_OPEN,
	TRACE_REG_PERF_CLOSE,
	/*
	 * These (ADD/DEL) use a 'boolean' return value, where 1 (true) means a
	 * custom action was taken and the default action is not to be
	 * performed.
	 */
	TRACE_REG_PERF_ADD,
	TRACE_REG_PERF_DEL,
#endif
};

struct trace_event_call;

struct trace_event_class {
	const char		*system;
	void			*probe;
#ifdef CONFIG_PERF_EVENTS
	void			*perf_probe;
#endif
	int			(*reg)(struct trace_event_call *event,
				       enum trace_reg type, void *data);
	int			(*define_fields)(struct trace_event_call *);
	struct list_head	*(*get_fields)(struct trace_event_call *);
	struct list_head	fields;
	int			(*raw_init)(struct trace_event_call *);
};

extern int trace_event_reg(struct trace_event_call *event,
			    enum trace_reg type, void *data);

struct trace_event_buffer {
	struct ring_buffer		*buffer;
	struct ring_buffer_event	*event;
	struct trace_event_file		*trace_file;
	void				*entry;
	unsigned long			flags;
	int				pc;
};

void *trace_event_buffer_reserve(struct trace_event_buffer *fbuffer,
				  struct trace_event_file *trace_file,
				  unsigned long len);

void trace_event_buffer_commit(struct trace_event_buffer *fbuffer);

enum {
	TRACE_EVENT_FL_FILTERED_BIT,
	TRACE_EVENT_FL_CAP_ANY_BIT,
	TRACE_EVENT_FL_NO_SET_FILTER_BIT,
	TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
	TRACE_EVENT_FL_TRACEPOINT_BIT,
	TRACE_EVENT_FL_KPROBE_BIT,
	TRACE_EVENT_FL_UPROBE_BIT,
};

/*
 * Event flags:
 *  FILTERED	  - The event has a filter attached
 *  CAP_ANY	  - Any user can enable for perf
 *  NO_SET_FILTER - Set when filter has error and is to be ignored
 *  IGNORE_ENABLE - For trace internal events, do not enable with debugfs file
 *  TRACEPOINT    - Event is a tracepoint
 *  KPROBE        - Event is a kprobe
 *  UPROBE        - Event is a uprobe
 */
enum {
	TRACE_EVENT_FL_FILTERED		= (1 << TRACE_EVENT_FL_FILTERED_BIT),
	TRACE_EVENT_FL_CAP_ANY		= (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
	TRACE_EVENT_FL_NO_SET_FILTER	= (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
	TRACE_EVENT_FL_IGNORE_ENABLE	= (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
	TRACE_EVENT_FL_TRACEPOINT	= (1 << TRACE_EVENT_FL_TRACEPOINT_BIT),
	TRACE_EVENT_FL_KPROBE		= (1 << TRACE_EVENT_FL_KPROBE_BIT),
	TRACE_EVENT_FL_UPROBE		= (1 << TRACE_EVENT_FL_UPROBE_BIT),
};

#define TRACE_EVENT_FL_UKPROBE (TRACE_EVENT_FL_KPROBE | TRACE_EVENT_FL_UPROBE)

struct trace_event_call {
	struct list_head	list;
	struct trace_event_class *class;
	union {
		char			*name;
		/* Set TRACE_EVENT_FL_TRACEPOINT flag when using "tp" */
		struct tracepoint	*tp;
	};
	struct trace_event	event;
	char			*print_fmt;
	struct event_filter	*filter;
	void			*mod;
	void			*data;
	/*
	 *   bit 0:		filter_active
	 *   bit 1:		allow trace by non root (cap any)
	 *   bit 2:		failed to apply filter
	 *   bit 3:		trace internal event (do not enable)
	 *   bit 4:		Event was enabled by module
	 *   bit 5:		use call filter rather than file filter
	 *   bit 6:		Event is a tracepoint
	 */
	int			flags; /* static flags of different events */

#ifdef CONFIG_PERF_EVENTS
	int				perf_refcount;
	struct hlist_head __percpu	*perf_events;
	struct bpf_prog_array __rcu	*prog_array;

	int	(*perf_perm)(struct trace_event_call *,
			     struct perf_event *);
#endif
};

#ifdef CONFIG_PERF_EVENTS
static inline bool bpf_prog_array_valid(struct trace_event_call *call)
{
	/*
	 * This inline function checks whether call->prog_array
	 * is valid or not. The function is called in various places,
	 * outside rcu_read_lock/unlock, as a heuristic to speed up execution.
	 *
	 * If this function returns true, and later call->prog_array
	 * becomes false inside rcu_read_lock/unlock region,
	 * we bail out then. If this function return false,
	 * there is a risk that we might miss a few events if the checking
	 * were delayed until inside rcu_read_lock/unlock region and
	 * call->prog_array happened to become non-NULL then.
	 *
	 * Here, READ_ONCE() is used instead of rcu_access_pointer().
	 * rcu_access_pointer() requires the actual definition of
	 * "struct bpf_prog_array" while READ_ONCE() only needs
	 * a declaration of the same type.
	 */
	return !!READ_ONCE(call->prog_array);
}
#endif

static inline const char *
trace_event_name(struct trace_event_call *call)
{
	if (call->flags & TRACE_EVENT_FL_TRACEPOINT)
		return call->tp ? call->tp->name : NULL;
	else
		return call->name;
}

struct trace_array;
struct trace_subsystem_dir;

enum {
	EVENT_FILE_FL_ENABLED_BIT,
	EVENT_FILE_FL_RECORDED_CMD_BIT,
	EVENT_FILE_FL_RECORDED_TGID_BIT,
	EVENT_FILE_FL_FILTERED_BIT,
	EVENT_FILE_FL_NO_SET_FILTER_BIT,
	EVENT_FILE_FL_SOFT_MODE_BIT,
	EVENT_FILE_FL_SOFT_DISABLED_BIT,
	EVENT_FILE_FL_TRIGGER_MODE_BIT,
	EVENT_FILE_FL_TRIGGER_COND_BIT,
	EVENT_FILE_FL_PID_FILTER_BIT,
	EVENT_FILE_FL_WAS_ENABLED_BIT,
};

/*
 * Event file flags:
 *  ENABLED	  - The event is enabled
 *  RECORDED_CMD  - The comms should be recorded at sched_switch
 *  RECORDED_TGID - The tgids should be recorded at sched_switch
 *  FILTERED	  - The event has a filter attached
 *  NO_SET_FILTER - Set when filter has error and is to be ignored
 *  SOFT_MODE     - The event is enabled/disabled by SOFT_DISABLED
 *  SOFT_DISABLED - When set, do not trace the event (even though its
 *                   tracepoint may be enabled)
 *  TRIGGER_MODE  - When set, invoke the triggers associated with the event
 *  TRIGGER_COND  - When set, one or more triggers has an associated filter
 *  PID_FILTER    - When set, the event is filtered based on pid
 *  WAS_ENABLED   - Set when enabled to know to clear trace on module removal
 */
enum {
	EVENT_FILE_FL_ENABLED		= (1 << EVENT_FILE_FL_ENABLED_BIT),
	EVENT_FILE_FL_RECORDED_CMD	= (1 << EVENT_FILE_FL_RECORDED_CMD_BIT),
	EVENT_FILE_FL_RECORDED_TGID	= (1 << EVENT_FILE_FL_RECORDED_TGID_BIT),
	EVENT_FILE_FL_FILTERED		= (1 << EVENT_FILE_FL_FILTERED_BIT),
	EVENT_FILE_FL_NO_SET_FILTER	= (1 << EVENT_FILE_FL_NO_SET_FILTER_BIT),
	EVENT_FILE_FL_SOFT_MODE		= (1 << EVENT_FILE_FL_SOFT_MODE_BIT),
	EVENT_FILE_FL_SOFT_DISABLED	= (1 << EVENT_FILE_FL_SOFT_DISABLED_BIT),
	EVENT_FILE_FL_TRIGGER_MODE	= (1 << EVENT_FILE_FL_TRIGGER_MODE_BIT),
	EVENT_FILE_FL_TRIGGER_COND	= (1 << EVENT_FILE_FL_TRIGGER_COND_BIT),
	EVENT_FILE_FL_PID_FILTER	= (1 << EVENT_FILE_FL_PID_FILTER_BIT),
	EVENT_FILE_FL_WAS_ENABLED	= (1 << EVENT_FILE_FL_WAS_ENABLED_BIT),
};

struct trace_event_file {
	struct list_head		list;
	struct trace_event_call		*event_call;
	struct event_filter __rcu	*filter;
	struct dentry			*dir;
	struct trace_array		*tr;
	struct trace_subsystem_dir	*system;
	struct list_head		triggers;

	/*
	 * 32 bit flags:
	 *   bit 0:		enabled
	 *   bit 1:		enabled cmd record
	 *   bit 2:		enable/disable with the soft disable bit
	 *   bit 3:		soft disabled
	 *   bit 4:		trigger enabled
	 *
	 * Note: The bits must be set atomically to prevent races
	 * from other writers. Reads of flags do not need to be in
	 * sync as they occur in critical sections. But the way flags
	 * is currently used, these changes do not affect the code
	 * except that when a change is made, it may have a slight
	 * delay in propagating the changes to other CPUs due to
	 * caching and such. Which is mostly OK ;-)
	 */
	unsigned long		flags;
	atomic_t		sm_ref;	/* soft-mode reference counter */
	atomic_t		tm_ref;	/* trigger-mode reference counter */
};

#define __TRACE_EVENT_FLAGS(name, value)				\
	static int __init trace_init_flags_##name(void)			\
	{								\
		event_##name.flags |= value;				\
		return 0;						\
	}								\
	early_initcall(trace_init_flags_##name);

#define __TRACE_EVENT_PERF_PERM(name, expr...)				\
	static int perf_perm_##name(struct trace_event_call *tp_event, \
				    struct perf_event *p_event)		\
	{								\
		return ({ expr; });					\
	}								\
	static int __init trace_init_perf_perm_##name(void)		\
	{								\
		event_##name.perf_perm = &perf_perm_##name;		\
		return 0;						\
	}								\
	early_initcall(trace_init_perf_perm_##name);

#define PERF_MAX_TRACE_SIZE	2048

#define MAX_FILTER_STR_VAL	256	/* Should handle KSYM_SYMBOL_LEN */

enum event_trigger_type {
	ETT_NONE		= (0),
	ETT_TRACE_ONOFF		= (1 << 0),
	ETT_SNAPSHOT		= (1 << 1),
	ETT_STACKTRACE		= (1 << 2),
	ETT_EVENT_ENABLE	= (1 << 3),
	ETT_EVENT_HIST		= (1 << 4),
	ETT_HIST_ENABLE		= (1 << 5),
};

extern int filter_match_preds(struct event_filter *filter, void *rec);

extern enum event_trigger_type
event_triggers_call(struct trace_event_file *file, void *rec,
		    struct ring_buffer_event *event);
extern void
event_triggers_post_call(struct trace_event_file *file,
			 enum event_trigger_type tt);

bool trace_event_ignore_this_pid(struct trace_event_file *trace_file);

/**
 * trace_trigger_soft_disabled - do triggers and test if soft disabled