X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=probes%2Flttng-events.h;h=a739bbc8e20dce85b35fdaa3476ab0f591bc220e;hb=97ca2c5484815a67b70fcf2b1772eb1b2c2e5633;hp=6631fbcd1ce82d21dc1ca1de667f01be6488c455;hpb=19c57fbfa70c032b744088b6273c43e7c8876c38;p=lttng-modules.git diff --git a/probes/lttng-events.h b/probes/lttng-events.h index 6631fbcd..a739bbc8 100644 --- a/probes/lttng-events.h +++ b/probes/lttng-events.h @@ -1,22 +1,11 @@ -#include -#include #include -#include +#include "lttng.h" +#include "lttng-types.h" +#include "../wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */ +#include "../wrapper/ringbuffer/frontend_types.h" #include "../ltt-events.h" #include "../ltt-tracer-core.h" -struct lttng_event_field { - const char *name; - const struct lttng_type type; -}; - -struct lttng_event_desc { - const struct lttng_event_field *fields; - const char *name; - void *probe_callback; - unsigned int nr_fields; -}; - /* * Macro declarations used for all stages. */ @@ -52,6 +41,28 @@ struct lttng_event_desc { TRACE_EVENT(name, PARAMS(proto), PARAMS(args), \ PARAMS(tstruct), PARAMS(assign), PARAMS(print)) \ +/* + * Stage 0.1 of the trace events. + * + * Create dummy trace calls for each events, verifying that the LTTng module + * TRACE_EVENT headers match the kernel arguments. Will be optimized out by the + * compiler. + */ + +#include "lttng-events-reset.h" /* Reset all macros within TRACE_EVENT */ + +#undef TP_PROTO +#define TP_PROTO(args...) args + +#undef TP_ARGS +#define TP_ARGS(args...) args + +#undef DEFINE_EVENT +#define DEFINE_EVENT(_template, _name, _proto, _args) \ +void trace_##_name(_proto); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + /* * Stage 1 of the trace events. * @@ -162,6 +173,25 @@ static const struct lttng_event_desc TP_ID(__event_desc___, TRACE_SYSTEM)[] = { #undef TP_ID1 #undef TP_ID + +/* + * Stage 2.1 of the trace events. + * + * Create a toplevel descriptor for the whole probe. + */ + +#define TP_ID1(_token, _system) _token##_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) = { + .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM), + .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)), +}; + +#undef TP_ID1 +#undef TP_ID + /* * Stage 3 of the trace events. * @@ -570,45 +600,20 @@ static void __event_probe__##_name(void *__data, _proto) \ static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void) { int ret; - int i; + wrapper_vmalloc_sync_all(); ret = TP_ID(__lttng_types_init__, TRACE_SYSTEM)(); if (ret) return ret; - for (i = 0; i < ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)); i++) { - const struct lttng_event_desc *event_desc; - - event_desc = &TP_ID(__event_desc___, TRACE_SYSTEM)[i]; - ret = ltt_probe_register(event_desc->name, - event_desc->probe_callback); - if (ret) - goto error; - } - return 0; - -error: - for (i--; i >= 0; i--) { - const struct lttng_event_desc *event_desc; - - event_desc = &TP_ID(__event_desc___, TRACE_SYSTEM)[i]; - ltt_probe_unregister(event_desc->name); - } - return ret; + return ltt_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM)); } module_init_eval(__lttng_events_init__, TRACE_SYSTEM); static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void) { - int i; - - for (i = 0; i < ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)); i++) { - const struct lttng_event_desc *event_desc; - - event_desc = &TP_ID(__event_desc___, TRACE_SYSTEM)[i]; - ltt_probe_unregister(event_desc->name); - } TP_ID(__lttng_types_exit__, TRACE_SYSTEM)(); + ltt_probe_unregister(&TP_ID(__probe_desc___, TRACE_SYSTEM)); } module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM);