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