#include <urcu/list.h>
#include <urcu/uatomic.h>
-#include <lttng/ringbuffer-config.h>
+#include <lttng/ringbuffer-context.h>
+#include "ringbuffer-config.h"
#include <usterr-signal-safe.h>
#include "backend_types.h"
#include "shm_internal.h"
/* 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
int read_timer_enabled;
int finalized; /* Has channel been finalized */
- size_t priv_data_offset;
+ size_t priv_data_offset; /* Offset of private data channel config */
unsigned int nr_streams; /* Number of streams */
struct lttng_ust_shm_handle *handle;
/* Extended options. */
union {
struct {
int32_t blocking_timeout_ms;
+ void *priv; /* Private data pointer. */
} s;
char padding[RB_CHANNEL_PADDING];
} u;
} __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
static inline
-void *channel_get_private(struct channel *chan)
+void *channel_get_private_config(struct lttng_ust_lib_ring_buffer_channel *chan)
{
return ((char *) chan) + chan->priv_data_offset;
}
+static inline
+void *channel_get_private(struct lttng_ust_lib_ring_buffer_channel *chan)
+{
+ return chan->u.s.priv;
+}
+
+static inline
+void channel_set_private(struct lttng_ust_lib_ring_buffer_channel *chan, void *priv)
+{
+ chan->u.s.priv = priv;
+}
+
#ifndef __rb_same_type
#define __rb_same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
#endif
*/
#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); \