X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=probes%2Flttng-events.h;h=f86bd39d517b87cfcdea38d7cf443b4fbf8e7096;hb=09d8de2b842b6ead8822172adb56ae3ed4c1fdfa;hp=d517da725d580a0f1f61a35e61aa960abdc7390f;hpb=d71e64719b9308db558e6b12a5266054e995ed15;p=lttng-modules.git diff --git a/probes/lttng-events.h b/probes/lttng-events.h index d517da72..f86bd39d 100644 --- a/probes/lttng-events.h +++ b/probes/lttng-events.h @@ -39,6 +39,15 @@ PARAMS(print)) \ DEFINE_EVENT(name, name, PARAMS(proto), PARAMS(args)) +#undef TRACE_EVENT_NOARGS +#define TRACE_EVENT_NOARGS(name, tstruct, assign, print) \ + DECLARE_EVENT_CLASS_NOARGS(name, \ + PARAMS(tstruct), \ + PARAMS(assign), \ + PARAMS(print)) \ + DEFINE_EVENT_NOARGS(name, name) + + #undef DEFINE_EVENT_PRINT #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args)) @@ -70,6 +79,10 @@ #define DEFINE_EVENT(_template, _name, _proto, _args) \ void trace_##_name(_proto); +#undef DEFINE_EVENT_NOARGS +#define DEFINE_EVENT_NOARGS(_template, _name) \ +void trace_##_name(void *__data); + #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) /* @@ -174,15 +187,18 @@ void trace_##_name(_proto); #undef TP_STRUCT__entry #define TP_STRUCT__entry(args...) args /* Only one used in this phase */ -#undef DECLARE_EVENT_CLASS -#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \ +#undef DECLARE_EVENT_CLASS_NOARGS +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ static const struct lttng_event_field __event_fields___##_name[] = { \ _tstruct \ }; -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) +#undef DECLARE_EVENT_CLASS +#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \ + DECLARE_EVENT_CLASS_NOARGS(_name, PARAMS(_tstruct), PARAMS(_assign), \ + PARAMS(_print)) -#undef __type_integer +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) /* * Stage 3 of the trace events. @@ -199,32 +215,65 @@ void trace_##_name(_proto); #define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \ static void __event_probe__##_name(void *__data, _proto); +#undef DECLARE_EVENT_CLASS_NOARGS +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ +static void __event_probe__##_name(void *__data); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 3.9 of the trace events. + * + * Create event descriptions. + */ + +/* Named field types must be defined in lttng-types.h */ + +#include "lttng-events-reset.h" /* Reset all macros within TRACE_EVENT */ + +#ifndef TP_PROBE_CB +#define TP_PROBE_CB(_template) &__event_probe__##_template +#endif + +#undef DEFINE_EVENT_NOARGS +#define DEFINE_EVENT_NOARGS(_template, _name) \ +static const struct lttng_event_desc __event_desc___##_name = { \ + .fields = __event_fields___##_template, \ + .name = #_name, \ + .probe_callback = (void *) TP_PROBE_CB(_template), \ + .nr_fields = ARRAY_SIZE(__event_fields___##_template), \ + .owner = THIS_MODULE, \ +}; + +#undef DEFINE_EVENT +#define DEFINE_EVENT(_template, _name, _proto, _args) \ + DEFINE_EVENT_NOARGS(_template, _name) + #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + /* * Stage 4 of the trace events. * - * Create an array of events. + * Create an array of event description pointers. */ /* Named field types must be defined in lttng-types.h */ #include "lttng-events-reset.h" /* Reset all macros within TRACE_EVENT */ +#undef DEFINE_EVENT_NOARGS +#define DEFINE_EVENT_NOARGS(_template, _name) \ + &__event_desc___##_name, + #undef DEFINE_EVENT #define DEFINE_EVENT(_template, _name, _proto, _args) \ - { \ - .fields = __event_fields___##_template, \ - .name = #_name, \ - .probe_callback = (void *) &__event_probe__##_template,\ - .nr_fields = ARRAY_SIZE(__event_fields___##_template), \ - .owner = THIS_MODULE, \ - }, + DEFINE_EVENT_NOARGS(_template, _name) #define TP_ID1(_token, _system) _token##_system #define TP_ID(_token, _system) TP_ID1(_token, _system) -static const struct lttng_event_desc TP_ID(__event_desc___, TRACE_SYSTEM)[] = { +static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = { #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) }; @@ -242,7 +291,7 @@ static const struct lttng_event_desc TP_ID(__event_desc___, TRACE_SYSTEM)[] = { #define TP_ID(_token, _system) TP_ID1(_token, _system) /* non-const because list head will be modified when registered. */ -static struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { +static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM), .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)), }; @@ -522,6 +571,37 @@ static void __event_probe__##_name(void *__data, _proto) \ _assign \ } +#undef DECLARE_EVENT_CLASS_NOARGS +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ +static void __event_probe__##_name(void *__data) \ +{ \ + struct ltt_event *__event = __data; \ + struct ltt_channel *__chan = __event->chan; \ + struct lib_ring_buffer_ctx __ctx; \ + size_t __event_len, __event_align; \ + int __ret; \ + \ + if (unlikely(!ACCESS_ONCE(__chan->session->active))) \ + return; \ + if (unlikely(!ACCESS_ONCE(__chan->enabled))) \ + return; \ + if (unlikely(!ACCESS_ONCE(__event->enabled))) \ + return; \ + __event_len = 0; \ + __event_align = 1; \ + lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \ + __event_align, -1); \ + __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ + if (__ret < 0) \ + return; \ + /* Control code (field ordering) */ \ + _tstruct \ + __chan->ops->event_commit(&__ctx); \ + return; \ + /* Copy code, steered by control code */ \ + _assign \ +} + #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) /* @@ -539,6 +619,7 @@ static void __event_probe__##_name(void *__data, _proto) \ #define module_exit_eval1(_token, _system) module_exit(_token##_system) #define module_exit_eval(_token, _system) module_exit_eval1(_token, _system) +#ifndef TP_MODULE_OVERRIDE static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void) { wrapper_vmalloc_sync_all(); @@ -553,8 +634,13 @@ static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void) } module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM); +#endif #undef module_init_eval #undef module_exit_eval #undef TP_ID1 #undef TP_ID + +#undef TP_PROTO +#undef TP_ARGS +#undef TRACE_EVENT_FLAGS