*/
#include <stdint.h>
-#include <ust/lttng-events.h>
-#include "ust/bitfield.h"
+#include <lttng/ust-events.h>
+#include "lttng/bitfield.h"
#include "ltt-tracer.h"
#include "../libringbuffer/frontend_types.h"
uint8_t compression_scheme; /* 0 if unused */
uint8_t encryption_scheme; /* 0 if unused */
uint8_t checksum_scheme; /* 0 if unused */
+ uint8_t major; /* CTF spec major version number */
+ uint8_t minor; /* CTF spec minor version number */
uint8_t header_end[0];
};
uint8_t header_end[0]; /* End of header */
};
-static const struct lib_ring_buffer_config client_config;
+static const struct lttng_ust_lib_ring_buffer_config client_config;
static inline
u64 lib_ring_buffer_clock_read(struct channel *chan)
}
static inline
-unsigned char record_header_size(const struct lib_ring_buffer_config *config,
+unsigned char record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
struct channel *chan, size_t offset,
size_t *pre_header_padding,
- struct lib_ring_buffer_ctx *ctx)
+ struct lttng_ust_lib_ring_buffer_ctx *ctx)
{
return 0;
}
}
static
-size_t client_record_header_size(const struct lib_ring_buffer_config *config,
+size_t client_record_header_size(const struct lttng_ust_lib_ring_buffer_config *config,
struct channel *chan, size_t offset,
size_t *pre_header_padding,
- struct lib_ring_buffer_ctx *ctx)
+ struct lttng_ust_lib_ring_buffer_ctx *ctx)
{
return 0;
}
return offsetof(struct metadata_packet_header, header_end);
}
-static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc,
+static void client_buffer_begin(struct lttng_ust_lib_ring_buffer *buf, u64 tsc,
unsigned int subbuf_idx,
- struct shm_handle *handle)
+ struct lttng_ust_shm_handle *handle)
{
struct channel *chan = shmp(handle, buf->backend.chan);
struct metadata_packet_header *header =
header->compression_scheme = 0; /* 0 if unused */
header->encryption_scheme = 0; /* 0 if unused */
header->checksum_scheme = 0; /* 0 if unused */
+ header->major = CTF_SPEC_MAJOR;
+ header->minor = CTF_SPEC_MINOR;
+
}
/*
* 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 lib_ring_buffer *buf, u64 tsc,
+static void client_buffer_end(struct lttng_ust_lib_ring_buffer *buf, u64 tsc,
unsigned int subbuf_idx, unsigned long data_size,
- struct shm_handle *handle)
+ struct lttng_ust_shm_handle *handle)
{
struct channel *chan = shmp(handle, buf->backend.chan);
struct metadata_packet_header *header =
WARN_ON_ONCE(records_lost != 0);
}
-static int client_buffer_create(struct lib_ring_buffer *buf, void *priv,
+static int client_buffer_create(struct lttng_ust_lib_ring_buffer *buf, void *priv,
int cpu, const char *name,
- struct shm_handle *handle)
+ struct lttng_ust_shm_handle *handle)
{
return 0;
}
-static void client_buffer_finalize(struct lib_ring_buffer *buf,
+static void client_buffer_finalize(struct lttng_ust_lib_ring_buffer *buf,
void *priv, int cpu,
- struct shm_handle *handle)
+ struct lttng_ust_shm_handle *handle)
{
}
-static const struct lib_ring_buffer_config client_config = {
+static const struct lttng_ust_lib_ring_buffer_config client_config = {
.cb.ring_buffer_clock_read = client_ring_buffer_clock_read,
.cb.record_header_size = client_record_header_size,
.cb.subbuffer_header_size = client_packet_header_size,
static
void ltt_channel_destroy(struct ltt_channel *ltt_chan)
{
- channel_destroy(ltt_chan->chan, ltt_chan->handle);
+ channel_destroy(ltt_chan->chan, ltt_chan->handle, 0);
}
static
-struct lib_ring_buffer *ltt_buffer_read_open(struct channel *chan,
- struct shm_handle *handle,
+struct lttng_ust_lib_ring_buffer *ltt_buffer_read_open(struct channel *chan,
+ struct lttng_ust_shm_handle *handle,
int *shm_fd, int *wait_fd,
uint64_t *memory_map_size)
{
- struct lib_ring_buffer *buf;
+ struct lttng_ust_lib_ring_buffer *buf;
buf = channel_get_ring_buffer(&client_config, chan,
0, handle, shm_fd, wait_fd, memory_map_size);
- if (!lib_ring_buffer_open_read(buf, handle))
+ if (!lib_ring_buffer_open_read(buf, handle, 0))
return buf;
return NULL;
}
static
-void ltt_buffer_read_close(struct lib_ring_buffer *buf,
- struct shm_handle *handle)
+void ltt_buffer_read_close(struct lttng_ust_lib_ring_buffer *buf,
+ struct lttng_ust_shm_handle *handle)
{
- lib_ring_buffer_release_read(buf, handle);
+ lib_ring_buffer_release_read(buf, handle, 0);
}
static
-int ltt_event_reserve(struct lib_ring_buffer_ctx *ctx, uint32_t event_id)
+int ltt_event_reserve(struct lttng_ust_lib_ring_buffer_ctx *ctx, uint32_t event_id)
{
return lib_ring_buffer_reserve(&client_config, ctx);
}
static
-void ltt_event_commit(struct lib_ring_buffer_ctx *ctx)
+void ltt_event_commit(struct lttng_ust_lib_ring_buffer_ctx *ctx)
{
lib_ring_buffer_commit(&client_config, ctx);
}
static
-void ltt_event_write(struct lib_ring_buffer_ctx *ctx, const void *src,
+void ltt_event_write(struct lttng_ust_lib_ring_buffer_ctx *ctx, const void *src,
size_t len)
{
lib_ring_buffer_write(&client_config, ctx, src, len);
}
static
-size_t ltt_packet_avail_size(struct channel *chan, struct shm_handle *handle)
+size_t ltt_packet_avail_size(struct channel *chan, struct lttng_ust_shm_handle *handle)
{
unsigned long o_begin;
- struct lib_ring_buffer *buf;
+ struct lttng_ust_lib_ring_buffer *buf;
buf = shmp(handle, chan->backend.buf[0].shmp); /* Only for global buffer ! */
o_begin = v_read(&client_config, &buf->offset);
return lib_ring_buffer_channel_is_disabled(chan);
}
+static
+int ltt_flush_buffer(struct channel *chan, struct lttng_ust_shm_handle *handle)
+{
+ struct lttng_ust_lib_ring_buffer *buf;
+ int shm_fd, wait_fd;
+ uint64_t memory_map_size;
+
+ buf = channel_get_ring_buffer(&client_config, chan,
+ 0, handle, &shm_fd, &wait_fd,
+ &memory_map_size);
+ lib_ring_buffer_switch(&client_config, buf,
+ SWITCH_ACTIVE, handle);
+ return 0;
+}
+
static struct ltt_transport ltt_relay_transport = {
.name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING "-mmap",
.ops = {
//.get_hp_wait_queue = ltt_get_hp_wait_queue,
.is_finalized = ltt_is_finalized,
.is_disabled = ltt_is_disabled,
+ .flush_buffer = ltt_flush_buffer,
},
};