X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.h;h=5325c64fcc08c9839ecdedc26181ded343718d81;hp=6f3588a54f6930f9f4a105b4ef84084420d939dd;hb=refs%2Fheads%2Fsow-2020-0002-rev3;hpb=ab5be9fa2eb5ba9600a82cd18fd3cfcbac69169a diff --git a/src/bin/lttng-sessiond/ust-app.h b/src/bin/lttng-sessiond/ust-app.h index 6f3588a54..5325c64fc 100644 --- a/src/bin/lttng-sessiond/ust-app.h +++ b/src/bin/lttng-sessiond/ust-app.h @@ -11,7 +11,9 @@ #include +#include #include +#include #include "trace-ust.h" #include "ust-registry.h" @@ -22,7 +24,7 @@ /* Process name (short). */ #define UST_APP_PROCNAME_LEN 16 -struct lttng_filter_bytecode; +struct lttng_bytecode; struct lttng_ust_filter_bytecode; extern int ust_consumerd64_fd, ust_consumerd32_fd; @@ -39,9 +41,10 @@ struct ust_app_notify_sock_obj { struct ust_app_ht_key { const char *name; - const struct lttng_filter_bytecode *filter; + const struct lttng_bytecode *filter; enum lttng_ust_loglevel_type loglevel_type; const struct lttng_event_exclusion *exclusion; + uint64_t tracer_token; }; /* @@ -93,6 +96,12 @@ struct ust_app_stream_list { struct cds_list_head head; }; +/* counter list containing ust_app_counter. */ +struct ust_app_counter_list { + unsigned int count; + struct cds_list_head head; +}; + struct ust_app_ctx { int handle; struct lttng_ust_context_attr ctx; @@ -108,8 +117,26 @@ struct ust_app_event { struct lttng_ust_event attr; char name[LTTNG_UST_SYM_NAME_LEN]; struct lttng_ht_node_str node; - struct lttng_filter_bytecode *filter; + struct lttng_bytecode *filter; + struct lttng_event_exclusion *exclusion; +}; + +struct ust_app_event_notifier_rule { + int enabled; + uint64_t error_counter_index; + int handle; + struct lttng_ust_object_data *obj; + /* Holds a strong reference. */ + struct lttng_trigger *trigger; + /* Unique ID returned by the tracer to identify this event notifier. */ + uint64_t token; + struct lttng_ht_node_u64 node; + /* The trigger object owns the filter. */ + const struct lttng_bytecode *filter; + /* Owned by this. */ struct lttng_event_exclusion *exclusion; + /* For delayed reclaim. */ + struct rcu_head rcu_head; }; struct ust_app_stream { @@ -122,6 +149,13 @@ struct ust_app_stream { struct cds_list_head list; }; +struct ust_app_map_counter { + int handle; + struct lttng_ust_object_data *obj; + /* Using a list of counters to keep order. */ + struct cds_list_head list; +}; + struct ust_app_channel { int enabled; int handle; @@ -168,6 +202,43 @@ struct ust_app_channel { struct rcu_head rcu_head; }; +struct ust_app_map { + int enabled; + int handle; + /* Counters were sent to the UST tracer. */ + int is_sent; + /* + * FIXME frdeso: what is difference between key and tracing_map_id + * Unique key used to identify the map. + */ + uint64_t key; + /* Id of the tracing map set on creation. */ + uint64_t tracing_map_id; + bool coalesce_hits; + enum lttng_map_bitness bitness; + char name[LTTNG_UST_SYM_NAME_LEN]; + struct lttng_ust_object_data *obj; + struct ust_app_counter_list counters; + /* Session pointer that owns this object. */ + struct ust_app_session *session; + struct lttng_ht *events; + struct ltt_ust_map_dead_pid_kv_values *dead_app_kv_values; + + size_t bucket_count; + struct ustctl_daemon_counter *map_handle; + /* + * Node indexed by channel name in the channels' hash table of a session. + */ + struct lttng_ht_node_str node; + /* + * Node indexed by UST channel object descriptor (handle). Stored in the + * ust_objd hash table in the ust_app object. + */ + struct lttng_ht_node_ulong ust_objd_node; + /* For delayed reclaim */ + struct rcu_head rcu_head; +}; + struct ust_app_session { /* * Lock protecting this session's ust app interaction. Held @@ -190,6 +261,7 @@ struct ust_app_session { uint64_t tracing_id; uint64_t id; /* Unique session identifier */ struct lttng_ht *channels; /* Registered channels */ + struct lttng_ht *maps; /* Registered maps */ struct lttng_ht_node_u64 node; /* * Node indexed by UST session object descriptor (handle). Stored in the @@ -274,7 +346,11 @@ struct ust_app { /* * Hash table containing ust_app_channel indexed by channel objd. */ - struct lttng_ht *ust_objd; + struct lttng_ht *ust_chan_objd; + /* + * Hash table containing ust_app_map indexed by map objd. + */ + struct lttng_ht *ust_map_objd; /* * Hash table containing ust_app_session indexed by objd. */ @@ -292,6 +368,25 @@ struct ust_app { * Used for path creation */ time_t registration_time; + /* + * Event notifier + */ + struct { + /* + * Handle to the lttng_ust object representing the event + * notifier group. + */ + struct lttng_ust_object_data *object; + struct lttng_pipe *event_pipe; + struct lttng_ust_object_data *counter; + struct lttng_ust_object_data **counter_cpu; + int nr_counter_cpu; + } event_notifier_group; + /* + * Hashtable indexing the application's event notifier rule's + * (ust_app_event_notifier_rule) by their token's value. + */ + struct lttng_ht *token_to_event_notifier_rule_ht; }; #ifdef HAVE_LIBLTTNG_UST_CTL @@ -305,25 +400,45 @@ int ust_app_stop_trace_all(struct ltt_ust_session *usess); int ust_app_destroy_trace_all(struct ltt_ust_session *usess); int ust_app_list_events(struct lttng_event **events); int ust_app_list_event_fields(struct lttng_event_field **fields); -int ust_app_create_event_glb(struct ltt_ust_session *usess, +int ust_app_create_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); int ust_app_disable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan); int ust_app_enable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan); -int ust_app_enable_event_glb(struct ltt_ust_session *usess, +int ust_app_enable_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); -int ust_app_disable_event_glb(struct ltt_ust_session *usess, +int ust_app_disable_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); +int ust_app_map_list_values(const struct ltt_ust_session *usess, + struct ltt_ust_map *umap, + const struct lttng_map_query *query, + struct lttng_map_content **map_content); +int ust_app_enable_map_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap); +int ust_app_disable_map_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap); +int ust_app_create_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent); +int ust_app_enable_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent); +int ust_app_disable_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent); + int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_context *uctx); void ust_app_global_update(struct ltt_ust_session *usess, struct ust_app *app); void ust_app_global_update_all(struct ltt_ust_session *usess); +void ust_app_global_update_event_notifier_rules(struct ust_app *app); +void ust_app_global_update_all_event_notifier_rules(void); + +void ust_app_update_event_notifier_error_count(struct lttng_trigger *trigger); void ust_app_clean_list(void); int ust_app_ht_alloc(void); struct ust_app *ust_app_find_by_pid(pid_t pid); struct ust_app_stream *ust_app_alloc_stream(void); +struct ust_app_map_counter *ust_app_alloc_map_counter(void); int ust_app_recv_registration(int sock, struct ust_register_msg *msg); int ust_app_recv_notify(int sock); void ust_app_add(struct ust_app *app); @@ -354,6 +469,9 @@ enum lttng_error_code ust_app_create_channel_subdirectories( int ust_app_release_object(struct ust_app *app, struct lttng_ust_object_data *data); enum lttng_error_code ust_app_clear_session(struct ltt_session *session); +enum lttng_error_code ust_app_open_packets(struct ltt_session *session); + +int ust_app_setup_event_notifier_group(struct ust_app *app); static inline int ust_app_supported(void) @@ -443,6 +561,17 @@ static inline void ust_app_global_update(struct ltt_ust_session *usess, struct ust_app *app) {} static inline +void ust_app_global_update_event_notifier_rules(struct ust_app *app) +{} +static inline +void ust_app_global_update_all_event_notifier_rules(void) +{} +static inline +int ust_app_setup_event_notifier_group(struct ust_app *app) +{ + return 0; +} +static inline int ust_app_disable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { @@ -455,24 +584,62 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess, return 0; } static inline -int ust_app_create_event_glb(struct ltt_ust_session *usess, +int ust_app_create_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) { return 0; } static inline -int ust_app_disable_event_glb(struct ltt_ust_session *usess, +int ust_app_disable_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) { return 0; } static inline -int ust_app_enable_event_glb(struct ltt_ust_session *usess, +int ust_app_enable_channel_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) { return 0; } static inline +int ust_app_disable_map_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap) +{ + return 0; +} +static inline +int ust_app_map_list_values(const struct ltt_ust_session *usess, + struct ltt_ust_map *umap, + const struct lttng_map_query *query, + struct lttng_map_content **map_content) +{ + return 0; +} +static inline +int ust_app_enable_map_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap) +{ + return 0; +} +static inline +int ust_app_create_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent) +{ + return 0; +} +static inline +int ust_app_disable_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent) +{ + return 0; +} +static inline +int ust_app_enable_map_event_glb(struct ltt_ust_session *usess, + struct ltt_ust_map *umap, struct ltt_ust_event *uevent) +{ + return 0; +} +static inline int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_context *uctx) { @@ -530,7 +697,12 @@ unsigned int ust_app_get_nb_stream(struct ltt_ust_session *usess) { return 0; } - +static inline +void ust_app_update_event_notifier_error_count( + struct lttng_trigger *lttng_trigger) +{ + return; +} static inline int ust_app_supported(void) { @@ -600,6 +772,12 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) return 0; } +static inline +enum lttng_error_code ust_app_open_packets(struct ltt_session *session) +{ + return 0; +} + #endif /* HAVE_LIBLTTNG_UST_CTL */ #endif /* _LTT_UST_APP_H */