#include <lttng/ust-compiler.h>
struct lttng_ust_lib_ring_buffer;
-struct channel;
+struct lttng_ust_lib_ring_buffer_channel;
struct lttng_ust_lib_ring_buffer_config;
struct lttng_ust_lib_ring_buffer_ctx;
struct lttng_ust_shm_handle;
/* Mandatory callbacks */
/* A static inline version is also required for fast path */
- uint64_t (*ring_buffer_clock_read) (struct channel *chan);
+ uint64_t (*ring_buffer_clock_read) (struct lttng_ust_lib_ring_buffer_channel *chan);
size_t (*record_header_size) (const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, size_t offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ size_t offset,
size_t *pre_header_padding,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx);
* iterator.
*/
void (*record_get) (const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, struct lttng_ust_lib_ring_buffer *buf,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_lib_ring_buffer *buf,
size_t offset, size_t *header_len,
size_t *payload_len, uint64_t *timestamp,
struct lttng_ust_shm_handle *handle);
uint32_t struct_size; /* Size of this structure. */
/* input received by lib_ring_buffer_reserve(), saved here. */
- struct channel *chan; /* channel */
+ struct lttng_ust_lib_ring_buffer_channel *chan; /* channel */
void *priv; /* client private data */
struct lttng_ust_shm_handle *handle; /* shared-memory handle */
size_t data_size; /* size of payload */
*/
static inline lttng_ust_notrace
void lib_ring_buffer_ctx_init(struct lttng_ust_lib_ring_buffer_ctx *ctx,
- struct channel *chan, void *priv,
- size_t data_size, int largest_align,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ void *priv, size_t data_size, int largest_align,
int cpu, struct lttng_ust_shm_handle *handle);
static inline
void lib_ring_buffer_ctx_init(struct lttng_ust_lib_ring_buffer_ctx *ctx,
- struct channel *chan, void *priv,
- size_t data_size, int largest_align,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ void *priv, size_t data_size, int largest_align,
int cpu, struct lttng_ust_shm_handle *handle)
{
ctx->struct_size = sizeof(struct lttng_ust_lib_ring_buffer_ctx);
/* End of base ABI. Fields below should be used after checking struct_size. */
};
-struct channel;
+struct lttng_ust_lib_ring_buffer_channel;
struct lttng_ust_shm_handle;
/*
* packet. Note that the size returned is only a hint, since it
* may change due to concurrent writes.
*/
- size_t (*packet_avail_size)(struct channel *chan,
+ size_t (*packet_avail_size)(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle);
- int (*is_finalized)(struct channel *chan);
- int (*is_disabled)(struct channel *chan);
- int (*flush_buffer)(struct channel *chan, struct lttng_ust_shm_handle *handle);
+ int (*is_finalized)(struct lttng_ust_lib_ring_buffer_channel *chan);
+ int (*is_disabled)(struct lttng_ust_lib_ring_buffer_channel *chan);
+ int (*flush_buffer)(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle);
void (*event_strcpy)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
const char *src, size_t len);
* consumer process is designed to be allowed to do is to read
* and perform subbuffer flush.
*/
- struct channel *chan; /* Channel buffers */
+ struct lttng_ust_lib_ring_buffer_channel *chan; /* Channel buffers */
int enabled;
struct lttng_ctx *ctx;
/* Event ID management */
int ustctl_channel_close_wait_fd(struct ustctl_consumer_channel *consumer_chan)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
int ret;
chan = consumer_chan->chan->chan;
int ustctl_channel_close_wakeup_fd(struct ustctl_consumer_channel *consumer_chan)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
int ret;
chan = consumer_chan->chan->chan;
int ustctl_stream_close_wait_fd(struct ustctl_consumer_stream *stream)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
chan = stream->chan->chan->chan;
return ring_buffer_stream_close_wait_fd(&chan->backend.config,
int ustctl_stream_close_wakeup_fd(struct ustctl_consumer_stream *stream)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
chan = stream->chan->chan->chan;
return ring_buffer_stream_close_wakeup_fd(&chan->backend.config,
{
struct ustctl_consumer_stream *stream;
struct lttng_ust_shm_handle *handle;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
int shm_fd, wait_fd, wakeup_fd;
uint64_t memory_map_size;
struct lttng_ust_lib_ring_buffer *buf;
{
struct ustctl_consumer_channel *consumer_chan;
unsigned long mmap_buf_len;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
if (!stream)
return -EINVAL;
unsigned long *len)
{
struct ustctl_consumer_channel *consumer_chan;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
if (!stream)
return -EINVAL;
int ustctl_get_mmap_read_offset(struct ustctl_consumer_stream *stream,
unsigned long *off)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
unsigned long sb_bindex;
struct lttng_ust_lib_ring_buffer *buf;
struct ustctl_consumer_channel *consumer_chan;
unsigned long *len)
{
struct ustctl_consumer_channel *consumer_chan;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_lib_ring_buffer *buf;
if (!stream)
unsigned long *len)
{
struct ustctl_consumer_channel *consumer_chan;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_lib_ring_buffer *buf;
if (!stream)
struct lttng_ust_lib_ring_buffer *buf,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
struct lttng_ust_client_lib_ring_buffer_client_cb *client_cb;
static
void _lttng_channel_unmap(struct lttng_channel *lttng_chan)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_shm_handle *handle;
cds_list_del(<tng_chan->node);
size_t event_context_len;
};
-static inline uint64_t lib_ring_buffer_clock_read(struct channel *chan)
+static inline uint64_t lib_ring_buffer_clock_read(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return trace_clock_read64();
}
*/
static __inline__
size_t record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, size_t offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ size_t offset,
size_t *pre_header_padding,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
struct lttng_client_ctx *client_ctx)
static const struct lttng_ust_lib_ring_buffer_config client_config;
-static uint64_t client_ring_buffer_clock_read(struct channel *chan)
+static uint64_t client_ring_buffer_clock_read(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return lib_ring_buffer_clock_read(chan);
}
static
size_t client_record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, size_t offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ size_t offset,
size_t *pre_header_padding,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
unsigned int subbuf_idx,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle, buf->backend.chan);
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
unsigned int subbuf_idx, unsigned long data_size,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle, buf->backend.chan);
struct packet_header *header =
(struct packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
struct lttng_ust_shm_handle *handle,
uint64_t *stream_id)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle,
+ buf->backend.chan);
struct lttng_channel *lttng_chan = channel_get_private(chan);
*stream_id = lttng_chan->id;
struct lttng_ust_shm_handle *handle,
uint64_t *ts)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
chan = shmp(handle, handle->chan);
*ts = client_ring_buffer_clock_read(chan);
#if 0
static
-wait_queue_head_t *lttng_get_reader_wait_queue(struct channel *chan)
+wait_queue_head_t *lttng_get_reader_wait_queue(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return &chan->read_wait;
}
static
-wait_queue_head_t *lttng_get_hp_wait_queue(struct channel *chan)
+wait_queue_head_t *lttng_get_hp_wait_queue(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return &chan->hp_wait;
}
#endif //0
static
-int lttng_is_finalized(struct channel *chan)
+int lttng_is_finalized(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return lib_ring_buffer_channel_is_finalized(chan);
}
static
-int lttng_is_disabled(struct channel *chan)
+int lttng_is_disabled(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return lib_ring_buffer_channel_is_disabled(chan);
}
static
-int lttng_flush_buffer(struct channel *chan, struct lttng_ust_shm_handle *handle)
+int lttng_flush_buffer(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle)
{
struct lttng_ust_lib_ring_buffer *buf;
int cpu;
static const struct lttng_ust_lib_ring_buffer_config client_config;
-static inline uint64_t lib_ring_buffer_clock_read(struct channel *chan)
+static inline uint64_t lib_ring_buffer_clock_read(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return 0;
}
static inline
size_t record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, size_t offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ size_t offset,
size_t *pre_header_padding,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
#include "../libringbuffer/api.h"
#include "lttng-rb-clients.h"
-static uint64_t client_ring_buffer_clock_read(struct channel *chan)
+static uint64_t client_ring_buffer_clock_read(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return 0;
}
static
size_t client_record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, size_t offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
+ size_t offset,
size_t *pre_header_padding,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
unsigned int subbuf_idx,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle, buf->backend.chan);
struct metadata_packet_header *header =
(struct metadata_packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
unsigned int subbuf_idx, unsigned long data_size,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle, buf->backend.chan);
struct metadata_packet_header *header =
(struct metadata_packet_header *)
lib_ring_buffer_offset_address(&buf->backend,
}
static
-size_t lttng_packet_avail_size(struct channel *chan, struct lttng_ust_shm_handle *handle)
+size_t lttng_packet_avail_size(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle)
{
unsigned long o_begin;
struct lttng_ust_lib_ring_buffer *buf;
#if 0
static
-wait_queue_head_t *lttng_get_reader_wait_queue(struct channel *chan)
+wait_queue_head_t *lttng_get_reader_wait_queue(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return &chan->read_wait;
}
static
-wait_queue_head_t *lttng_get_hp_wait_queue(struct channel *chan)
+wait_queue_head_t *lttng_get_hp_wait_queue(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return &chan->hp_wait;
}
#endif //0
static
-int lttng_is_finalized(struct channel *chan)
+int lttng_is_finalized(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return lib_ring_buffer_channel_is_finalized(chan);
}
static
-int lttng_is_disabled(struct channel *chan)
+int lttng_is_disabled(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return lib_ring_buffer_channel_is_disabled(chan);
}
static
-int lttng_flush_buffer(struct channel *chan, struct lttng_ust_shm_handle *handle)
+int lttng_flush_buffer(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle)
{
struct lttng_ust_lib_ring_buffer *buf;
int shm_fd, wait_fd, wakeup_fd;
static
int lttng_is_channel_ready(struct lttng_channel *lttng_chan)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
unsigned int nr_streams, exp_streams;
chan = lttng_chan->chan;
int chan_objd;
struct lttng_ust_shm_handle *channel_handle;
struct lttng_channel *lttng_chan;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_lib_ring_buffer_config *config;
void *chan_data;
int wakeup_fd;
struct lttng_ust_lib_ring_buffer_backend *bufb = &buf->backend;
unsigned long records_unread = 0, sb_bindex;
unsigned int i;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
chan = shmp(handle, bufb->chan);
if (!chan)
__attribute__((visibility("hidden")))
int lib_ring_buffer_backend_create(struct lttng_ust_lib_ring_buffer_backend *bufb,
- struct channel_backend *chan, int cpu,
+ struct channel_backend *chan,
+ int cpu,
struct lttng_ust_shm_handle *handle,
struct shm_object *shmobj);
struct lttng_ust_shm_handle *handle)
{
unsigned long sb_bindex;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_lib_ring_buffer_backend_pages_shmp *pages_shmp;
struct lttng_ust_lib_ring_buffer_backend_pages *backend_pages;
struct lttng_ust_shm_handle *handle)
{
struct lttng_ust_lib_ring_buffer_backend_subbuffer *wsb;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
if (config->mode != RING_BUFFER_OVERWRITE)
return;
return -EPERM;
if (config->mode == RING_BUFFER_OVERWRITE) {
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
/*
* Exchange the target writer subbuffer with our own unused
/*
* Forward declaration of frontend-specific channel and ring_buffer.
*/
-struct channel;
+struct lttng_ust_lib_ring_buffer_channel;
struct lttng_ust_lib_ring_buffer;
struct lttng_ust_lib_ring_buffer_backend_pages_shmp {
DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_backend_pages_shmp, array);
DECLARE_SHMP(char, memory_map); /* memory mapping */
- DECLARE_SHMP(struct channel, chan); /* Associated channel */
+ DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_channel, chan); /* Associated channel */
int cpu; /* This buffer's cpu. -1 if global. */
union v_atomic records_read; /* Number of records read */
unsigned int allocated:1; /* is buffer allocated ? */
*/
__attribute__((visibility("hidden")))
extern
-void channel_destroy(struct channel *chan, struct lttng_ust_shm_handle *handle,
+void channel_destroy(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle,
int consumer);
__attribute__((visibility("hidden")))
extern struct lttng_ust_lib_ring_buffer *channel_get_ring_buffer(
const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, int cpu,
+ struct lttng_ust_lib_ring_buffer_channel *chan, int cpu,
struct lttng_ust_shm_handle *handle,
int *shm_fd, int *wait_fd,
int *wakeup_fd,
__attribute__((visibility("hidden")))
extern
int ring_buffer_channel_close_wait_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle);
__attribute__((visibility("hidden")))
extern
int ring_buffer_channel_close_wakeup_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle);
__attribute__((visibility("hidden")))
extern
int ring_buffer_stream_close_wait_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle,
int cpu);
__attribute__((visibility("hidden")))
extern
int ring_buffer_stream_close_wakeup_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle,
int cpu);
void lib_ring_buffer_put_next_subbuf(struct lttng_ust_lib_ring_buffer *buf,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
chan = shmp(handle, buf->backend.chan);
if (!chan)
}
__attribute__((visibility("hidden")))
-extern void channel_reset(struct channel *chan);
+extern void channel_reset(struct lttng_ust_lib_ring_buffer_channel *chan);
__attribute__((visibility("hidden")))
extern void lib_ring_buffer_reset(struct lttng_ust_lib_ring_buffer *buf,
}
static inline
-int lib_ring_buffer_channel_is_finalized(const struct channel *chan)
+int lib_ring_buffer_channel_is_finalized(const struct lttng_ust_lib_ring_buffer_channel *chan)
{
return chan->finalized;
}
static inline
-int lib_ring_buffer_channel_is_disabled(const struct channel *chan)
+int lib_ring_buffer_channel_is_disabled(const struct lttng_ust_lib_ring_buffer_channel *chan)
{
return uatomic_read(&chan->record_disabled);
}
unsigned long *o_begin, unsigned long *o_end,
unsigned long *o_old, size_t *before_hdr_pad)
{
- struct channel *chan = ctx->chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan = ctx->chan;
struct lttng_ust_lib_ring_buffer *buf = ctx->buf;
*o_begin = v_read(config, &buf->offset);
*o_old = *o_begin;
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
{
- struct channel *chan = ctx->chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan = ctx->chan;
struct lttng_ust_shm_handle *handle = ctx->handle;
struct lttng_ust_lib_ring_buffer *buf;
unsigned long o_begin, o_end, o_old;
void lib_ring_buffer_commit(const struct lttng_ust_lib_ring_buffer_config *config,
const struct lttng_ust_lib_ring_buffer_ctx *ctx)
{
- struct channel *chan = ctx->chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan = ctx->chan;
struct lttng_ust_shm_handle *handle = ctx->handle;
struct lttng_ust_lib_ring_buffer *buf = ctx->buf;
unsigned long offset_end = ctx->buf_offset;
static inline
void channel_record_disable(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan)
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
uatomic_inc(&chan->record_disabled);
}
static inline
void channel_record_enable(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan)
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
uatomic_dec(&chan->record_disabled);
}
/* buf_trunc mask selects only the buffer number. */
static inline
-unsigned long buf_trunc(unsigned long offset, struct channel *chan)
+unsigned long buf_trunc(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return offset & ~(chan->backend.buf_size - 1);
/* Select the buffer number value (counter). */
static inline
-unsigned long buf_trunc_val(unsigned long offset, struct channel *chan)
+unsigned long buf_trunc_val(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return buf_trunc(offset, chan) >> chan->backend.buf_size_order;
}
/* buf_offset mask selects only the offset within the current buffer. */
static inline
-unsigned long buf_offset(unsigned long offset, struct channel *chan)
+unsigned long buf_offset(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return offset & (chan->backend.buf_size - 1);
}
/* subbuf_offset mask selects the offset within the current subbuffer. */
static inline
-unsigned long subbuf_offset(unsigned long offset, struct channel *chan)
+unsigned long subbuf_offset(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return offset & (chan->backend.subbuf_size - 1);
}
/* subbuf_trunc mask selects the subbuffer number. */
static inline
-unsigned long subbuf_trunc(unsigned long offset, struct channel *chan)
+unsigned long subbuf_trunc(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return offset & ~(chan->backend.subbuf_size - 1);
}
/* subbuf_align aligns the offset to the next subbuffer. */
static inline
-unsigned long subbuf_align(unsigned long offset, struct channel *chan)
+unsigned long subbuf_align(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return (offset + chan->backend.subbuf_size)
& ~(chan->backend.subbuf_size - 1);
/* subbuf_index returns the index of the current subbuffer within the buffer. */
static inline
-unsigned long subbuf_index(unsigned long offset, struct channel *chan)
+unsigned long subbuf_index(unsigned long offset,
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return buf_offset(offset, chan) >> chan->backend.subbuf_size_order;
}
__attribute__((visibility("hidden")))
void lib_ring_buffer_check_deliver_slow(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long offset,
unsigned long commit_count,
unsigned long idx,
static inline
void lib_ring_buffer_reserve_push_reader(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long offset)
{
unsigned long consumed_old, consumed_new;
void lib_ring_buffer_clear_reader(struct lttng_ust_lib_ring_buffer *buf,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
unsigned long offset, consumed_old, consumed_new;
static inline
int lib_ring_buffer_pending_data(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan)
+ struct lttng_ust_lib_ring_buffer_channel *chan)
{
return !!subbuf_offset(v_read(config, &buf->offset), chan);
}
static inline
int lib_ring_buffer_reserve_committed(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
unsigned long offset, idx, commit_count;
static inline
void lib_ring_buffer_check_deliver(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long offset,
unsigned long commit_count,
unsigned long idx,
static inline
void lib_ring_buffer_write_commit_counter(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long buf_offset,
unsigned long commit_count,
struct lttng_ust_shm_handle *handle,
/* channel: collection of per-cpu ring buffers. */
#define RB_CHANNEL_PADDING 32
-struct channel {
+struct lttng_ust_lib_ring_buffer_channel {
int record_disabled;
unsigned long commit_count_mask; /*
* Commit count mask, removing
} __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
static inline
-void *channel_get_private(struct channel *chan)
+void *channel_get_private(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return ((char *) chan) + chan->priv_data_offset;
}
*/
#define CHAN_WARN_ON(c, cond) \
({ \
- struct channel *__chan; \
+ struct lttng_ust_lib_ring_buffer_channel *__chan; \
int _____ret = caa_unlikely(cond); \
if (_____ret) { \
if (__rb_same_type(*(c), struct channel_backend)) \
__chan = caa_container_of((void *) (c), \
- struct channel, \
- backend); \
- else if (__rb_same_type(*(c), struct channel)) \
+ struct lttng_ust_lib_ring_buffer_channel, \
+ backend); \
+ else if (__rb_same_type(*(c), \
+ struct lttng_ust_lib_ring_buffer_channel)) \
__chan = (void *) (c); \
else \
BUG_ON(1); \
*/
void channel_backend_reset(struct channel_backend *chanb)
{
- struct channel *chan = caa_container_of(chanb, struct channel, backend);
+ struct lttng_ust_lib_ring_buffer_channel *chan = caa_container_of(chanb,
+ struct lttng_ust_lib_ring_buffer_channel, backend);
const struct lttng_ust_lib_ring_buffer_config *config = &chanb->config;
/*
struct lttng_ust_shm_handle *handle,
const int *stream_fds)
{
- struct channel *chan = caa_container_of(chanb, struct channel, backend);
+ struct lttng_ust_lib_ring_buffer_channel *chan = caa_container_of(chanb,
+ struct lttng_ust_lib_ring_buffer_channel, backend);
unsigned int i;
int ret;
size_t shmsize = 0, num_subbuf_alloc;
static pthread_mutex_t wakeup_fd_mutex = PTHREAD_MUTEX_INITIALIZER;
static
-void lib_ring_buffer_print_errors(struct channel *chan,
+void lib_ring_buffer_print_errors(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_lib_ring_buffer *buf, int cpu,
struct lttng_ust_shm_handle *handle);
}
/* Get blocking timeout, in ms */
-static int lttng_ust_ringbuffer_get_timeout(struct channel *chan)
+static int lttng_ust_ringbuffer_get_timeout(struct lttng_ust_lib_ring_buffer_channel *chan)
{
if (!lttng_ust_allow_blocking)
return 0;
void lib_ring_buffer_reset(struct lttng_ust_lib_ring_buffer *buf,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
unsigned int i;
* be using the iterator concurrently with reset. The previous current iterator
* record is reset.
*/
-void channel_reset(struct channel *chan)
+void channel_reset(struct lttng_ust_lib_ring_buffer_channel *chan)
{
/*
* Reset iterators first. Will put the subbuffer if held for reading.
struct shm_object *shmobj)
{
const struct lttng_ust_lib_ring_buffer_config *config = &chanb->config;
- struct channel *chan = caa_container_of(chanb, struct channel, backend);
+ struct lttng_ust_lib_ring_buffer_channel *chan = caa_container_of(chanb,
+ struct lttng_ust_lib_ring_buffer_channel, backend);
struct lttng_ust_lib_ring_buffer_backend_subbuffer *wsb;
- struct channel *shmp_chan;
+ struct lttng_ust_lib_ring_buffer_channel *shmp_chan;
struct commit_counters_hot *cc_hot;
void *priv = channel_get_private(chan);
size_t subbuf_header_size;
{
const struct lttng_ust_lib_ring_buffer_config *config;
struct lttng_ust_shm_handle *handle;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
int cpu;
assert(CMM_LOAD_SHARED(timer_signal.tid) == pthread_self());
static
int lib_ring_buffer_poll_deliver(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
unsigned long consumed_old, consumed_idx, commit_count, write_offset;
}
static
-void lib_ring_buffer_channel_do_read(struct channel *chan)
+void lib_ring_buffer_channel_do_read(struct lttng_ust_lib_ring_buffer_channel *chan)
{
const struct lttng_ust_lib_ring_buffer_config *config;
struct lttng_ust_shm_handle *handle;
static
void lib_ring_buffer_channel_read_timer(int sig, siginfo_t *si, void *uc)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
assert(CMM_LOAD_SHARED(timer_signal.tid) == pthread_self());
chan = si->si_value.sival_ptr;
}
static
-void lib_ring_buffer_channel_switch_timer_start(struct channel *chan)
+void lib_ring_buffer_channel_switch_timer_start(struct lttng_ust_lib_ring_buffer_channel *chan)
{
struct sigevent sev;
struct itimerspec its;
}
static
-void lib_ring_buffer_channel_switch_timer_stop(struct channel *chan)
+void lib_ring_buffer_channel_switch_timer_stop(struct lttng_ust_lib_ring_buffer_channel *chan)
{
int ret;
}
static
-void lib_ring_buffer_channel_read_timer_start(struct channel *chan)
+void lib_ring_buffer_channel_read_timer_start(struct lttng_ust_lib_ring_buffer_channel *chan)
{
const struct lttng_ust_lib_ring_buffer_config *config = &chan->backend.config;
struct sigevent sev;
}
static
-void lib_ring_buffer_channel_read_timer_stop(struct channel *chan)
+void lib_ring_buffer_channel_read_timer_stop(struct lttng_ust_lib_ring_buffer_channel *chan)
{
const struct lttng_ust_lib_ring_buffer_config *config = &chan->backend.config;
int ret;
chan->read_timer_enabled = 0;
}
-static void channel_unregister_notifiers(struct channel *chan,
+static void channel_unregister_notifiers(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
lib_ring_buffer_channel_switch_timer_stop(chan);
lib_ring_buffer_channel_read_timer_stop(chan);
}
-static void channel_print_errors(struct channel *chan,
+static void channel_print_errors(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
const struct lttng_ust_lib_ring_buffer_config *config =
}
}
-static void channel_free(struct channel *chan,
+static void channel_free(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle,
int consumer)
{
{
int ret;
size_t shmsize, chansize;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
struct lttng_ust_shm_handle *handle;
struct shm_object *shmobj;
unsigned int nr_streams;
goto error_table_alloc;
/* Calculate the shm allocation layout */
- shmsize = sizeof(struct channel);
+ shmsize = sizeof(struct lttng_ust_lib_ring_buffer_channel);
shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_shmp));
shmsize += sizeof(struct lttng_ust_lib_ring_buffer_shmp) * nr_streams;
chansize = shmsize;
-1, -1);
if (!shmobj)
goto error_append;
- /* struct channel is at object 0, offset 0 (hardcoded) */
+ /* struct lttng_ust_lib_ring_buffer_channel is at object 0, offset 0 (hardcoded) */
set_shmp(handle->chan, zalloc_shm(shmobj, chansize));
assert(handle->chan._ref.index == 0);
assert(handle->chan._ref.offset == 0);
memory_map_size, wakeup_fd);
if (!object)
goto error_table_object;
- /* struct channel is at object 0, offset 0 (hardcoded) */
+ /* struct lttng_ust_lib_ring_buffer_channel is at object 0, offset 0 (hardcoded) */
handle->chan._ref.index = 0;
handle->chan._ref.offset = 0;
return handle;
}
static
-void channel_release(struct channel *chan, struct lttng_ust_shm_handle *handle,
+void channel_release(struct lttng_ust_lib_ring_buffer_channel *chan, struct lttng_ust_shm_handle *handle,
int consumer)
{
channel_free(chan, handle, consumer);
* consumption of finalized channels, get_subbuf() will return -ENODATA.
* They should release their handle at that point.
*/
-void channel_destroy(struct channel *chan, struct lttng_ust_shm_handle *handle,
+void channel_destroy(struct lttng_ust_lib_ring_buffer_channel *chan, struct lttng_ust_shm_handle *handle,
int consumer)
{
if (consumer) {
struct lttng_ust_lib_ring_buffer *channel_get_ring_buffer(
const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan, int cpu,
+ struct lttng_ust_lib_ring_buffer_channel *chan, int cpu,
struct lttng_ust_shm_handle *handle,
int *shm_fd, int *wait_fd,
int *wakeup_fd,
}
int ring_buffer_channel_close_wait_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
struct shm_ref *ref;
}
int ring_buffer_channel_close_wakeup_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle)
{
struct shm_ref *ref;
}
int ring_buffer_stream_close_wait_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle,
int cpu)
{
}
int ring_buffer_stream_close_wakeup_fd(const struct lttng_ust_lib_ring_buffer_config *config,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_shm_handle *handle,
int cpu)
{
void lib_ring_buffer_release_read(struct lttng_ust_lib_ring_buffer *buf,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan = shmp(handle, buf->backend.chan);
+ struct lttng_ust_lib_ring_buffer_channel *chan = shmp(handle, buf->backend.chan);
if (!chan)
return;
unsigned long *consumed, unsigned long *produced,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
unsigned long consumed_cur, write_offset;
int finalized;
unsigned long *consumed, unsigned long *produced,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
chan = shmp(handle, buf->backend.chan);
struct lttng_ust_shm_handle *handle)
{
struct lttng_ust_lib_ring_buffer_backend *bufb = &buf->backend;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
unsigned long consumed;
chan = shmp(handle, bufb->chan);
unsigned long consumed,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
unsigned long consumed_cur, consumed_idx, commit_count, write_offset;
int ret, finalized, nr_retry = LTTNG_UST_RING_BUFFER_GET_RETRY;
struct lttng_ust_shm_handle *handle)
{
struct lttng_ust_lib_ring_buffer_backend *bufb = &buf->backend;
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
unsigned long sb_bindex, consumed_idx, consumed;
struct lttng_ust_lib_ring_buffer_backend_pages_shmp *rpages;
*/
static
void lib_ring_buffer_print_subbuffer_errors(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long cons_offset,
int cpu,
struct lttng_ust_shm_handle *handle)
static
void lib_ring_buffer_print_buffer_errors(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
void *priv, int cpu,
struct lttng_ust_shm_handle *handle)
{
}
static
-void lib_ring_buffer_print_errors(struct channel *chan,
+void lib_ring_buffer_print_errors(struct lttng_ust_lib_ring_buffer_channel *chan,
struct lttng_ust_lib_ring_buffer *buf, int cpu,
struct lttng_ust_shm_handle *handle)
{
*/
static
void lib_ring_buffer_switch_old_start(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
uint64_t tsc,
struct lttng_ust_shm_handle *handle)
*/
static
void lib_ring_buffer_switch_old_end(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
uint64_t tsc,
struct lttng_ust_shm_handle *handle)
*/
static
void lib_ring_buffer_switch_new_start(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
uint64_t tsc,
struct lttng_ust_shm_handle *handle)
*/
static
void lib_ring_buffer_switch_new_end(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
uint64_t tsc,
struct lttng_ust_shm_handle *handle)
static
int lib_ring_buffer_try_switch_slow(enum switch_mode mode,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
uint64_t *tsc,
struct lttng_ust_shm_handle *handle)
void lib_ring_buffer_switch_slow(struct lttng_ust_lib_ring_buffer *buf, enum switch_mode mode,
struct lttng_ust_shm_handle *handle)
{
- struct channel *chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan;
const struct lttng_ust_lib_ring_buffer_config *config;
struct switch_offsets offsets;
unsigned long oldidx;
*/
static
int lib_ring_buffer_try_reserve_slow(struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
struct switch_offsets *offsets,
struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
int lib_ring_buffer_reserve_slow(struct lttng_ust_lib_ring_buffer_ctx *ctx,
void *client_ctx)
{
- struct channel *chan = ctx->chan;
+ struct lttng_ust_lib_ring_buffer_channel *chan = ctx->chan;
struct lttng_ust_shm_handle *handle = ctx->handle;
const struct lttng_ust_lib_ring_buffer_config *config = &chan->backend.config;
struct lttng_ust_lib_ring_buffer *buf;
void lib_ring_buffer_check_deliver_slow(const struct lttng_ust_lib_ring_buffer_config *config,
struct lttng_ust_lib_ring_buffer *buf,
- struct channel *chan,
+ struct lttng_ust_lib_ring_buffer_channel *chan,
unsigned long offset,
unsigned long commit_count,
unsigned long idx,
__attribute__((visibility("hidden")))
extern
-void channel_destroy(struct channel *chan, struct lttng_ust_shm_handle *handle,
+void channel_destroy(struct lttng_ust_lib_ring_buffer_channel *chan,
+ struct lttng_ust_shm_handle *handle,
int consumer);
/*
#include <limits.h>
#include "shm_internal.h"
-struct channel;
+struct lttng_ust_lib_ring_buffer_channel;
enum shm_object_type {
SHM_OBJECT_SHM,
struct lttng_ust_shm_handle {
struct shm_object_table *table;
- DECLARE_SHMP(struct channel, chan);
+ DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_channel, chan);
};
#endif /* _LIBRINGBUFFER_SHM_TYPES_H */