X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-event-notifier-notification.c;h=1a40fed74101f86118aef131e46396c04904cf7a;hb=437d5aa59380583ce1cd14d394a53b398be1275d;hp=f681d9b79d24486ca03fa911967f6cc5fe7e3200;hpb=a83d68311879e618ea79a0f2a9f3e53e05855c7e;p=lttng-modules.git diff --git a/src/lttng-event-notifier-notification.c b/src/lttng-event-notifier-notification.c index f681d9b7..1a40fed7 100644 --- a/src/lttng-event-notifier-notification.c +++ b/src/lttng-event-notifier-notification.c @@ -11,6 +11,8 @@ #include #include #include +#include +#include /* * The capture buffer size needs to be below 1024 bytes to avoid the @@ -94,7 +96,7 @@ end: static int64_t capture_sequence_element_signed(uint8_t *ptr, - const struct lttng_integer_type *type) + const struct lttng_kernel_type_integer *type) { int64_t value = 0; unsigned int size = type->size; @@ -143,7 +145,7 @@ int64_t capture_sequence_element_signed(uint8_t *ptr, static uint64_t capture_sequence_element_unsigned(uint8_t *ptr, - const struct lttng_integer_type *type) + const struct lttng_kernel_type_integer *type) { uint64_t value = 0; unsigned int size = type->size; @@ -193,8 +195,8 @@ uint64_t capture_sequence_element_unsigned(uint8_t *ptr, int capture_sequence(struct lttng_msgpack_writer *writer, struct lttng_interpreter_output *output) { - const struct lttng_integer_type *integer_type = NULL; - const struct lttng_type *nested_type; + const struct lttng_kernel_type_integer *integer_type = NULL; + const struct lttng_kernel_type_common *nested_type; uint8_t *ptr; bool signedness; int ret, i; @@ -207,13 +209,13 @@ int capture_sequence(struct lttng_msgpack_writer *writer, ptr = (uint8_t *) output->u.sequence.ptr; nested_type = output->u.sequence.nested_type; - switch (nested_type->atype) { - case atype_integer: - integer_type = &nested_type->u.integer; + switch (nested_type->type) { + case lttng_kernel_type_integer: + integer_type = lttng_kernel_get_type_integer(nested_type); break; - case atype_enum_nestable: + case lttng_kernel_type_enum: /* Treat enumeration as an integer. */ - integer_type = &nested_type->u.enum_nestable.container_type->u.integer; + integer_type = lttng_kernel_get_type_integer(lttng_kernel_get_type_enum(nested_type)->container_type); break; default: /* Capture of array of non-integer are not supported. */ @@ -352,17 +354,23 @@ void record_error(struct lttng_event_notifier *event_notifier) { struct lttng_event_notifier_group *event_notifier_group = event_notifier->group; + struct lttng_counter *error_counter; size_t dimension_index[1]; int ret; + /* + * lttng_smp_load_acquire paired with lttng_smp_store_release orders + * creation of the error counter and setting error_counter_len + * before the error_counter is used. + */ + error_counter = lttng_smp_load_acquire(&event_notifier_group->error_counter); /* This group may not have an error counter attached to it. */ - if (!event_notifier_group->error_counter) + if (!error_counter) return; dimension_index[0] = event_notifier->error_counter_index; - ret = event_notifier_group->error_counter->ops->counter_add( - event_notifier_group->error_counter->counter, + ret = error_counter->ops->counter_add(error_counter->counter, dimension_index, 1); if (ret) WARN_ON_ONCE(1); @@ -419,7 +427,8 @@ void notification_send(struct lttng_event_notifier_notification *notif, void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_notifier, struct lttng_probe_ctx *lttng_probe_ctx, - const char *stack_data) + const char *stack_data, + struct lttng_kernel_notifier_ctx *notif_ctx) { struct lttng_event_notifier_notification notif = { 0 }; int ret; @@ -433,7 +442,7 @@ void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_n goto end; } - if (unlikely(!list_empty(&event_notifier->capture_bytecode_runtime_head))) { + if (unlikely(notif_ctx->eval_capture)) { struct lttng_bytecode_runtime *capture_bc_runtime; /* @@ -442,7 +451,7 @@ void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_n * `output` parameter to the capture buffer. If the interpreter * fails, append an empty capture to the buffer. */ - list_for_each_entry(capture_bc_runtime, + list_for_each_entry_rcu(capture_bc_runtime, &event_notifier->capture_bytecode_runtime_head, node) { struct lttng_interpreter_output output;