1  /* SPDX-License-Identifier: GPL-2.0 */
2  
3  /* Stage 3 definitions for creating trace events */
4  
5  #undef __entry
6  #define __entry field
7  
8  #undef TP_printk
9  #define TP_printk(fmt, args...) fmt "\n", args
10  
11  #undef __get_dynamic_array
12  #define __get_dynamic_array(field)	\
13  		((void *)__entry + (__entry->__data_loc_##field & 0xffff))
14  
15  #undef __get_dynamic_array_len
16  #define __get_dynamic_array_len(field)	\
17  		((__entry->__data_loc_##field >> 16) & 0xffff)
18  
19  #undef __get_str
20  #define __get_str(field) ((char *)__get_dynamic_array(field))
21  
22  #undef __get_rel_dynamic_array
23  #define __get_rel_dynamic_array(field)					\
24  		((void *)__entry + 					\
25  		 offsetof(typeof(*__entry), __rel_loc_##field) +	\
26  		 sizeof(__entry->__rel_loc_##field) +			\
27  		 (__entry->__rel_loc_##field & 0xffff))
28  
29  #undef __get_rel_dynamic_array_len
30  #define __get_rel_dynamic_array_len(field)	\
31  		((__entry->__rel_loc_##field >> 16) & 0xffff)
32  
33  #undef __get_rel_str
34  #define __get_rel_str(field) ((char *)__get_rel_dynamic_array(field))
35  
36  #undef __get_bitmask
37  #define __get_bitmask(field)						\
38  	({								\
39  		void *__bitmask = __get_dynamic_array(field);		\
40  		unsigned int __bitmask_size;				\
41  		__bitmask_size = __get_dynamic_array_len(field);	\
42  		trace_print_bitmask_seq(p, __bitmask, __bitmask_size);	\
43  	})
44  
45  #undef __get_cpumask
46  #define __get_cpumask(field) __get_bitmask(field)
47  
48  #undef __get_rel_bitmask
49  #define __get_rel_bitmask(field)						\
50  	({								\
51  		void *__bitmask = __get_rel_dynamic_array(field);		\
52  		unsigned int __bitmask_size;				\
53  		__bitmask_size = __get_rel_dynamic_array_len(field);	\
54  		trace_print_bitmask_seq(p, __bitmask, __bitmask_size);	\
55  	})
56  
57  #undef __get_rel_cpumask
58  #define __get_rel_cpumask(field) __get_rel_bitmask(field)
59  
60  #undef __get_sockaddr
61  #define __get_sockaddr(field)	((struct sockaddr *)__get_dynamic_array(field))
62  
63  #undef __get_rel_sockaddr
64  #define __get_rel_sockaddr(field)	((struct sockaddr *)__get_rel_dynamic_array(field))
65  
66  #undef __print_flags
67  #define __print_flags(flag, delim, flag_array...)			\
68  	({								\
69  		static const struct trace_print_flags __flags[] =	\
70  			{ flag_array, { -1, NULL }};			\
71  		trace_print_flags_seq(p, delim, flag, __flags);	\
72  	})
73  
74  #undef __print_symbolic
75  #define __print_symbolic(value, symbol_array...)			\
76  	({								\
77  		static const struct trace_print_flags symbols[] =	\
78  			{ symbol_array, { -1, NULL }};			\
79  		trace_print_symbols_seq(p, value, symbols);		\
80  	})
81  
82  #undef __print_flags_u64
83  #undef __print_symbolic_u64
84  #if BITS_PER_LONG == 32
85  #define __print_flags_u64(flag, delim, flag_array...)			\
86  	({								\
87  		static const struct trace_print_flags_u64 __flags[] =	\
88  			{ flag_array, { -1, NULL } };			\
89  		trace_print_flags_seq_u64(p, delim, flag, __flags);	\
90  	})
91  
92  #define __print_symbolic_u64(value, symbol_array...)			\
93  	({								\
94  		static const struct trace_print_flags_u64 symbols[] =	\
95  			{ symbol_array, { -1, NULL } };			\
96  		trace_print_symbols_seq_u64(p, value, symbols);	\
97  	})
98  #else
99  #define __print_flags_u64(flag, delim, flag_array...)			\
100  			__print_flags(flag, delim, flag_array)
101  
102  #define __print_symbolic_u64(value, symbol_array...)			\
103  			__print_symbolic(value, symbol_array)
104  #endif
105  
106  #undef __print_hex
107  #define __print_hex(buf, buf_len)					\
108  	trace_print_hex_seq(p, buf, buf_len, false)
109  
110  #undef __print_hex_str
111  #define __print_hex_str(buf, buf_len)					\
112  	trace_print_hex_seq(p, buf, buf_len, true)
113  
114  #undef __print_array
115  #define __print_array(array, count, el_size)				\
116  	({								\
117  		BUILD_BUG_ON(el_size != 1 && el_size != 2 &&		\
118  			     el_size != 4 && el_size != 8);		\
119  		trace_print_array_seq(p, array, count, el_size);	\
120  	})
121  
122  #undef __print_hex_dump
123  #define __print_hex_dump(prefix_str, prefix_type,			\
124  			 rowsize, groupsize, buf, len, ascii)		\
125  	trace_print_hex_dump_seq(p, prefix_str, prefix_type,		\
126  				 rowsize, groupsize, buf, len, ascii)
127  
128  #undef __print_ns_to_secs
129  #define __print_ns_to_secs(value)			\
130  	({						\
131  		u64 ____val = (u64)(value);		\
132  		do_div(____val, NSEC_PER_SEC);		\
133  		____val;				\
134  	})
135  
136  #undef __print_ns_without_secs
137  #define __print_ns_without_secs(value)			\
138  	({						\
139  		u64 ____val = (u64)(value);		\
140  		(u32) do_div(____val, NSEC_PER_SEC);	\
141  	})
142  
143  #undef __get_buf
144  #define __get_buf(len)		trace_seq_acquire(p, (len))
145