Re: [PATCH 2/8] tracing: create automated trace defines

Mathieu Desnoyers
2009-04-16T02:40:28Z

* Jeremy Fitzhardinge (jeremy@goop.org) wrote:
> Mathieu Desnoyers wrote:
>> * Jeremy Fitzhardinge (jeremy@goop.org) wrote:
>>> -#define __DO_TRACE(tp, proto, args) \
>>> - do { \
>>> +#define DEFINE_DO_TRACE(name, proto, args) \
>>> + void __do_trace_##name(struct tracepoint *tp, TP_PROTO(proto)) \
>>>
>>
>> I fear that won't work with "void" prototype. If we need this kind of
>> flexibility, we will need to create a special case for empty prototype.
>>
>
> Yes, that has been a bit awkward. I couldn't find a way to create a
> no-param tracepoint, and so ended up passing a dummy arg. Stupid C
> syntax.
>
> On the other hand, I can get something that actually compiles this way...
>
> J

Is your only problem the fact that tracepoints include rcupdate.h ? This
can easily be solved by moving rcu_read_(un)lock_sched_notrace to a
rcu-update-<insert meaningful name here> and include this header in
rcupdate.h and tracepoint.h.

We could keep the indirection layer you proposed for synchronize_sched()
though, even if it adds an unnecessary function call. It's a slow path
anyway.

If by doing these modifications we succeed in keeping the "void"
parameters working _and_ make your stuff to compile, I think we would
have done something great. :-)

Mathieu

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68