X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=ltt-ring-buffer-metadata-client.h;h=a5ce2062652b9681394711fb48436569b4b20c27;hb=8289661dc0d57d1fe33253b651100ccabe5945da;hp=68ce958772c4f681448b535892cf902b43eb86b9;hpb=c099397a53087b8c616a7feaef0c26d939b9662f;p=lttng-modules.git diff --git a/ltt-ring-buffer-metadata-client.h b/ltt-ring-buffer-metadata-client.h index 68ce9587..a5ce2062 100644 --- a/ltt-ring-buffer-metadata-client.h +++ b/ltt-ring-buffer-metadata-client.h @@ -16,7 +16,7 @@ struct metadata_packet_header { uint32_t magic; /* 0x75D11D57 */ - uint8_t trace_uuid[16]; /* Unique Universal Identifier */ + uint8_t uuid[16]; /* Unique Universal Identifier */ uint32_t checksum; /* 0 if unused */ uint32_t content_size; /* in bits */ uint32_t packet_size; /* in bits */ @@ -41,8 +41,7 @@ u64 lib_ring_buffer_clock_read(struct channel *chan) static inline unsigned char record_header_size(const struct lib_ring_buffer_config *config, struct channel *chan, size_t offset, - size_t data_size, size_t *pre_header_padding, - unsigned int rflags, + size_t *pre_header_padding, struct lib_ring_buffer_ctx *ctx) { return 0; @@ -58,9 +57,7 @@ static u64 client_ring_buffer_clock_read(struct channel *chan) static size_t client_record_header_size(const struct lib_ring_buffer_config *config, struct channel *chan, size_t offset, - size_t data_size, size_t *pre_header_padding, - unsigned int rflags, struct lib_ring_buffer_ctx *ctx) { return 0; @@ -86,10 +83,11 @@ static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc, (struct metadata_packet_header *) lib_ring_buffer_offset_address(&buf->backend, subbuf_idx * chan->backend.subbuf_size); + struct ltt_channel *ltt_chan = channel_get_private(chan); + struct ltt_session *session = ltt_chan->session; header->magic = TSDL_MAGIC_NUMBER; - /* TODO */ - //header->trace_uuid = ; /* Unique Universal Identifier */ + memcpy(header->uuid, session->uuid.b, sizeof(session->uuid)); header->checksum = 0; /* 0 if unused */ header->content_size = 0xFFFFFFFF; /* in bits, for debugging */ header->packet_size = 0xFFFFFFFF; /* in bits, for debugging */ @@ -106,8 +104,8 @@ static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc, unsigned int subbuf_idx, unsigned long data_size) { struct channel *chan = buf->backend.chan; - struct packet_header *header = - (struct packet_header *) + struct metadata_packet_header *header = + (struct metadata_packet_header *) lib_ring_buffer_offset_address(&buf->backend, subbuf_idx * chan->backend.subbuf_size); unsigned long records_lost = 0; @@ -152,12 +150,12 @@ static const struct lib_ring_buffer_config client_config = { static struct channel *_channel_create(const char *name, - struct ltt_session *session, void *buf_addr, + struct ltt_channel *ltt_chan, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, unsigned int read_timer_interval) { - return channel_create(&client_config, name, session, buf_addr, + return channel_create(&client_config, name, ltt_chan, buf_addr, subbuf_size, num_subbuf, switch_timer_interval, read_timer_interval); } @@ -172,13 +170,10 @@ static struct lib_ring_buffer *ltt_buffer_read_open(struct channel *chan) { struct lib_ring_buffer *buf; - int cpu; - for_each_channel_cpu(cpu, chan) { - buf = channel_get_ring_buffer(&client_config, chan, cpu); - if (!lib_ring_buffer_open_read(buf)) - return buf; - } + buf = channel_get_ring_buffer(&client_config, chan, 0); + if (!lib_ring_buffer_open_read(buf)) + return buf; return NULL; } @@ -186,11 +181,10 @@ static void ltt_buffer_read_close(struct lib_ring_buffer *buf) { lib_ring_buffer_release_read(buf); - } static -int ltt_event_reserve(struct lib_ring_buffer_ctx *ctx) +int ltt_event_reserve(struct lib_ring_buffer_ctx *ctx, uint32_t event_id) { return lib_ring_buffer_reserve(&client_config, ctx); } @@ -208,6 +202,23 @@ void ltt_event_write(struct lib_ring_buffer_ctx *ctx, const void *src, lib_ring_buffer_write(&client_config, ctx, src, len); } +static +size_t ltt_packet_avail_size(struct channel *chan) + +{ + unsigned long o_begin; + struct lib_ring_buffer *buf; + + buf = chan->backend.buf; /* Only for global buffer ! */ + o_begin = v_read(&client_config, &buf->offset); + if (subbuf_offset(o_begin, chan) != 0) { + return chan->backend.subbuf_size - subbuf_offset(o_begin, chan); + } else { + return chan->backend.subbuf_size - subbuf_offset(o_begin, chan) + - sizeof(struct metadata_packet_header); + } +} + static wait_queue_head_t *ltt_get_reader_wait_queue(struct ltt_channel *chan) { @@ -225,6 +236,7 @@ static struct ltt_transport ltt_relay_transport = { .event_reserve = ltt_event_reserve, .event_commit = ltt_event_commit, .event_write = ltt_event_write, + .packet_avail_size = ltt_packet_avail_size, .get_reader_wait_queue = ltt_get_reader_wait_queue, }, };