Re: Help adding trace events to xHCI
From: Steven Rostedt <rostedt@goodmis.org>
Date: 2013-07-11 19:29:17
On Thu, 2013-07-11 at 19:08 +0200, Johannes Berg wrote:
quoted
quoted
lets say that we want the tracepoint function to have the prototype: void trace_cmd_address_device(const char *fmt, ...).I'm not sure this is possible. I think we (wireless) do this with void trace_cmd_address_device(struct va_format *vaf) instead only. Note that there's no easy way to dynamically allocate the right amount of space in the ringbuffer, or at least I haven't found one. We therefore have a static size, which is somewhat inefficient.
Can you add a helper function? If these trace events can't nest (one in interrupt context and another in normal context with interrupts enabled), then you can just allocate a per-cpu buffer and store the string in that, and then move the string into the buffer. vsnprintf(this_cpu_ptr(trace_buf), MAX_BUF_LEN, fmt, va); __assign_str(str, trace_buf); You could even use the reg, unreg, methods for TRACE_EVENT_FN() that will allocate the buffers when the tracepoint is created. This will mean that you don't waste memory when not tracing. -- Steve