184055411SSteven Rostedt (Google) /* SPDX-License-Identifier: GPL-2.0 */
284055411SSteven Rostedt (Google) 
384055411SSteven Rostedt (Google) /* Stage 3 definitions for creating trace events */
484055411SSteven Rostedt (Google) 
584055411SSteven Rostedt (Google) #undef __entry
684055411SSteven Rostedt (Google) #define __entry field
784055411SSteven Rostedt (Google) 
884055411SSteven Rostedt (Google) #undef TP_printk
984055411SSteven Rostedt (Google) #define TP_printk(fmt, args...) fmt "\n", args
1084055411SSteven Rostedt (Google) 
1184055411SSteven Rostedt (Google) #undef __get_dynamic_array
1284055411SSteven Rostedt (Google) #define __get_dynamic_array(field)	\
1384055411SSteven Rostedt (Google) 		((void *)__entry + (__entry->__data_loc_##field & 0xffff))
1484055411SSteven Rostedt (Google) 
1584055411SSteven Rostedt (Google) #undef __get_dynamic_array_len
1684055411SSteven Rostedt (Google) #define __get_dynamic_array_len(field)	\
1784055411SSteven Rostedt (Google) 		((__entry->__data_loc_##field >> 16) & 0xffff)
1884055411SSteven Rostedt (Google) 
1984055411SSteven Rostedt (Google) #undef __get_str
2084055411SSteven Rostedt (Google) #define __get_str(field) ((char *)__get_dynamic_array(field))
2184055411SSteven Rostedt (Google) 
2284055411SSteven Rostedt (Google) #undef __get_rel_dynamic_array
2384055411SSteven Rostedt (Google) #define __get_rel_dynamic_array(field)					\
2484055411SSteven Rostedt (Google) 		((void *)__entry + 					\
2584055411SSteven Rostedt (Google) 		 offsetof(typeof(*__entry), __rel_loc_##field) +	\
2684055411SSteven Rostedt (Google) 		 sizeof(__entry->__rel_loc_##field) +			\
2784055411SSteven Rostedt (Google) 		 (__entry->__rel_loc_##field & 0xffff))
2884055411SSteven Rostedt (Google) 
2984055411SSteven Rostedt (Google) #undef __get_rel_dynamic_array_len
3084055411SSteven Rostedt (Google) #define __get_rel_dynamic_array_len(field)	\
3184055411SSteven Rostedt (Google) 		((__entry->__rel_loc_##field >> 16) & 0xffff)
3284055411SSteven Rostedt (Google) 
3384055411SSteven Rostedt (Google) #undef __get_rel_str
3484055411SSteven Rostedt (Google) #define __get_rel_str(field) ((char *)__get_rel_dynamic_array(field))
3584055411SSteven Rostedt (Google) 
3684055411SSteven Rostedt (Google) #undef __get_bitmask
3784055411SSteven Rostedt (Google) #define __get_bitmask(field)						\
3884055411SSteven Rostedt (Google) 	({								\
3984055411SSteven Rostedt (Google) 		void *__bitmask = __get_dynamic_array(field);		\
4084055411SSteven Rostedt (Google) 		unsigned int __bitmask_size;				\
4184055411SSteven Rostedt (Google) 		__bitmask_size = __get_dynamic_array_len(field);	\
4284055411SSteven Rostedt (Google) 		trace_print_bitmask_seq(p, __bitmask, __bitmask_size);	\
4384055411SSteven Rostedt (Google) 	})
4484055411SSteven Rostedt (Google) 
458230f27bSSteven Rostedt (Google) #undef __get_cpumask
468230f27bSSteven Rostedt (Google) #define __get_cpumask(field) __get_bitmask(field)
478230f27bSSteven Rostedt (Google) 
4884055411SSteven Rostedt (Google) #undef __get_rel_bitmask
4984055411SSteven Rostedt (Google) #define __get_rel_bitmask(field)						\
5084055411SSteven Rostedt (Google) 	({								\
5184055411SSteven Rostedt (Google) 		void *__bitmask = __get_rel_dynamic_array(field);		\
5284055411SSteven Rostedt (Google) 		unsigned int __bitmask_size;				\
5384055411SSteven Rostedt (Google) 		__bitmask_size = __get_rel_dynamic_array_len(field);	\
5484055411SSteven Rostedt (Google) 		trace_print_bitmask_seq(p, __bitmask, __bitmask_size);	\
5584055411SSteven Rostedt (Google) 	})
5684055411SSteven Rostedt (Google) 
578230f27bSSteven Rostedt (Google) #undef __get_rel_cpumask
588230f27bSSteven Rostedt (Google) #define __get_rel_cpumask(field) __get_rel_bitmask(field)
598230f27bSSteven Rostedt (Google) 
6084055411SSteven Rostedt (Google) #undef __get_sockaddr
6184055411SSteven Rostedt (Google) #define __get_sockaddr(field)	((struct sockaddr *)__get_dynamic_array(field))
6284055411SSteven Rostedt (Google) 
6384055411SSteven Rostedt (Google) #undef __get_rel_sockaddr
6484055411SSteven Rostedt (Google) #define __get_rel_sockaddr(field)	((struct sockaddr *)__get_rel_dynamic_array(field))
6584055411SSteven Rostedt (Google) 
6684055411SSteven Rostedt (Google) #undef __print_flags
6784055411SSteven Rostedt (Google) #define __print_flags(flag, delim, flag_array...)			\
6884055411SSteven Rostedt (Google) 	({								\
6984055411SSteven Rostedt (Google) 		static const struct trace_print_flags __flags[] =	\
7084055411SSteven Rostedt (Google) 			{ flag_array, { -1, NULL }};			\
7184055411SSteven Rostedt (Google) 		trace_print_flags_seq(p, delim, flag, __flags);	\
7284055411SSteven Rostedt (Google) 	})
7384055411SSteven Rostedt (Google) 
7484055411SSteven Rostedt (Google) #undef __print_symbolic
7584055411SSteven Rostedt (Google) #define __print_symbolic(value, symbol_array...)			\
7684055411SSteven Rostedt (Google) 	({								\
7784055411SSteven Rostedt (Google) 		static const struct trace_print_flags symbols[] =	\
7884055411SSteven Rostedt (Google) 			{ symbol_array, { -1, NULL }};			\
7984055411SSteven Rostedt (Google) 		trace_print_symbols_seq(p, value, symbols);		\
8084055411SSteven Rostedt (Google) 	})
8184055411SSteven Rostedt (Google) 
8284055411SSteven Rostedt (Google) #undef __print_flags_u64
8384055411SSteven Rostedt (Google) #undef __print_symbolic_u64
8484055411SSteven Rostedt (Google) #if BITS_PER_LONG == 32
8584055411SSteven Rostedt (Google) #define __print_flags_u64(flag, delim, flag_array...)			\
8684055411SSteven Rostedt (Google) 	({								\
8784055411SSteven Rostedt (Google) 		static const struct trace_print_flags_u64 __flags[] =	\
8884055411SSteven Rostedt (Google) 			{ flag_array, { -1, NULL } };			\
8984055411SSteven Rostedt (Google) 		trace_print_flags_seq_u64(p, delim, flag, __flags);	\
9084055411SSteven Rostedt (Google) 	})
9184055411SSteven Rostedt (Google) 
9284055411SSteven Rostedt (Google) #define __print_symbolic_u64(value, symbol_array...)			\
9384055411SSteven Rostedt (Google) 	({								\
9484055411SSteven Rostedt (Google) 		static const struct trace_print_flags_u64 symbols[] =	\
9584055411SSteven Rostedt (Google) 			{ symbol_array, { -1, NULL } };			\
9684055411SSteven Rostedt (Google) 		trace_print_symbols_seq_u64(p, value, symbols);	\
9784055411SSteven Rostedt (Google) 	})
9884055411SSteven Rostedt (Google) #else
9984055411SSteven Rostedt (Google) #define __print_flags_u64(flag, delim, flag_array...)			\
10084055411SSteven Rostedt (Google) 			__print_flags(flag, delim, flag_array)
10184055411SSteven Rostedt (Google) 
10284055411SSteven Rostedt (Google) #define __print_symbolic_u64(value, symbol_array...)			\
10384055411SSteven Rostedt (Google) 			__print_symbolic(value, symbol_array)
10484055411SSteven Rostedt (Google) #endif
10584055411SSteven Rostedt (Google) 
10684055411SSteven Rostedt (Google) #undef __print_hex
10784055411SSteven Rostedt (Google) #define __print_hex(buf, buf_len)					\
10884055411SSteven Rostedt (Google) 	trace_print_hex_seq(p, buf, buf_len, false)
10984055411SSteven Rostedt (Google) 
11084055411SSteven Rostedt (Google) #undef __print_hex_str
11184055411SSteven Rostedt (Google) #define __print_hex_str(buf, buf_len)					\
11284055411SSteven Rostedt (Google) 	trace_print_hex_seq(p, buf, buf_len, true)
11384055411SSteven Rostedt (Google) 
11484055411SSteven Rostedt (Google) #undef __print_array
11584055411SSteven Rostedt (Google) #define __print_array(array, count, el_size)				\
11684055411SSteven Rostedt (Google) 	({								\
11784055411SSteven Rostedt (Google) 		BUILD_BUG_ON(el_size != 1 && el_size != 2 &&		\
11884055411SSteven Rostedt (Google) 			     el_size != 4 && el_size != 8);		\
11984055411SSteven Rostedt (Google) 		trace_print_array_seq(p, array, count, el_size);	\
12084055411SSteven Rostedt (Google) 	})
12184055411SSteven Rostedt (Google) 
12284055411SSteven Rostedt (Google) #undef __print_hex_dump
12384055411SSteven Rostedt (Google) #define __print_hex_dump(prefix_str, prefix_type,			\
12484055411SSteven Rostedt (Google) 			 rowsize, groupsize, buf, len, ascii)		\
12584055411SSteven Rostedt (Google) 	trace_print_hex_dump_seq(p, prefix_str, prefix_type,		\
12684055411SSteven Rostedt (Google) 				 rowsize, groupsize, buf, len, ascii)
12784055411SSteven Rostedt (Google) 
12884055411SSteven Rostedt (Google) #undef __print_ns_to_secs
12984055411SSteven Rostedt (Google) #define __print_ns_to_secs(value)			\
13084055411SSteven Rostedt (Google) 	({						\
13184055411SSteven Rostedt (Google) 		u64 ____val = (u64)(value);		\
13284055411SSteven Rostedt (Google) 		do_div(____val, NSEC_PER_SEC);		\
13384055411SSteven Rostedt (Google) 		____val;				\
13484055411SSteven Rostedt (Google) 	})
13584055411SSteven Rostedt (Google) 
13684055411SSteven Rostedt (Google) #undef __print_ns_without_secs
13784055411SSteven Rostedt (Google) #define __print_ns_without_secs(value)			\
13884055411SSteven Rostedt (Google) 	({						\
13984055411SSteven Rostedt (Google) 		u64 ____val = (u64)(value);		\
14084055411SSteven Rostedt (Google) 		(u32) do_div(____val, NSEC_PER_SEC);	\
14184055411SSteven Rostedt (Google) 	})
142*a9c4bdd5SLinyu Yuan 
143*a9c4bdd5SLinyu Yuan #undef __get_buf
144*a9c4bdd5SLinyu Yuan #define __get_buf(len)		trace_seq_acquire(p, (len))
145