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