lkml.org 
[lkml]   [2009]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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)




\
 
 \ /
  Last update: 2009-06-25 04:23    [W:0.090 / U:0.716 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site