Merge tag 'trace-v5.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / include / trace / stages / stage3_trace_output.h
diff --git a/include/trace/stages/stage3_trace_output.h b/include/trace/stages/stage3_trace_output.h
new file mode 100644 (file)
index 0000000..e3b183e
--- /dev/null
@@ -0,0 +1,135 @@
+/* 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);    \
+       })