|
@@ -53,6 +53,9 @@
|
|
|
#undef __string
|
|
|
#define __string(item, src) __dynamic_array(char, item, -1)
|
|
|
|
|
|
+#undef __bitmask
|
|
|
+#define __bitmask(item, nr_bits) __dynamic_array(char, item, -1)
|
|
|
+
|
|
|
#undef TP_STRUCT__entry
|
|
|
#define TP_STRUCT__entry(args...) args
|
|
|
|
|
@@ -128,6 +131,9 @@
|
|
|
#undef __string
|
|
|
#define __string(item, src) __dynamic_array(char, item, -1)
|
|
|
|
|
|
+#undef __bitmask
|
|
|
+#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1)
|
|
|
+
|
|
|
#undef DECLARE_EVENT_CLASS
|
|
|
#define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
|
|
|
struct ftrace_data_offsets_##call { \
|
|
@@ -200,6 +206,15 @@
|
|
|
#undef __get_str
|
|
|
#define __get_str(field) (char *)__get_dynamic_array(field)
|
|
|
|
|
|
+#undef __get_bitmask
|
|
|
+#define __get_bitmask(field) \
|
|
|
+ ({ \
|
|
|
+ void *__bitmask = __get_dynamic_array(field); \
|
|
|
+ unsigned int __bitmask_size; \
|
|
|
+ __bitmask_size = (__entry->__data_loc_##field >> 16) & 0xffff; \
|
|
|
+ ftrace_print_bitmask_seq(p, __bitmask, __bitmask_size); \
|
|
|
+ })
|
|
|
+
|
|
|
#undef __print_flags
|
|
|
#define __print_flags(flag, delim, flag_array...) \
|
|
|
({ \
|
|
@@ -322,6 +337,9 @@ static struct trace_event_functions ftrace_event_type_funcs_##call = { \
|
|
|
#undef __string
|
|
|
#define __string(item, src) __dynamic_array(char, item, -1)
|
|
|
|
|
|
+#undef __bitmask
|
|
|
+#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1)
|
|
|
+
|
|
|
#undef DECLARE_EVENT_CLASS
|
|
|
#define DECLARE_EVENT_CLASS(call, proto, args, tstruct, func, print) \
|
|
|
static int notrace __init \
|
|
@@ -372,6 +390,29 @@ ftrace_define_fields_##call(struct ftrace_event_call *event_call) \
|
|
|
#define __string(item, src) __dynamic_array(char, item, \
|
|
|
strlen((src) ? (const char *)(src) : "(null)") + 1)
|
|
|
|
|
|
+/*
|
|
|
+ * __bitmask_size_in_bytes_raw is the number of bytes needed to hold
|
|
|
+ * num_possible_cpus().
|
|
|
+ */
|
|
|
+#define __bitmask_size_in_bytes_raw(nr_bits) \
|
|
|
+ (((nr_bits) + 7) / 8)
|
|
|
+
|
|
|
+#define __bitmask_size_in_longs(nr_bits) \
|
|
|
+ ((__bitmask_size_in_bytes_raw(nr_bits) + \
|
|
|
+ ((BITS_PER_LONG / 8) - 1)) / (BITS_PER_LONG / 8))
|
|
|
+
|
|
|
+/*
|
|
|
+ * __bitmask_size_in_bytes is the number of bytes needed to hold
|
|
|
+ * num_possible_cpus() padded out to the nearest long. This is what
|
|
|
+ * is saved in the buffer, just to be consistent.
|
|
|
+ */
|
|
|
+#define __bitmask_size_in_bytes(nr_bits) \
|
|
|
+ (__bitmask_size_in_longs(nr_bits) * (BITS_PER_LONG / 8))
|
|
|
+
|
|
|
+#undef __bitmask
|
|
|
+#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, \
|
|
|
+ __bitmask_size_in_longs(nr_bits))
|
|
|
+
|
|
|
#undef DECLARE_EVENT_CLASS
|
|
|
#define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
|
|
|
static inline notrace int ftrace_get_offsets_##call( \
|
|
@@ -513,12 +554,22 @@ static inline notrace int ftrace_get_offsets_##call( \
|
|
|
__entry->__data_loc_##item = __data_offsets.item;
|
|
|
|
|
|
#undef __string
|
|
|
-#define __string(item, src) __dynamic_array(char, item, -1) \
|
|
|
+#define __string(item, src) __dynamic_array(char, item, -1)
|
|
|
|
|
|
#undef __assign_str
|
|
|
#define __assign_str(dst, src) \
|
|
|
strcpy(__get_str(dst), (src) ? (const char *)(src) : "(null)");
|
|
|
|
|
|
+#undef __bitmask
|
|
|
+#define __bitmask(item, nr_bits) __dynamic_array(unsigned long, item, -1)
|
|
|
+
|
|
|
+#undef __get_bitmask
|
|
|
+#define __get_bitmask(field) (char *)__get_dynamic_array(field)
|
|
|
+
|
|
|
+#undef __assign_bitmask
|
|
|
+#define __assign_bitmask(dst, src, nr_bits) \
|
|
|
+ memcpy(__get_bitmask(dst), (src), __bitmask_size_in_bytes(nr_bits))
|
|
|
+
|
|
|
#undef TP_fast_assign
|
|
|
#define TP_fast_assign(args...) args
|
|
|
|
|
@@ -586,6 +637,7 @@ static inline void ftrace_test_probe_##call(void) \
|
|
|
#undef __print_hex
|
|
|
#undef __get_dynamic_array
|
|
|
#undef __get_str
|
|
|
+#undef __get_bitmask
|
|
|
|
|
|
#undef TP_printk
|
|
|
#define TP_printk(fmt, args...) "\"" fmt "\", " __stringify(args)
|
|
@@ -651,6 +703,9 @@ __attribute__((section("_ftrace_events"))) *__event_##call = &event_##call
|
|
|
#undef __get_str
|
|
|
#define __get_str(field) (char *)__get_dynamic_array(field)
|
|
|
|
|
|
+#undef __get_bitmask
|
|
|
+#define __get_bitmask(field) (char *)__get_dynamic_array(field)
|
|
|
+
|
|
|
#undef __perf_addr
|
|
|
#define __perf_addr(a) (__addr = (a))
|
|
|
|