diff options
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index b77b9a697619..692bf7184c8c 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
@@ -177,6 +177,50 @@ ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len) | |||
177 | } | 177 | } |
178 | EXPORT_SYMBOL(ftrace_print_hex_seq); | 178 | EXPORT_SYMBOL(ftrace_print_hex_seq); |
179 | 179 | ||
180 | const char * | ||
181 | ftrace_print_array_seq(struct trace_seq *p, const void *buf, int buf_len, | ||
182 | size_t el_size) | ||
183 | { | ||
184 | const char *ret = trace_seq_buffer_ptr(p); | ||
185 | const char *prefix = ""; | ||
186 | void *ptr = (void *)buf; | ||
187 | |||
188 | trace_seq_putc(p, '{'); | ||
189 | |||
190 | while (ptr < buf + buf_len) { | ||
191 | switch (el_size) { | ||
192 | case 1: | ||
193 | trace_seq_printf(p, "%s0x%x", prefix, | ||
194 | *(u8 *)ptr); | ||
195 | break; | ||
196 | case 2: | ||
197 | trace_seq_printf(p, "%s0x%x", prefix, | ||
198 | *(u16 *)ptr); | ||
199 | break; | ||
200 | case 4: | ||
201 | trace_seq_printf(p, "%s0x%x", prefix, | ||
202 | *(u32 *)ptr); | ||
203 | break; | ||
204 | case 8: | ||
205 | trace_seq_printf(p, "%s0x%llx", prefix, | ||
206 | *(u64 *)ptr); | ||
207 | break; | ||
208 | default: | ||
209 | trace_seq_printf(p, "BAD SIZE:%zu 0x%x", el_size, | ||
210 | *(u8 *)ptr); | ||
211 | el_size = 1; | ||
212 | } | ||
213 | prefix = ","; | ||
214 | ptr += el_size; | ||
215 | } | ||
216 | |||
217 | trace_seq_putc(p, '}'); | ||
218 | trace_seq_putc(p, 0); | ||
219 | |||
220 | return ret; | ||
221 | } | ||
222 | EXPORT_SYMBOL(ftrace_print_array_seq); | ||
223 | |||
180 | int ftrace_raw_output_prep(struct trace_iterator *iter, | 224 | int ftrace_raw_output_prep(struct trace_iterator *iter, |
181 | struct trace_event *trace_event) | 225 | struct trace_event *trace_event) |
182 | { | 226 | { |