1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 /* Stage 6 definitions for creating trace events */ 4 5 /* Reuse some of the stage 3 macros */ 6 #include "stage3_trace_output.h" 7 8 #undef __entry 9 #define __entry entry 10 11 #undef __field 12 #define __field(type, item) 13 14 #undef __field_struct 15 #define __field_struct(type, item) 16 17 #undef __array 18 #define __array(type, item, len) 19 20 #undef __dynamic_array 21 #define __dynamic_array(type, item, len) \ 22 __entry->__data_loc_##item = __data_offsets.item; 23 24 #undef __string 25 #define __string(item, src) __dynamic_array(char, item, -1) 26 27 #undef __string_len 28 #define __string_len(item, src, len) __dynamic_array(char, item, -1) 29 30 #undef __vstring 31 #define __vstring(item, fmt, ap) __dynamic_array(char, item, -1) 32 33 #undef __assign_str 34 #define __assign_str(dst, src) \ 35 do { \ 36 char *__str__ = __get_str(dst); \ 37 int __len__ = __get_dynamic_array_len(dst) - 1; \ 38 WARN_ON_ONCE(!(void *)(src) != !(void *)__data_offsets.dst##_ptr_); \ 39 WARN_ON_ONCE((src) && strcmp((src), __data_offsets.dst##_ptr_)); \ 40 memcpy(__str__, __data_offsets.dst##_ptr_ ? : \ 41 EVENT_NULL_STR, __len__); \ 42 __str__[__len__] = '\0'; \ 43 } while (0) 44 45 #undef __assign_vstr 46 #define __assign_vstr(dst, fmt, va) \ 47 do { \ 48 va_list __cp_va; \ 49 va_copy(__cp_va, *(va)); \ 50 vsnprintf(__get_str(dst), TRACE_EVENT_STR_MAX, fmt, __cp_va); \ 51 va_end(__cp_va); \ 52 } while (0) 53 54 #undef __bitmask 55 #define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1) 56 57 #undef __get_bitmask 58 #define __get_bitmask(field) (char *)__get_dynamic_array(field) 59 60 #undef __assign_bitmask 61 #define __assign_bitmask(dst, src, nr_bits) \ 62 memcpy(__get_bitmask(dst), (src), __bitmask_size_in_bytes(nr_bits)) 63 64 #undef __cpumask 65 #define __cpumask(item) __dynamic_array(unsigned long, item, -1) 66 67 #undef __get_cpumask 68 #define __get_cpumask(field) (char *)__get_dynamic_array(field) 69 70 #undef __assign_cpumask 71 #define __assign_cpumask(dst, src) \ 72 memcpy(__get_cpumask(dst), (src), __bitmask_size_in_bytes(nr_cpumask_bits)) 73 74 #undef __sockaddr 75 #define __sockaddr(field, len) __dynamic_array(u8, field, len) 76 77 #undef __get_sockaddr 78 #define __get_sockaddr(field) ((struct sockaddr *)__get_dynamic_array(field)) 79 80 #undef __assign_sockaddr 81 #define __assign_sockaddr(dest, src, len) \ 82 memcpy(__get_dynamic_array(dest), src, len) 83 84 #undef __rel_dynamic_array 85 #define __rel_dynamic_array(type, item, len) \ 86 __entry->__rel_loc_##item = __data_offsets.item; 87 88 #undef __rel_string 89 #define __rel_string(item, src) __rel_dynamic_array(char, item, -1) 90 91 #undef __rel_string_len 92 #define __rel_string_len(item, src, len) __rel_dynamic_array(char, item, -1) 93 94 #undef __assign_rel_str 95 #define __assign_rel_str(dst) \ 96 do { \ 97 char *__str__ = __get_rel_str(dst); \ 98 int __len__ = __get_rel_dynamic_array_len(dst) - 1; \ 99 memcpy(__str__, __data_offsets.dst##_ptr_ ? : \ 100 EVENT_NULL_STR, __len__); \ 101 __str__[__len__] = '\0'; \ 102 } while (0) 103 104 #undef __rel_bitmask 105 #define __rel_bitmask(item, nr_bits) __rel_dynamic_array(unsigned long, item, -1) 106 107 #undef __get_rel_bitmask 108 #define __get_rel_bitmask(field) (char *)__get_rel_dynamic_array(field) 109 110 #undef __assign_rel_bitmask 111 #define __assign_rel_bitmask(dst, src, nr_bits) \ 112 memcpy(__get_rel_bitmask(dst), (src), __bitmask_size_in_bytes(nr_bits)) 113 114 #undef __rel_cpumask 115 #define __rel_cpumask(item) __rel_dynamic_array(unsigned long, item, -1) 116 117 #undef __get_rel_cpumask 118 #define __get_rel_cpumask(field) (char *)__get_rel_dynamic_array(field) 119 120 #undef __assign_rel_cpumask 121 #define __assign_rel_cpumask(dst, src) \ 122 memcpy(__get_rel_cpumask(dst), (src), __bitmask_size_in_bytes(nr_cpumask_bits)) 123 124 #undef __rel_sockaddr 125 #define __rel_sockaddr(field, len) __rel_dynamic_array(u8, field, len) 126 127 #undef __get_rel_sockaddr 128 #define __get_rel_sockaddr(field) ((struct sockaddr *)__get_rel_dynamic_array(field)) 129 130 #undef __assign_rel_sockaddr 131 #define __assign_rel_sockaddr(dest, src, len) \ 132 memcpy(__get_rel_dynamic_array(dest), src, len) 133 134 #undef TP_fast_assign 135 #define TP_fast_assign(args...) args 136 137 #undef __perf_count 138 #define __perf_count(c) (c) 139 140 #undef __perf_task 141 #define __perf_task(t) (t) 142