X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-events.h;h=7e70ea40e0b096c8c89fcc6b84c7928c2bb7b197;hb=10544ee8af31afb239e3dfa71cb2fe09d3de3771;hp=41164ac348eb1edf14e83960f07027205cb037ca;hpb=c42416df21bb28b9b19ca509f7242f660c5469b2;p=lttng-ust.git diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h index 41164ac3..7e70ea40 100644 --- a/include/lttng/ust-events.h +++ b/include/lttng/ust-events.h @@ -64,6 +64,7 @@ struct lttng_session; struct lttng_ust_lib_ring_buffer_ctx; struct lttng_ust_context_app; struct lttng_event_field; +struct lttng_event_notifier_group; /* * Data structures used by tracepoint event declarations, and by the @@ -315,6 +316,7 @@ struct lttng_ctx_value { enum lttng_ust_dynamic_type sel; union { int64_t s64; + uint64_t u64; const char *str; double d; } u; @@ -434,6 +436,8 @@ enum lttng_bytecode_interpreter_ret { /* Other bits are kept for future use. */ }; +struct lttng_interpreter_output; + /* * This structure is used in the probes. More specifically, the `filter` and * `node` fields are explicity used in the probes. When modifying this @@ -446,6 +450,9 @@ struct lttng_bytecode_runtime { union { uint64_t (*filter)(void *interpreter_data, const char *interpreter_stack_data); + uint64_t (*capture)(void *interpreter_data, + const char *interpreter_stack_data, + struct lttng_interpreter_output *interpreter_output); } interpreter_funcs; int link_failed; struct cds_list_head node; /* list of bytecode runtime in event */ @@ -504,9 +511,12 @@ struct lttng_event { struct lttng_event_notifier { uint64_t user_token; + uint64_t error_counter_index; int enabled; int registered; /* has reg'd tracepoint probe */ + size_t num_captures; /* Needed to allocate the msgpack array. */ struct cds_list_head filter_bytecode_runtime_head; + struct cds_list_head capture_bytecode_runtime_head; int has_enablers_without_bytecode; struct cds_list_head enablers_ref_head; const struct lttng_event_desc *desc; @@ -608,6 +618,36 @@ struct lttng_channel { int tstate:1; /* Transient enable state */ }; +#define LTTNG_COUNTER_DIMENSION_MAX 8 + +struct lttng_counter_dimension { + uint64_t size; + uint64_t underflow_index; + uint64_t overflow_index; + uint8_t has_underflow; + uint8_t has_overflow; +}; + +struct lttng_counter_ops { + struct lib_counter *(*counter_create)(size_t nr_dimensions, + const struct lttng_counter_dimension *dimensions, + int64_t global_sum_step, + int global_counter_fd, + int nr_counter_cpu_fds, + const int *counter_cpu_fds, + bool is_daemon); + void (*counter_destroy)(struct lib_counter *counter); + int (*counter_add)(struct lib_counter *counter, + const size_t *dimension_indexes, int64_t v); + int (*counter_read)(struct lib_counter *counter, + const size_t *dimension_indexes, int cpu, + int64_t *value, bool *overflow, bool *underflow); + int (*counter_aggregate)(struct lib_counter *counter, + const size_t *dimension_indexes, int64_t *value, + bool *overflow, bool *underflow); + int (*counter_clear)(struct lib_counter *counter, const size_t *dimension_indexes); +}; + #define LTTNG_UST_STACK_CTX_PADDING 32 struct lttng_stack_ctx { struct lttng_event *event; @@ -669,6 +709,14 @@ struct lttng_session { struct lttng_ctx *ctx; /* contexts for filters. */ }; +struct lttng_counter { + int objd; + struct lttng_event_notifier_group *event_notifier_group; /* owner */ + struct lttng_counter_transport *transport; + struct lib_counter *counter; + struct lttng_counter_ops *ops; +}; + struct lttng_event_notifier_group { int objd; void *owner; @@ -678,6 +726,9 @@ struct lttng_event_notifier_group { struct cds_list_head event_notifiers_head; /* list of event_notifiers */ struct lttng_ust_event_notifier_ht event_notifiers_ht; /* hashtable of event_notifiers */ struct lttng_ctx *ctx; /* contexts for filters. */ + + struct lttng_counter *error_counter; + size_t error_counter_len; }; struct lttng_transport { @@ -687,6 +738,13 @@ struct lttng_transport { const struct lttng_ust_lib_ring_buffer_config *client_config; }; +struct lttng_counter_transport { + char *name; + struct cds_list_head node; + struct lttng_counter_ops ops; + const struct lib_counter_config *client_config; +}; + struct lttng_session *lttng_session_create(void); int lttng_session_enable(struct lttng_session *session); int lttng_session_disable(struct lttng_session *session); @@ -694,7 +752,8 @@ int lttng_session_statedump(struct lttng_session *session); void lttng_session_destroy(struct lttng_session *session); void lttng_event_notifier_notification_send( - struct lttng_event_notifier *event_notifier); + struct lttng_event_notifier *event_notifier, + const char *stack_data); struct lttng_channel *lttng_channel_create(struct lttng_session *session, const char *transport_name, @@ -712,12 +771,15 @@ int lttng_channel_disable(struct lttng_channel *channel); int lttng_attach_context(struct lttng_ust_context *context_param, union ust_args *uargs, struct lttng_ctx **ctx, struct lttng_session *session); -int lttng_session_context_init(struct lttng_ctx **ctx); - void lttng_transport_register(struct lttng_transport *transport); void lttng_transport_unregister(struct lttng_transport *transport); -void synchronize_trace(void); +void lttng_counter_transport_register(struct lttng_counter_transport *transport); +void lttng_counter_transport_unregister(struct lttng_counter_transport *transport); + +struct lttng_counter *lttng_ust_counter_create( + const char *counter_transport_name, + size_t number_dimensions, const struct lttng_counter_dimension *dimensions); int lttng_probe_register(struct lttng_probe_desc *desc); void lttng_probe_unregister(struct lttng_probe_desc *desc); @@ -803,6 +865,7 @@ extern const struct lttng_ust_client_lib_ring_buffer_client_cb *lttng_client_cal extern const struct lttng_ust_client_lib_ring_buffer_client_cb *lttng_client_callbacks_overwrite; struct lttng_transport *lttng_transport_find(const char *name); +struct lttng_counter_transport *lttng_counter_transport_find(const char *name); int lttng_probes_get_event_list(struct lttng_ust_tracepoint_list *list); void lttng_probes_prune_event_list(struct lttng_ust_tracepoint_list *list); @@ -850,6 +913,8 @@ int lttng_enabler_attach_exclusion(struct lttng_enabler *enabler, void lttng_enabler_event_link_bytecode(struct lttng_event *event, struct lttng_enabler *enabler); void lttng_filter_sync_state(struct lttng_bytecode_runtime *runtime); +int lttng_session_context_init(struct lttng_ctx **ctx); + #ifdef __cplusplus }