Messages in this thread | | | Date | Thu, 25 Jun 2009 10:20:41 +0800 | From | Li Zefan <> | Subject | Re: [PATCH 3/7] V2 add syscall tracepoints |
| |
> -#define DECLARE_TRACE(name, proto, args) \ > +#define DECLARE_TRACE_WITH_CALLBACK(name, proto, args, reg, unreg) \ > extern struct tracepoint __tracepoint_##name; \ > static inline void trace_##name(proto) \ > { \ > @@ -71,13 +73,29 @@ struct tracepoint { > } \ > static inline int register_trace_##name(void (*probe)(proto)) \ > { \ > - return tracepoint_probe_register(#name, (void *)probe); \ > + int ret; \ > + void (*func)(void) = (void (*)(void))reg; \
The explicit cast seems unnecessary.
> + \ > + ret = tracepoint_probe_register(#name, (void *)probe); \ > + if (func && !ret) \ > + func(); \ > + return ret; \ > } \ > static inline int unregister_trace_##name(void (*probe)(proto)) \ > { \ > - return tracepoint_probe_unregister(#name, (void *)probe);\ > + int ret; \ > + void (*func)(void) = (void (*)(void))unreg; \ > + \ > + ret = tracepoint_probe_unregister(#name, (void *)probe);\ > + if (func && !ret) \ > + func(); \ > + return ret; \ > } > > + > +#define DECLARE_TRACE(name, proto, args) \ > + DECLARE_TRACE_WITH_CALLBACK(name, TP_PROTO(proto), TP_ARGS(args), 0, 0);
I think DECLARE_TRACE_WITH_CALLBACK(..., NULL, NULL) is better.
> + > #define DEFINE_TRACE(name) \ > static const char __tpstrtab_##name[] \ > __attribute__((section("__tracepoints_strings"))) = #name; \ > @@ -94,7 +112,7 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, > struct tracepoint *end); > > #else /* !CONFIG_TRACEPOINTS */ > -#define DECLARE_TRACE(name, proto, args) \ > +#define DECLARE_TRACE_WITH_CALLBACK(name, proto, args, reg, unreg) \ > static inline void _do_trace_##name(struct tracepoint *tp, proto) \ > { } \ > static inline void trace_##name(proto) \ > @@ -108,6 +126,9 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, > return -ENOSYS; \ > } > > +#define DECLARE_TRACE(name, proto, args) \ > + DECLARE_TRACE_WITH_CALLBACK(name, TP_PROTO(proto), TP_ARGS(args), 0, 0);
ditto
> + > #define DEFINE_TRACE(name) > #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) > #define EXPORT_TRACEPOINT_SYMBOL(name)
| |