SoW-2020-0002: Trace Hit Counters
[lttng-tools.git] / src / bin / lttng-sessiond / trace-kernel.h
index 89a4ab19f03364222dfd4f356b7db109ca372746..35e054f91ac8d2810a81852c40be2595b19ab62c 100644 (file)
@@ -11,6 +11,7 @@
 #include <urcu/list.h>
 
 #include <lttng/lttng.h>
+#include <lttng/map/map.h>
 #include <common/lttng-kernel.h>
 #include <common/lttng-kernel-old.h>
 #include <common/defaults.h>
@@ -33,6 +34,11 @@ struct ltt_kernel_channel_list {
        struct cds_list_head head;
 };
 
+/* map list */
+struct ltt_kernel_map_list {
+       struct cds_list_head head;
+};
+
 struct ltt_kernel_context {
        struct lttng_kernel_context ctx;
        struct cds_list_head list;
@@ -52,9 +58,10 @@ struct ltt_kernel_event {
        struct lttng_userspace_probe_location *userspace_probe_location;
 };
 
-/* Kernel event */
+/* Kernel event notifier */
 struct ltt_kernel_event_notifier_rule {
        int fd;
+       uint64_t error_counter_index;
        int enabled;
        enum lttng_event_type type;
        struct lttng_trigger *trigger;
@@ -66,6 +73,24 @@ struct ltt_kernel_event_notifier_rule {
        struct rcu_head rcu_node;
 };
 
+/* Kernel event counter */
+struct ltt_kernel_event_counter {
+       int fd;
+       int enabled;
+       uint64_t action_tracer_token;
+       struct lttng_kernel_event *event;
+       struct lttng_event_rule *event_rule;
+       const struct lttng_bytecode *filter;
+       struct lttng_userspace_probe_location *userspace_probe_location;
+       struct cds_list_head list;
+       struct lttng_ht_node_u64 ht_node;
+
+       /* refcounted */
+       struct lttng_map_key *key;
+       /* call_rcu delayed reclaim. */
+       struct rcu_head rcu_node;
+};
+
 /* Kernel channel */
 struct ltt_kernel_channel {
        int fd;
@@ -84,6 +109,20 @@ struct ltt_kernel_channel {
        bool sent_to_consumer;
 };
 
+/* Kernel map */
+struct ltt_kernel_map {
+       int fd;
+       uint64_t key; /* Key to reference this map with the notification thread. */
+       int enabled;
+       unsigned int event_count;
+       struct lttng_map *map;
+       struct lttng_kernel_counter_conf counter_conf;
+       struct lttng_ht *event_counters_ht;
+       struct cds_list_head list;
+       /* Session pointer which has a reference to this object. */
+       struct ltt_kernel_session *session;
+};
+
 /* Metadata */
 struct ltt_kernel_metadata {
        int fd;
@@ -110,9 +149,11 @@ struct ltt_kernel_session {
        int metadata_stream_fd;
        int consumer_fds_sent;
        unsigned int channel_count;
+       unsigned int map_count;
        unsigned int stream_count_global;
        struct ltt_kernel_metadata *metadata;
        struct ltt_kernel_channel_list channel_list;
+       struct ltt_kernel_map_list map_list;
        /* UID/GID of the user owning the session */
        uid_t uid;
        gid_t gid;
@@ -144,18 +185,23 @@ struct ltt_kernel_event *trace_kernel_get_event_by_name(
                char *name, struct ltt_kernel_channel *channel,
                enum lttng_event_type type);
 struct ltt_kernel_event *trace_kernel_find_event(
-               char *name, struct ltt_kernel_channel *channel,
+               struct ltt_kernel_event_list *events_list,
+               uint64_t tracer_token, char *name,
                enum lttng_event_type type,
                struct lttng_bytecode *filter);
 struct ltt_kernel_channel *trace_kernel_get_channel_by_name(
                const char *name, struct ltt_kernel_session *session);
 
+struct ltt_kernel_map *trace_kernel_get_map_by_name(
+               const char *name, struct ltt_kernel_session *session);
+
 /*
  * Create functions malloc() the data structure.
  */
 struct ltt_kernel_session *trace_kernel_create_session(void);
 struct ltt_kernel_channel *trace_kernel_create_channel(
                struct lttng_channel *chan);
+struct ltt_kernel_map *trace_kernel_create_map(const struct lttng_map *map);
 enum lttng_error_code trace_kernel_create_event(struct lttng_event *ev,
                char *filter_expression, struct lttng_bytecode *filter,
                struct ltt_kernel_event **kernel_event);
@@ -167,12 +213,16 @@ struct ltt_kernel_context *trace_kernel_create_context(
 enum lttng_error_code trace_kernel_create_event_notifier_rule(
                struct lttng_trigger *trigger,
                uint64_t token,
+               uint64_t error_counter_index,
                struct ltt_kernel_event_notifier_rule **event_notifier_rule);
 struct ltt_kernel_context *trace_kernel_copy_context(
                struct ltt_kernel_context *ctx);
 enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule(
                const struct lttng_event_rule *rule,
                struct lttng_kernel_event_notifier *kernel_event_notifier);
+enum lttng_error_code trace_kernel_init_event_counter_from_event_rule(
+               const struct lttng_event_rule *rule,
+               struct lttng_kernel_counter_event *kernel_counter_event);
 
 /*
  * Destroy functions free() the data structure and remove from linked list if
@@ -181,10 +231,13 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule(
 void trace_kernel_destroy_session(struct ltt_kernel_session *session);
 void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata);
 void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel);
+void trace_kernel_destroy_map(struct ltt_kernel_map *map);
 void trace_kernel_destroy_event(struct ltt_kernel_event *event);
 void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream);
 void trace_kernel_destroy_context(struct ltt_kernel_context *ctx);
 void trace_kernel_destroy_event_notifier_rule(struct ltt_kernel_event_notifier_rule *rule);
+void trace_kernel_destroy_event_counter(
+               struct ltt_kernel_event_counter *event_counter);
 void trace_kernel_free_session(struct ltt_kernel_session *session);
 
 #endif /* _LTT_TRACE_KERNEL_H */
This page took 0.028021 seconds and 5 git commands to generate.