#include <stdint.h>
#include <lttng/ust-events.h>
#include "lttng/bitfield.h"
-#include "lttng/clock.h"
+#include "clock.h"
#include "ltt-tracer.h"
#include "../libringbuffer/frontend_types.h"
};
-static inline notrace u64 lib_ring_buffer_clock_read(struct channel *chan)
+static inline uint64_t lib_ring_buffer_clock_read(struct channel *chan)
{
return trace_clock_read64();
}
static const struct lttng_ust_lib_ring_buffer_config client_config;
-static u64 client_ring_buffer_clock_read(struct channel *chan)
+static uint64_t client_ring_buffer_clock_read(struct channel *chan)
{
return lib_ring_buffer_clock_read(chan);
}
return offsetof(struct packet_header, ctx.header_end);
}
-static void client_buffer_begin(struct lttng_ust_lib_ring_buffer *buf, u64 tsc,
+static void client_buffer_begin(struct lttng_ust_lib_ring_buffer *buf, uint64_t tsc,
unsigned int subbuf_idx,
struct lttng_ust_shm_handle *handle)
{
subbuf_idx * chan->backend.subbuf_size,
handle);
struct ltt_channel *ltt_chan = channel_get_private(chan);
- struct ltt_session *session = ltt_chan->session;
header->magic = CTF_MAGIC_NUMBER;
- memcpy(header->uuid, session->uuid, sizeof(session->uuid));
+ memcpy(header->uuid, ltt_chan->uuid, sizeof(ltt_chan->uuid));
header->stream_id = ltt_chan->id;
header->ctx.timestamp_begin = tsc;
header->ctx.timestamp_end = 0;
* offset is assumed to never be 0 here : never deliver a completely empty
* subbuffer. data_size is between 1 and subbuf_size.
*/
-static void client_buffer_end(struct lttng_ust_lib_ring_buffer *buf, u64 tsc,
+static void client_buffer_end(struct lttng_ust_lib_ring_buffer *buf, uint64_t tsc,
unsigned int subbuf_idx, unsigned long data_size,
struct lttng_ust_shm_handle *handle)
{
.oops = RING_BUFFER_OOPS_CONSISTENCY,
.ipi = RING_BUFFER_NO_IPI_BARRIER,
.wakeup = RING_BUFFER_WAKEUP_BY_WRITER,
+ .client_type = LTTNG_CLIENT_TYPE,
};
+const struct lttng_ust_lib_ring_buffer_client_cb *LTTNG_CLIENT_CALLBACKS = &client_config.cb;
+
static
struct ltt_channel *_channel_create(const char *name,
- struct ltt_channel *ltt_chan, void *buf_addr,
+ void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
unsigned int switch_timer_interval,
unsigned int read_timer_interval,
int *shm_fd, int *wait_fd,
- uint64_t *memory_map_size)
+ uint64_t *memory_map_size,
+ struct ltt_channel *chan_priv_init)
{
- ltt_chan->handle = channel_create(&client_config, name, ltt_chan, buf_addr,
- subbuf_size, num_subbuf, switch_timer_interval,
- read_timer_interval, shm_fd, wait_fd,
- memory_map_size);
- if (!ltt_chan->handle)
+ void *priv;
+ struct ltt_channel *ltt_chan = NULL;
+ struct lttng_ust_shm_handle *handle;
+
+ handle = channel_create(&client_config, name,
+ &priv, __alignof__(*ltt_chan), sizeof(*ltt_chan),
+ chan_priv_init,
+ buf_addr, subbuf_size, num_subbuf,
+ switch_timer_interval, read_timer_interval,
+ shm_fd, wait_fd, memory_map_size);
+ if (!handle)
return NULL;
+ ltt_chan = priv;
+ ltt_chan->handle = handle;
ltt_chan->chan = shmp(ltt_chan->handle, ltt_chan->handle->chan);
return ltt_chan;
}