diff options
Diffstat (limited to 'kernel/trace/trace_export.c')
| -rw-r--r-- | kernel/trace/trace_export.c | 87 |
1 files changed, 13 insertions, 74 deletions
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c index d4fa5dc1ee4..e091f64ba6c 100644 --- a/kernel/trace/trace_export.c +++ b/kernel/trace/trace_export.c | |||
| @@ -62,78 +62,6 @@ static void __always_unused ____ftrace_check_##name(void) \ | |||
| 62 | 62 | ||
| 63 | #include "trace_entries.h" | 63 | #include "trace_entries.h" |
| 64 | 64 | ||
| 65 | |||
| 66 | #undef __field | ||
| 67 | #define __field(type, item) \ | ||
| 68 | ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \ | ||
| 69 | "offset:%zu;\tsize:%zu;\tsigned:%u;\n", \ | ||
| 70 | offsetof(typeof(field), item), \ | ||
| 71 | sizeof(field.item), is_signed_type(type)); \ | ||
| 72 | if (!ret) \ | ||
| 73 | return 0; | ||
| 74 | |||
| 75 | #undef __field_desc | ||
| 76 | #define __field_desc(type, container, item) \ | ||
| 77 | ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \ | ||
| 78 | "offset:%zu;\tsize:%zu;\tsigned:%u;\n", \ | ||
| 79 | offsetof(typeof(field), container.item), \ | ||
| 80 | sizeof(field.container.item), \ | ||
| 81 | is_signed_type(type)); \ | ||
| 82 | if (!ret) \ | ||
| 83 | return 0; | ||
| 84 | |||
| 85 | #undef __array | ||
| 86 | #define __array(type, item, len) \ | ||
| 87 | ret = trace_seq_printf(s, "\tfield:" #type " " #item "[" #len "];\t" \ | ||
| 88 | "offset:%zu;\tsize:%zu;\tsigned:%u;\n", \ | ||
| 89 | offsetof(typeof(field), item), \ | ||
| 90 | sizeof(field.item), is_signed_type(type)); \ | ||
| 91 | if (!ret) \ | ||
| 92 | return 0; | ||
| 93 | |||
| 94 | #undef __array_desc | ||
| 95 | #define __array_desc(type, container, item, len) \ | ||
| 96 | ret = trace_seq_printf(s, "\tfield:" #type " " #item "[" #len "];\t" \ | ||
| 97 | "offset:%zu;\tsize:%zu;\tsigned:%u;\n", \ | ||
| 98 | offsetof(typeof(field), container.item), \ | ||
| 99 | sizeof(field.container.item), \ | ||
| 100 | is_signed_type(type)); \ | ||
| 101 | if (!ret) \ | ||
| 102 | return 0; | ||
| 103 | |||
| 104 | #undef __dynamic_array | ||
| 105 | #define __dynamic_array(type, item) \ | ||
| 106 | ret = trace_seq_printf(s, "\tfield:" #type " " #item ";\t" \ | ||
| 107 | "offset:%zu;\tsize:0;\tsigned:%u;\n", \ | ||
| 108 | offsetof(typeof(field), item), \ | ||
| 109 | is_signed_type(type)); \ | ||
| 110 | if (!ret) \ | ||
| 111 | return 0; | ||
| 112 | |||
| 113 | #undef F_printk | ||
| 114 | #define F_printk(fmt, args...) "%s, %s\n", #fmt, __stringify(args) | ||
| 115 | |||
| 116 | #undef __entry | ||
| 117 | #define __entry REC | ||
| 118 | |||
| 119 | #undef FTRACE_ENTRY | ||
| 120 | #define FTRACE_ENTRY(name, struct_name, id, tstruct, print) \ | ||
| 121 | static int \ | ||
| 122 | ftrace_format_##name(struct ftrace_event_call *unused, \ | ||
| 123 | struct trace_seq *s) \ | ||
| 124 | { \ | ||
| 125 | struct struct_name field __attribute__((unused)); \ | ||
| 126 | int ret = 0; \ | ||
| 127 | \ | ||
| 128 | tstruct; \ | ||
| 129 | \ | ||
| 130 | trace_seq_printf(s, "\nprint fmt: " print); \ | ||
| 131 | \ | ||
| 132 | return ret; \ | ||
| 133 | } | ||
| 134 | |||
| 135 | #include "trace_entries.h" | ||
| 136 | |||
| 137 | #undef __field | 65 | #undef __field |
| 138 | #define __field(type, item) \ | 66 | #define __field(type, item) \ |
| 139 | ret = trace_define_field(event_call, #type, #item, \ | 67 | ret = trace_define_field(event_call, #type, #item, \ |
| @@ -175,7 +103,12 @@ ftrace_format_##name(struct ftrace_event_call *unused, \ | |||
| 175 | return ret; | 103 | return ret; |
| 176 | 104 | ||
| 177 | #undef __dynamic_array | 105 | #undef __dynamic_array |
| 178 | #define __dynamic_array(type, item) | 106 | #define __dynamic_array(type, item) \ |
| 107 | ret = trace_define_field(event_call, #type, #item, \ | ||
| 108 | offsetof(typeof(field), item), \ | ||
| 109 | 0, is_signed_type(type), FILTER_OTHER);\ | ||
| 110 | if (ret) \ | ||
| 111 | return ret; | ||
| 179 | 112 | ||
| 180 | #undef FTRACE_ENTRY | 113 | #undef FTRACE_ENTRY |
| 181 | #define FTRACE_ENTRY(name, struct_name, id, tstruct, print) \ | 114 | #define FTRACE_ENTRY(name, struct_name, id, tstruct, print) \ |
| @@ -198,6 +131,9 @@ static int ftrace_raw_init_event(struct ftrace_event_call *call) | |||
| 198 | return 0; | 131 | return 0; |
| 199 | } | 132 | } |
| 200 | 133 | ||
| 134 | #undef __entry | ||
| 135 | #define __entry REC | ||
| 136 | |||
| 201 | #undef __field | 137 | #undef __field |
| 202 | #define __field(type, item) | 138 | #define __field(type, item) |
| 203 | 139 | ||
| @@ -213,6 +149,9 @@ static int ftrace_raw_init_event(struct ftrace_event_call *call) | |||
| 213 | #undef __dynamic_array | 149 | #undef __dynamic_array |
| 214 | #define __dynamic_array(type, item) | 150 | #define __dynamic_array(type, item) |
| 215 | 151 | ||
| 152 | #undef F_printk | ||
| 153 | #define F_printk(fmt, args...) #fmt ", " __stringify(args) | ||
| 154 | |||
| 216 | #undef FTRACE_ENTRY | 155 | #undef FTRACE_ENTRY |
| 217 | #define FTRACE_ENTRY(call, struct_name, type, tstruct, print) \ | 156 | #define FTRACE_ENTRY(call, struct_name, type, tstruct, print) \ |
| 218 | \ | 157 | \ |
| @@ -223,7 +162,7 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
| 223 | .id = type, \ | 162 | .id = type, \ |
| 224 | .system = __stringify(TRACE_SYSTEM), \ | 163 | .system = __stringify(TRACE_SYSTEM), \ |
| 225 | .raw_init = ftrace_raw_init_event, \ | 164 | .raw_init = ftrace_raw_init_event, \ |
| 226 | .show_format = ftrace_format_##call, \ | 165 | .print_fmt = print, \ |
| 227 | .define_fields = ftrace_define_fields_##call, \ | 166 | .define_fields = ftrace_define_fields_##call, \ |
| 228 | }; \ | 167 | }; \ |
| 229 | 168 | ||
