Messages in this thread | | | Date | Wed, 15 Apr 2009 22:34:56 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [PATCH 2/8] tracing: create automated trace defines |
| |
* 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
| |