136 lines
3.9 KiB
C
136 lines
3.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
/* Stage 3 definitions for creating trace events */
|
|
|
|
#undef __entry
|
|
#define __entry field
|
|
|
|
#undef TP_printk
|
|
#define TP_printk(fmt, args...) fmt "\n", args
|
|
|
|
#undef __get_dynamic_array
|
|
#define __get_dynamic_array(field) \
|
|
((void *)__entry + (__entry->__data_loc_##field & 0xffff))
|
|
|
|
#undef __get_dynamic_array_len
|
|
#define __get_dynamic_array_len(field) \
|
|
((__entry->__data_loc_##field >> 16) & 0xffff)
|
|
|
|
#undef __get_str
|
|
#define __get_str(field) ((char *)__get_dynamic_array(field))
|
|
|
|
#undef __get_rel_dynamic_array
|
|
#define __get_rel_dynamic_array(field) \
|
|
((void *)__entry + \
|
|
offsetof(typeof(*__entry), __rel_loc_##field) + \
|
|
sizeof(__entry->__rel_loc_##field) + \
|
|
(__entry->__rel_loc_##field & 0xffff))
|
|
|
|
#undef __get_rel_dynamic_array_len
|
|
#define __get_rel_dynamic_array_len(field) \
|
|
((__entry->__rel_loc_##field >> 16) & 0xffff)
|
|
|
|
#undef __get_rel_str
|
|
#define __get_rel_str(field) ((char *)__get_rel_dynamic_array(field))
|
|
|
|
#undef __get_bitmask
|
|
#define __get_bitmask(field) \
|
|
({ \
|
|
void *__bitmask = __get_dynamic_array(field); \
|
|
unsigned int __bitmask_size; \
|
|
__bitmask_size = __get_dynamic_array_len(field); \
|
|
trace_print_bitmask_seq(p, __bitmask, __bitmask_size); \
|
|
})
|
|
|
|
#undef __get_rel_bitmask
|
|
#define __get_rel_bitmask(field) \
|
|
({ \
|
|
void *__bitmask = __get_rel_dynamic_array(field); \
|
|
unsigned int __bitmask_size; \
|
|
__bitmask_size = __get_rel_dynamic_array_len(field); \
|
|
trace_print_bitmask_seq(p, __bitmask, __bitmask_size); \
|
|
})
|
|
|
|
#undef __get_sockaddr
|
|
#define __get_sockaddr(field) ((struct sockaddr *)__get_dynamic_array(field))
|
|
|
|
#undef __get_rel_sockaddr
|
|
#define __get_rel_sockaddr(field) ((struct sockaddr *)__get_rel_dynamic_array(field))
|
|
|
|
#undef __print_flags
|
|
#define __print_flags(flag, delim, flag_array...) \
|
|
({ \
|
|
static const struct trace_print_flags __flags[] = \
|
|
{ flag_array, { -1, NULL }}; \
|
|
trace_print_flags_seq(p, delim, flag, __flags); \
|
|
})
|
|
|
|
#undef __print_symbolic
|
|
#define __print_symbolic(value, symbol_array...) \
|
|
({ \
|
|
static const struct trace_print_flags symbols[] = \
|
|
{ symbol_array, { -1, NULL }}; \
|
|
trace_print_symbols_seq(p, value, symbols); \
|
|
})
|
|
|
|
#undef __print_flags_u64
|
|
#undef __print_symbolic_u64
|
|
#if BITS_PER_LONG == 32
|
|
#define __print_flags_u64(flag, delim, flag_array...) \
|
|
({ \
|
|
static const struct trace_print_flags_u64 __flags[] = \
|
|
{ flag_array, { -1, NULL } }; \
|
|
trace_print_flags_seq_u64(p, delim, flag, __flags); \
|
|
})
|
|
|
|
#define __print_symbolic_u64(value, symbol_array...) \
|
|
({ \
|
|
static const struct trace_print_flags_u64 symbols[] = \
|
|
{ symbol_array, { -1, NULL } }; \
|
|
trace_print_symbols_seq_u64(p, value, symbols); \
|
|
})
|
|
#else
|
|
#define __print_flags_u64(flag, delim, flag_array...) \
|
|
__print_flags(flag, delim, flag_array)
|
|
|
|
#define __print_symbolic_u64(value, symbol_array...) \
|
|
__print_symbolic(value, symbol_array)
|
|
#endif
|
|
|
|
#undef __print_hex
|
|
#define __print_hex(buf, buf_len) \
|
|
trace_print_hex_seq(p, buf, buf_len, false)
|
|
|
|
#undef __print_hex_str
|
|
#define __print_hex_str(buf, buf_len) \
|
|
trace_print_hex_seq(p, buf, buf_len, true)
|
|
|
|
#undef __print_array
|
|
#define __print_array(array, count, el_size) \
|
|
({ \
|
|
BUILD_BUG_ON(el_size != 1 && el_size != 2 && \
|
|
el_size != 4 && el_size != 8); \
|
|
trace_print_array_seq(p, array, count, el_size); \
|
|
})
|
|
|
|
#undef __print_hex_dump
|
|
#define __print_hex_dump(prefix_str, prefix_type, \
|
|
rowsize, groupsize, buf, len, ascii) \
|
|
trace_print_hex_dump_seq(p, prefix_str, prefix_type, \
|
|
rowsize, groupsize, buf, len, ascii)
|
|
|
|
#undef __print_ns_to_secs
|
|
#define __print_ns_to_secs(value) \
|
|
({ \
|
|
u64 ____val = (u64)(value); \
|
|
do_div(____val, NSEC_PER_SEC); \
|
|
____val; \
|
|
})
|
|
|
|
#undef __print_ns_without_secs
|
|
#define __print_ns_without_secs(value) \
|
|
({ \
|
|
u64 ____val = (u64)(value); \
|
|
(u32) do_div(____val, NSEC_PER_SEC); \
|
|
})
|