X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fbuffer-registry.h;h=00be7b65ef66fac15862e7538e5a14d3fe9c37cc;hb=refs%2Fheads%2Fsow-2020-0002-rev2;hp=cb976dcdc3db25609bb32838a8abe50266908439;hpb=d9bf3ca437aa801c9364ca06b1083f83c6f8ef30;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/buffer-registry.h b/src/bin/lttng-sessiond/buffer-registry.h index cb976dcdc..00be7b65e 100644 --- a/src/bin/lttng-sessiond/buffer-registry.h +++ b/src/bin/lttng-sessiond/buffer-registry.h @@ -1,18 +1,8 @@ /* - * Copyright (C) 2013 - David Goulet + * Copyright (C) 2013 David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef LTTNG_BUFFER_REGISTRY_H @@ -25,7 +15,7 @@ #include #include "consumer.h" -#include "ust-ctl.h" +#include "lttng-ust-ctl.h" #include "ust-registry.h" struct buffer_reg_stream { @@ -36,6 +26,14 @@ struct buffer_reg_stream { } obj; }; +struct buffer_reg_map_counter { + struct cds_list_head lnode; + union { + /* Original object data that MUST be copied over. */ + struct lttng_ust_object_data *ust; + } obj; +}; + struct buffer_reg_channel { /* This key is the same as a tracing channel key. */ uint32_t key; @@ -43,14 +41,39 @@ struct buffer_reg_channel { uint64_t consumer_key; /* Stream registry object of this channel registry. */ struct cds_list_head streams; + /* Total number of stream in the list. */ + uint64_t stream_count; /* Used to ensure mutual exclusion to the stream's list. */ pthread_mutex_t stream_list_lock; /* Node for hash table usage. */ struct lttng_ht_node_u64 node; + /* Size of subbuffers in this channel. */ + size_t subbuf_size; + /* Number of subbuffers per stream. */ + size_t num_subbuf; + union { + /* Original object data that MUST be copied over. */ + struct lttng_ust_object_data *ust; + } obj; +}; + +struct buffer_reg_map { + /* This key is the same as a tracing map key. */ + uint32_t key; + /* Per cpu counter registry object of this map registry. */ + struct cds_list_head counters; + /* Total number of stream in the list. */ + uint64_t counter_count; + /* Used to ensure mutual exclusion to the counter's list. */ + pthread_mutex_t counter_list_lock; + /* Node for hash table usage. */ + struct lttng_ht_node_u64 node; union { /* Original object data that MUST be copied over. */ struct lttng_ust_object_data *ust; } obj; + + struct ustctl_daemon_counter *daemon_counter; }; struct buffer_reg_session { @@ -61,6 +84,8 @@ struct buffer_reg_session { /* Contains buffer registry channel indexed by tracing channel key. */ struct lttng_ht *channels; + /* Contains buffer registry map indexed by tracing map key. */ + struct lttng_ht *maps; }; /* @@ -82,6 +107,9 @@ struct buffer_reg_uid { struct lttng_ht_node_u64 node; /* Node of a linked list used to teardown object at a destroy session. */ struct cds_list_head lnode; + + char root_shm_path[PATH_MAX]; + char shm_path[PATH_MAX]; }; /* @@ -94,12 +122,16 @@ struct buffer_reg_pid { /* Indexed by session id. */ struct lttng_ht_node_u64 node; + + char root_shm_path[PATH_MAX]; + char shm_path[PATH_MAX]; }; /* Buffer registry per UID. */ void buffer_reg_init_uid_registry(void); int buffer_reg_uid_create(uint64_t session_id, uint32_t bits_per_long, uid_t uid, - enum lttng_domain_type domain, struct buffer_reg_uid **regp); + enum lttng_domain_type domain, struct buffer_reg_uid **regp, + const char *root_shm_path, const char *shm_path); void buffer_reg_uid_add(struct buffer_reg_uid *reg); struct buffer_reg_uid *buffer_reg_uid_find(uint64_t session_id, uint32_t bits_per_long, uid_t uid); @@ -109,7 +141,8 @@ void buffer_reg_uid_destroy(struct buffer_reg_uid *regp, /* Buffer registry per PID. */ void buffer_reg_init_pid_registry(void); -int buffer_reg_pid_create(uint64_t session_id, struct buffer_reg_pid **regp); +int buffer_reg_pid_create(uint64_t session_id, struct buffer_reg_pid **regp, + const char *root_shm_path, const char *shm_path); void buffer_reg_pid_add(struct buffer_reg_pid *reg); struct buffer_reg_pid *buffer_reg_pid_find(uint64_t session_id); void buffer_reg_pid_remove(struct buffer_reg_pid *regp); @@ -126,6 +159,17 @@ void buffer_reg_channel_remove(struct buffer_reg_session *session, void buffer_reg_channel_destroy(struct buffer_reg_channel *regp, enum lttng_domain_type domain); +/* Map */ +int buffer_reg_map_create(uint64_t key, struct buffer_reg_map **regp); +void buffer_reg_map_add(struct buffer_reg_session *session, + struct buffer_reg_map *map); +struct buffer_reg_map *buffer_reg_map_find(uint64_t key, + struct buffer_reg_uid *reg); +void buffer_reg_map_remove(struct buffer_reg_session *session, + struct buffer_reg_map *regp); +void buffer_reg_map_destroy(struct buffer_reg_map *regp, + enum lttng_domain_type domain); + /* Stream */ int buffer_reg_stream_create(struct buffer_reg_stream **regp); void buffer_reg_stream_add(struct buffer_reg_stream *stream, @@ -133,7 +177,18 @@ void buffer_reg_stream_add(struct buffer_reg_stream *stream, void buffer_reg_stream_destroy(struct buffer_reg_stream *regp, enum lttng_domain_type domain); +/* Map counter */ +int buffer_reg_map_counter_create(struct buffer_reg_map_counter **regp); +void buffer_reg_map_counter_add(struct buffer_reg_map_counter *map_counter, + struct buffer_reg_map *map); +void buffer_reg_map_counter_destroy(struct buffer_reg_map_counter *regp, + enum lttng_domain_type domain); + /* Global registry. */ void buffer_reg_destroy_registries(void); +int buffer_reg_uid_consumer_channel_key( + struct cds_list_head *buffer_reg_uid_list, + uint64_t chan_key, uint64_t *consumer_chan_key); + #endif /* LTTNG_BUFFER_REGISTRY_H */