Re: [PATCH 3/7] V2 add syscall tracepoints

From: Li Zefan
Date: Wed Jun 24 2009 - 22:20:03 EST


> -#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)


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/