Re: [RESEND PATCH v2 1/2] tracing: Add array printing helpers

From: Steven Rostedt
Date: Thu Jan 15 2015 - 21:21:50 EST


On Thu, 15 Jan 2015 16:50:58 +0000
Javi Merino <javi.merino@xxxxxxx> wrote:

> +const char *
> +ftrace_print_array_seq(struct trace_seq *p, const void *buf, int
> buf_len,
> + size_t el_size)
> +{
> + const char *ret = trace_seq_buffer_ptr(p);
> + const char *prefix = "";
> + void *ptr = (void *)buf;
> +
> + trace_seq_putc(p, '{');
> +
> + while (ptr < buf + buf_len) {
> + switch (el_size) {
> + case 8:
> + trace_seq_printf(p, "%s0x%x", prefix,
> + *(u8 *)ptr);
> + break;
> + case 16:
> + trace_seq_printf(p, "%s0x%x", prefix,
> + *(u16 *)ptr);
> + break;
> + case 32:
> + trace_seq_printf(p, "%s0x%x", prefix,
> + *(u32 *)ptr);
> + break;
> + case 64:
> + trace_seq_printf(p, "%s0x%llx", prefix,
> + *(u64 *)ptr);
> + break;
> + default:
> + BUG();

BUG() is a bit extreme don't you think? I'm not sure it even deserves a
WARN_ON().

I would suggest doing:

trace_seq_printf(p, "BAD SIZE:%d 0x%x", el_size,
*(u8 *)ptr);
el_size = 8;

No need to go crashing the kernel or even messing with dmesg over
somebody's tracepoint mistake.

The rest looks fine.

> + }
> + prefix = ",";
> + ptr += el_size / 8;
> + }
> +
> + trace_seq_putc(p, '}');
> + trace_seq_putc(p, 0);

I need to add a trace_seq_terminate() for this.

-- Steve

> +
> + return ret;
> +}
> +EXPORT_SYMBOL(ftrace_print_array_seq);
> +
> int ftrace_raw_output_prep(struct trace_iterator *iter,
> struct trace_event *trace_event)
> {

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/