Add CPU hotplug notifier for ltt debugfs ABI, add pollwait exclusive wrapper
[lttng-modules.git] / ltt-ring-buffer-metadata-client.h
index 68ce958772c4f681448b535892cf902b43eb86b9..a687b7050adfa94a3049b0f56e301a8c81611355 100644 (file)
@@ -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);
 }
@@ -209,9 +203,38 @@ void ltt_event_write(struct lib_ring_buffer_ctx *ctx, const void *src,
 }
 
 static
-wait_queue_head_t *ltt_get_reader_wait_queue(struct ltt_channel *chan)
+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 channel *chan)
+{
+       return &chan->read_wait;
+}
+
+static
+wait_queue_head_t *ltt_get_hp_wait_queue(struct channel *chan)
+{
+       return &chan->hp_wait;
+}
+
+static
+int ltt_is_finalized(struct channel *chan)
 {
-       return &chan->chan->read_wait;
+       return lib_ring_buffer_channel_is_finalized(chan);
 }
 
 static struct ltt_transport ltt_relay_transport = {
@@ -225,7 +248,10 @@ 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,
+               .get_hp_wait_queue = ltt_get_hp_wait_queue,
+               .is_finalized = ltt_is_finalized,
        },
 };
 
This page took 0.024382 seconds and 4 git commands to generate.