Messages in this thread |  | | Date | Fri, 15 Nov 2013 10:17:41 +0200 | From | Terje Bergström <> | Subject | Re: Why have another variable deciding a tracepoint? |
| |
On 15.11.2013 06:48, Steven Rostedt wrote: > I've been reviewing different users of tracepoints and I stumbled > across this: > > drivers/gpu/host1x/cdma.c: host1x_cdma_push() > > if (host1x_debug_trace_cmdbuf) > trace_host1x_cdma_push(dev_name(cdma_to_channel(cdma)->dev), > op1, op2); > > That host1x_debug_trace_cmdbuf is a variable that gets set by another > debugfs file "trace_cmdbuf" that is custom to this driver. > > Why?
This is because it takes a lot of time to prepare for dumping the cmdbuf data, like mapping buffer and unmapping after tracing. We want to avoid all that preparation time.
> The tracepoint host1x_cdma_push is already controlled by either ftrace > or perf. If it gets enabled by perf or ftrace, it still wont be traced > unless we also enable this trace_cmdbuf. Is there some reason for this? > I can't figure it out from the change log: 6236451d83a720 ("gpu: > host1x: Add debug support"). > > As tracepoints uses jump labels, there is no branch cost associated > with them. That is, they are either a direct jump, or a nop (in most > cases a nop). But here you added the overhead of a conditional branch > depending on this variable. > > If this is truly needed, then use TRACE_EVENT_CONDITION() for that > tracepoint.
TRACE_EVENT_CONDITION() isn't documented, so I don't know how that would help.
Terje
|  |