Messages in this thread | | | Subject | Re: [PATCH 2/9 - v2][RFC] tracing: Let tracepoints have data?passed to tracepoint callbacks | From | Steven Rostedt <> | Date | Fri, 07 May 2010 11:15:38 -0400 |
| |
On Fri, 2010-05-07 at 11:08 -0400, Mathieu Desnoyers wrote:
> > > Can you show me where the C standard says it is safe to do so ? > > > > No, but it seems safe in the kernel ;-) > > The use of "seems" here does not give me a warm feeling of safety. ;)
Right, which is why I added the below.
> > > > > But that said. There is another option that will conform to this, and > > that is to add flags to registering tracepoints. I already wrote a patch > > for this in trying to do some other work (that I threw away). > > > > > > So here's the proposal. > > > > Change struct tracepoint_func to... > > > > struct tracepoint_func { > > void *func; > > void *data; > > unsigned int flags; > > }; > > > > > > The flags is set when registered. If a function is registered with data, > > then the flags field will be set. Then the calling of the function can > > be: > > > > if ((it_func_ptr)->flags & TP_FL_DATA) > > ((void(*)(proto, void *))(it_func)(args, __data); > > else > > ((void(*)(proto))(it_func)(args); > > > > This would comply with the C standard. > > This would also add a branch on the tracing fast path, which I would like to > avoid. Why can't we simply change all prototypes to take an extra void *__data > parameter instead ?
I'm fine with making the data parameter mandatory with all tracers. Thus the call back must require it. I would then move the data parameter from the end to the beginning.
So a tracepoint with proto, will have a callback:
void callback(void *data, proto);
I'm fine with forcing all callbacks to include a data parameter if you are. This would also make the changes simpler.
-- Steve
| |