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