X-Git-Url: https://git.lttng.org/?p=lttng-modules.git;a=blobdiff_plain;f=src%2Flttng-events.c;h=9d3631e4c055336f064042e6ebbd17ef2a00a772;hp=d881bddceb4c94fc0033f42b23b8c9a89b012c40;hb=8a57ec025ffbe56153748fd69b60118862707182;hpb=8a44545778a66f5c473b348ff0231145d59e1d21 diff --git a/src/lttng-events.c b/src/lttng-events.c index d881bddc..9d3631e4 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -89,7 +89,7 @@ int _lttng_type_statedump(struct lttng_session *session, static int _lttng_field_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *field, - size_t nesting); + size_t nesting, const char **prev_field_name_p); void synchronize_trace(void) { @@ -291,7 +291,7 @@ struct lttng_event_notifier_group *lttng_event_notifier_group_create(void) * notifications. */ event_notifier_group->ops = &transport->ops; - event_notifier_group->chan = transport->ops.channel_create( + event_notifier_group->chan = transport->ops.priv->channel_create( transport_name, event_notifier_group, NULL, subbuf_size, num_subbuf, switch_timer_interval, read_timer_interval); @@ -422,7 +422,7 @@ void lttng_event_notifier_group_destroy( event_notifier_group->error_counter = NULL; } - event_notifier_group->ops->channel_destroy(event_notifier_group->chan); + event_notifier_group->ops->priv->channel_destroy(event_notifier_group->chan); module_put(event_notifier_group->transport->owner); list_del(&event_notifier_group->node); @@ -758,7 +758,7 @@ struct lttng_channel *lttng_channel_create(struct lttng_session *session, * headers. Therefore the "chan" information used as input * should be already accessible. */ - chan->chan = transport->ops.channel_create(transport_name, + chan->chan = transport->ops.priv->channel_create(transport_name, chan, buf_addr, subbuf_size, num_subbuf, switch_timer_interval, read_timer_interval); if (!chan->chan) @@ -790,7 +790,7 @@ active: static void _lttng_channel_destroy(struct lttng_channel *chan) { - chan->ops->channel_destroy(chan->chan); + chan->ops->priv->channel_destroy(chan->chan); module_put(chan->transport->owner); list_del(&chan->list); lttng_kernel_destroy_context(chan->ctx); @@ -2449,7 +2449,7 @@ static int lttng_enabler_attach_filter_bytecode(struct lttng_enabler *enabler, struct lttng_kernel_abi_filter_bytecode __user *bytecode) { - struct lttng_bytecode_node *bytecode_node; + struct lttng_kernel_bytecode_node *bytecode_node; uint32_t bytecode_len; int ret; @@ -2509,7 +2509,7 @@ int lttng_event_add_callsite(struct lttng_kernel_event_common *event, static void lttng_enabler_destroy(struct lttng_enabler *enabler) { - struct lttng_bytecode_node *filter_node, *tmp_filter_node; + struct lttng_kernel_bytecode_node *filter_node, *tmp_filter_node; /* Destroy filter bytecode */ list_for_each_entry_safe(filter_node, tmp_filter_node, @@ -2604,7 +2604,7 @@ int lttng_event_notifier_enabler_attach_capture_bytecode( struct lttng_event_notifier_enabler *event_notifier_enabler, struct lttng_kernel_abi_capture_bytecode __user *bytecode) { - struct lttng_bytecode_node *bytecode_node; + struct lttng_kernel_bytecode_node *bytecode_node; struct lttng_enabler *enabler = lttng_event_notifier_enabler_as_enabler(event_notifier_enabler); uint32_t bytecode_len; @@ -2677,7 +2677,7 @@ void lttng_session_sync_event_enablers(struct lttng_session *session) list_for_each_entry(event_recorder_priv, &session->events, node) { struct lttng_kernel_event_recorder *event_recorder = event_recorder_priv->pub; struct lttng_enabler_ref *enabler_ref; - struct lttng_bytecode_runtime *runtime; + struct lttng_kernel_bytecode_runtime *runtime; int enabled = 0, has_enablers_without_filter_bytecode = 0; int nr_filters = 0; @@ -2771,7 +2771,7 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group list_for_each_entry(event_notifier_priv, &event_notifier_group->event_notifiers_head, node) { struct lttng_kernel_event_notifier *event_notifier = event_notifier_priv->pub; struct lttng_enabler_ref *enabler_ref; - struct lttng_bytecode_runtime *runtime; + struct lttng_kernel_bytecode_runtime *runtime; int enabled = 0, has_enablers_without_filter_bytecode = 0; int nr_filters = 0, nr_captures = 0; @@ -2852,7 +2852,7 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group int lttng_metadata_output_channel(struct lttng_metadata_stream *stream, struct channel *chan, bool *coherent) { - struct lib_ring_buffer_ctx ctx; + struct lttng_kernel_ring_buffer_ctx ctx; int ret = 0; size_t len, reserve_len; @@ -2879,14 +2879,14 @@ int lttng_metadata_output_channel(struct lttng_metadata_stream *stream, if (!len) goto end; reserve_len = min_t(size_t, - stream->transport->ops.packet_avail_size(chan), + stream->transport->ops.priv->packet_avail_size(chan), len); lib_ring_buffer_ctx_init(&ctx, chan, reserve_len, - sizeof(char), -1, NULL); + sizeof(char), NULL); /* * If reservation failed, return an error to the caller. */ - ret = stream->transport->ops.event_reserve(&ctx, 0); + ret = stream->transport->ops.event_reserve(&ctx); if (ret != 0) { printk(KERN_WARNING "LTTng: Metadata event reservation failed\n"); stream->coherent = false; @@ -3052,6 +3052,7 @@ int _lttng_struct_type_statedump(struct lttng_session *session, const struct lttng_kernel_type_struct *type, size_t nesting) { + const char *prev_field_name = NULL; int ret; uint32_t i, nr_fields; unsigned int alignment; @@ -3068,7 +3069,7 @@ int _lttng_struct_type_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *iter_field; iter_field = type->fields[i]; - ret = _lttng_field_statedump(session, iter_field, nesting + 1); + ret = _lttng_field_statedump(session, iter_field, nesting + 1, &prev_field_name); if (ret) return ret; } @@ -3110,11 +3111,18 @@ int _lttng_struct_field_statedump(struct lttng_session *session, static int _lttng_variant_type_statedump(struct lttng_session *session, const struct lttng_kernel_type_variant *type, - size_t nesting) + size_t nesting, + const char *prev_field_name) { + const char *tag_name; int ret; uint32_t i, nr_choices; + tag_name = type->tag_name; + if (!tag_name) + tag_name = prev_field_name; + if (!tag_name) + return -EINVAL; /* * CTF 1.8 does not allow expressing nonzero variant alignment in a nestable way. */ @@ -3125,7 +3133,7 @@ int _lttng_variant_type_statedump(struct lttng_session *session, return ret; ret = lttng_metadata_printf(session, "variant <_%s> {\n", - type->tag_name); + tag_name); if (ret) return ret; nr_choices = type->nr_choices; @@ -3133,7 +3141,7 @@ int _lttng_variant_type_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *iter_field; iter_field = type->choices[i]; - ret = _lttng_field_statedump(session, iter_field, nesting + 1); + ret = _lttng_field_statedump(session, iter_field, nesting + 1, NULL); if (ret) return ret; } @@ -3151,12 +3159,14 @@ int _lttng_variant_type_statedump(struct lttng_session *session, static int _lttng_variant_field_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *field, - size_t nesting) + size_t nesting, + const char *prev_field_name) { int ret; ret = _lttng_variant_type_statedump(session, - lttng_kernel_get_type_variant(field->type), nesting); + lttng_kernel_get_type_variant(field->type), nesting, + prev_field_name); if (ret) return ret; return lttng_field_name_statedump(session, field, nesting); @@ -3219,7 +3229,8 @@ int _lttng_array_field_statedump(struct lttng_session *session, static int _lttng_sequence_field_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *field, - size_t nesting) + size_t nesting, + const char *prev_field_name) { int ret; const char *length_name; @@ -3230,6 +3241,10 @@ int _lttng_sequence_field_statedump(struct lttng_session *session, WARN_ON_ONCE(!sequence_type); length_name = sequence_type->length_name; + if (!length_name) + length_name = prev_field_name; + if (!length_name) + return -EINVAL; if (sequence_type->alignment) { ret = print_tabs(session, nesting); @@ -3264,7 +3279,7 @@ int _lttng_sequence_field_statedump(struct lttng_session *session, ret = lttng_metadata_printf(session, " _%s[ _%s ];\n", field->name, - sequence_type->length_name); + length_name); return ret; } @@ -3487,7 +3502,7 @@ int _lttng_type_statedump(struct lttng_session *session, case lttng_kernel_type_variant: ret = _lttng_variant_type_statedump(session, lttng_kernel_get_type_variant(type), - nesting); + nesting, NULL); break; /* Nested arrays and sequences are not supported yet. */ @@ -3506,10 +3521,14 @@ int _lttng_type_statedump(struct lttng_session *session, static int _lttng_field_statedump(struct lttng_session *session, const struct lttng_kernel_event_field *field, - size_t nesting) + size_t nesting, + const char **prev_field_name_p) { + const char *prev_field_name = NULL; int ret = 0; + if (prev_field_name_p) + prev_field_name = *prev_field_name_p; switch (field->type->type) { case lttng_kernel_type_integer: ret = _lttng_integer_field_statedump(session, field, nesting); @@ -3527,16 +3546,18 @@ int _lttng_field_statedump(struct lttng_session *session, ret = _lttng_array_field_statedump(session, field, nesting); break; case lttng_kernel_type_sequence: - ret = _lttng_sequence_field_statedump(session, field, nesting); + ret = _lttng_sequence_field_statedump(session, field, nesting, prev_field_name); break; case lttng_kernel_type_variant: - ret = _lttng_variant_field_statedump(session, field, nesting); + ret = _lttng_variant_field_statedump(session, field, nesting, prev_field_name); break; default: WARN_ON_ONCE(1); return -EINVAL; } + if (prev_field_name_p) + *prev_field_name_p = field->name; return ret; } @@ -3544,6 +3565,7 @@ static int _lttng_context_metadata_statedump(struct lttng_session *session, struct lttng_kernel_ctx *ctx) { + const char *prev_field_name = NULL; int ret = 0; int i; @@ -3552,7 +3574,7 @@ int _lttng_context_metadata_statedump(struct lttng_session *session, for (i = 0; i < ctx->nr_fields; i++) { const struct lttng_kernel_ctx_field *field = &ctx->fields[i]; - ret = _lttng_field_statedump(session, field->event_field, 2); + ret = _lttng_field_statedump(session, field->event_field, 2, &prev_field_name); if (ret) return ret; } @@ -3563,6 +3585,7 @@ static int _lttng_fields_metadata_statedump(struct lttng_session *session, struct lttng_kernel_event_recorder *event_recorder) { + const char *prev_field_name = NULL; const struct lttng_kernel_event_desc *desc = event_recorder->priv->parent.desc; int ret = 0; int i; @@ -3570,7 +3593,7 @@ int _lttng_fields_metadata_statedump(struct lttng_session *session, for (i = 0; i < desc->nr_fields; i++) { const struct lttng_kernel_event_field *field = desc->fields[i]; - ret = _lttng_field_statedump(session, field, 2); + ret = _lttng_field_statedump(session, field, 2, &prev_field_name); if (ret) return ret; }