Rename "tsc" to "timestamp"
[lttng-modules.git] / src / lttng-ring-buffer-client.h
index 70eb555e282b837ed79487092fce1cc21df81b1c..a1753e986ae3fd68582cdc29e0c7b48a9329a5a6 100644 (file)
@@ -18,7 +18,7 @@
 #include <ringbuffer/frontend_types.h>
 
 #define LTTNG_COMPACT_EVENT_BITS       5
-#define LTTNG_COMPACT_TSC_BITS         27
+#define LTTNG_COMPACT_TIMESTAMP_BITS   27
 
 static struct lttng_transport lttng_relay_transport;
 
@@ -135,7 +135,7 @@ void ctx_record(struct lttng_kernel_ring_buffer_ctx *bufctx,
  * contains.
  */
 static __inline__
-size_t record_header_size(const struct lib_ring_buffer_config *config,
+size_t record_header_size(const struct lttng_kernel_ring_buffer_config *config,
                                 struct lttng_kernel_ring_buffer_channel *chan, size_t offset,
                                 size_t *pre_header_padding,
                                 struct lttng_kernel_ring_buffer_ctx *ctx,
@@ -149,7 +149,7 @@ size_t record_header_size(const struct lib_ring_buffer_config *config,
        case 1: /* compact */
                padding = lib_ring_buffer_align(offset, lttng_alignof(uint32_t));
                offset += padding;
-               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) {
+               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TIMESTAMP | LTTNG_RFLAG_EXTENDED))) {
                        offset += sizeof(uint32_t);     /* id and timestamp */
                } else {
                        /* Minimum space taken by LTTNG_COMPACT_EVENT_BITS id */
@@ -165,7 +165,7 @@ size_t record_header_size(const struct lib_ring_buffer_config *config,
                padding = lib_ring_buffer_align(offset, lttng_alignof(uint16_t));
                offset += padding;
                offset += sizeof(uint16_t);
-               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) {
+               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TIMESTAMP | LTTNG_RFLAG_EXTENDED))) {
                        offset += lib_ring_buffer_align(offset, lttng_alignof(uint32_t));
                        offset += sizeof(uint32_t);     /* timestamp */
                } else {
@@ -189,7 +189,7 @@ size_t record_header_size(const struct lib_ring_buffer_config *config,
 #include <ringbuffer/api.h>
 
 static
-void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
+void lttng_write_event_header_slow(const struct lttng_kernel_ring_buffer_config *config,
                                 struct lttng_kernel_ring_buffer_ctx *ctx,
                                 uint32_t event_id);
 
@@ -203,7 +203,7 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
  * @event_id: event ID
  */
 static __inline__
-void lttng_write_event_header(const struct lib_ring_buffer_config *config,
+void lttng_write_event_header(const struct lttng_kernel_ring_buffer_config *config,
                            struct lttng_kernel_ring_buffer_ctx *ctx,
                            uint32_t event_id)
 {
@@ -223,14 +223,14 @@ void lttng_write_event_header(const struct lib_ring_buffer_config *config,
                                event_id);
                bt_bitfield_write(&id_time, uint32_t,
                                LTTNG_COMPACT_EVENT_BITS,
-                               LTTNG_COMPACT_TSC_BITS,
-                               ctx->priv.tsc);
+                               LTTNG_COMPACT_TIMESTAMP_BITS,
+                               ctx->priv.timestamp);
                lib_ring_buffer_write(config, ctx, &id_time, sizeof(id_time));
                break;
        }
        case 2: /* large */
        {
-               uint32_t timestamp = (uint32_t) ctx->priv.tsc;
+               uint32_t timestamp = (uint32_t) ctx->priv.timestamp;
                uint16_t id = event_id;
 
                lib_ring_buffer_write(config, ctx, &id, sizeof(id));
@@ -252,7 +252,7 @@ slow_path:
 }
 
 static
-void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
+void lttng_write_event_header_slow(const struct lttng_kernel_ring_buffer_config *config,
                                 struct lttng_kernel_ring_buffer_ctx *ctx,
                                 uint32_t event_id)
 {
@@ -260,7 +260,7 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
 
        switch (lttng_chan->priv->header_type) {
        case 1: /* compact */
-               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) {
+               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TIMESTAMP | LTTNG_RFLAG_EXTENDED))) {
                        uint32_t id_time = 0;
 
                        bt_bitfield_write(&id_time, uint32_t,
@@ -269,11 +269,11 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
                                        event_id);
                        bt_bitfield_write(&id_time, uint32_t,
                                        LTTNG_COMPACT_EVENT_BITS,
-                                       LTTNG_COMPACT_TSC_BITS, ctx->priv.tsc);
+                                       LTTNG_COMPACT_TIMESTAMP_BITS, ctx->priv.timestamp);
                        lib_ring_buffer_write(config, ctx, &id_time, sizeof(id_time));
                } else {
                        uint8_t id = 0;
-                       uint64_t timestamp = ctx->priv.tsc;
+                       uint64_t timestamp = ctx->priv.timestamp;
 
                        bt_bitfield_write(&id, uint8_t,
                                        0,
@@ -289,8 +289,8 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
                break;
        case 2: /* large */
        {
-               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TSC | LTTNG_RFLAG_EXTENDED))) {
-                       uint32_t timestamp = (uint32_t) ctx->priv.tsc;
+               if (!(ctx->priv.rflags & (RING_BUFFER_RFLAG_FULL_TIMESTAMP | LTTNG_RFLAG_EXTENDED))) {
+                       uint32_t timestamp = (uint32_t) ctx->priv.timestamp;
                        uint16_t id = event_id;
 
                        lib_ring_buffer_write(config, ctx, &id, sizeof(id));
@@ -298,7 +298,7 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
                        lib_ring_buffer_write(config, ctx, &timestamp, sizeof(timestamp));
                } else {
                        uint16_t id = 65535;
-                       uint64_t timestamp = ctx->priv.tsc;
+                       uint64_t timestamp = ctx->priv.timestamp;
 
                        lib_ring_buffer_write(config, ctx, &id, sizeof(id));
                        /* Align extended struct on largest member */
@@ -316,7 +316,7 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config,
        lib_ring_buffer_align_ctx(ctx, ctx->largest_align);
 }
 
-static const struct lib_ring_buffer_config client_config;
+static const struct lttng_kernel_ring_buffer_config client_config;
 
 static u64 client_ring_buffer_clock_read(struct lttng_kernel_ring_buffer_channel *chan)
 {
@@ -324,7 +324,7 @@ static u64 client_ring_buffer_clock_read(struct lttng_kernel_ring_buffer_channel
 }
 
 static
-size_t client_record_header_size(const struct lib_ring_buffer_config *config,
+size_t client_record_header_size(const struct lttng_kernel_ring_buffer_config *config,
                                 struct lttng_kernel_ring_buffer_channel *chan, size_t offset,
                                 size_t *pre_header_padding,
                                 struct lttng_kernel_ring_buffer_ctx *ctx,
@@ -346,7 +346,7 @@ static size_t client_packet_header_size(void)
        return offsetof(struct packet_header, ctx.header_end);
 }
 
-static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc,
+static void client_buffer_begin(struct lttng_kernel_ring_buffer *buf, u64 timestamp,
                                unsigned int subbuf_idx)
 {
        struct lttng_kernel_ring_buffer_channel *chan = buf->backend.chan;
@@ -361,7 +361,7 @@ static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc,
        memcpy(header->uuid, session->priv->uuid.b, sizeof(session->priv->uuid));
        header->stream_id = lttng_chan->priv->id;
        header->stream_instance_id = buf->backend.cpu;
-       header->ctx.timestamp_begin = tsc;
+       header->ctx.timestamp_begin = timestamp;
        header->ctx.timestamp_end = 0;
        header->ctx.content_size = ~0ULL; /* for debugging */
        header->ctx.packet_size = ~0ULL;
@@ -376,8 +376,9 @@ static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc,
  * 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,
-                             unsigned int subbuf_idx, unsigned long data_size)
+static void client_buffer_end(struct lttng_kernel_ring_buffer *buf, u64 timestamp,
+                             unsigned int subbuf_idx, unsigned long data_size,
+                             const struct lttng_kernel_ring_buffer_ctx *ctx)
 {
        struct lttng_kernel_ring_buffer_channel *chan = buf->backend.chan;
        struct packet_header *header =
@@ -386,36 +387,36 @@ static void client_buffer_end(struct lib_ring_buffer *buf, u64 tsc,
                                subbuf_idx * chan->backend.subbuf_size);
        unsigned long records_lost = 0;
 
-       header->ctx.timestamp_end = tsc;
+       header->ctx.timestamp_end = timestamp;
        header->ctx.content_size =
                (uint64_t) data_size * CHAR_BIT;                /* in bits */
        header->ctx.packet_size =
                (uint64_t) PAGE_ALIGN(data_size) * CHAR_BIT;    /* in bits */
-       records_lost += lib_ring_buffer_get_records_lost_full(&client_config, buf);
-       records_lost += lib_ring_buffer_get_records_lost_wrap(&client_config, buf);
-       records_lost += lib_ring_buffer_get_records_lost_big(&client_config, buf);
+       records_lost += lib_ring_buffer_get_records_lost_full(&client_config, ctx);
+       records_lost += lib_ring_buffer_get_records_lost_wrap(&client_config, ctx);
+       records_lost += lib_ring_buffer_get_records_lost_big(&client_config, ctx);
        header->ctx.events_discarded = records_lost;
 }
 
-static int client_buffer_create(struct lib_ring_buffer *buf, void *priv,
+static int client_buffer_create(struct lttng_kernel_ring_buffer *buf, void *priv,
                                int cpu, const char *name)
 {
        return 0;
 }
 
-static void client_buffer_finalize(struct lib_ring_buffer *buf, void *priv, int cpu)
+static void client_buffer_finalize(struct lttng_kernel_ring_buffer *buf, void *priv, int cpu)
 {
 }
 
 static struct packet_header *client_packet_header(
-               const struct lib_ring_buffer_config *config,
-               struct lib_ring_buffer *buf)
+               const struct lttng_kernel_ring_buffer_config *config,
+               struct lttng_kernel_ring_buffer *buf)
 {
        return lib_ring_buffer_read_offset_address(&buf->backend, 0);
 }
 
-static int client_timestamp_begin(const struct lib_ring_buffer_config *config,
-               struct lib_ring_buffer *buf,
+static int client_timestamp_begin(const struct lttng_kernel_ring_buffer_config *config,
+               struct lttng_kernel_ring_buffer *buf,
                uint64_t *timestamp_begin)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -424,8 +425,8 @@ static int client_timestamp_begin(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_timestamp_end(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_timestamp_end(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *timestamp_end)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -434,8 +435,8 @@ static int client_timestamp_end(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_events_discarded(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_events_discarded(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *events_discarded)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -444,8 +445,8 @@ static int client_events_discarded(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_content_size(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_content_size(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *content_size)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -454,8 +455,8 @@ static int client_content_size(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_packet_size(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_packet_size(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *packet_size)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -464,8 +465,8 @@ static int client_packet_size(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_stream_id(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_stream_id(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *stream_id)
 {
        struct lttng_kernel_ring_buffer_channel *chan = buf->backend.chan;
@@ -475,8 +476,8 @@ static int client_stream_id(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_current_timestamp(const struct lib_ring_buffer_config *config,
-               struct lib_ring_buffer *bufb,
+static int client_current_timestamp(const struct lttng_kernel_ring_buffer_config *config,
+               struct lttng_kernel_ring_buffer *bufb,
                uint64_t *ts)
 {
        *ts = config->cb.ring_buffer_clock_read(bufb->backend.chan);
@@ -484,8 +485,8 @@ static int client_current_timestamp(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static int client_sequence_number(const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *buf,
+static int client_sequence_number(const struct lttng_kernel_ring_buffer_config *config,
+                       struct lttng_kernel_ring_buffer *buf,
                        uint64_t *seq)
 {
        struct packet_header *header = client_packet_header(config, buf);
@@ -496,8 +497,8 @@ static int client_sequence_number(const struct lib_ring_buffer_config *config,
 }
 
 static
-int client_instance_id(const struct lib_ring_buffer_config *config,
-               struct lib_ring_buffer *buf,
+int client_instance_id(const struct lttng_kernel_ring_buffer_config *config,
+               struct lttng_kernel_ring_buffer *buf,
                uint64_t *id)
 {
        *id = buf->backend.cpu;
@@ -505,7 +506,7 @@ int client_instance_id(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-static const struct lib_ring_buffer_config client_config = {
+static const struct lttng_kernel_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,
@@ -514,7 +515,7 @@ static const struct lib_ring_buffer_config client_config = {
        .cb.buffer_create = client_buffer_create,
        .cb.buffer_finalize = client_buffer_finalize,
 
-       .tsc_bits = LTTNG_COMPACT_TSC_BITS,
+       .timestamp_bits = LTTNG_COMPACT_TIMESTAMP_BITS,
        .alloc = RING_BUFFER_ALLOC_PER_CPU,
        .sync = RING_BUFFER_SYNC_PER_CPU,
        .mode = RING_BUFFER_MODE_TEMPLATE,
@@ -570,9 +571,9 @@ error:
 }
 
 static
-struct lib_ring_buffer *lttng_buffer_read_open(struct lttng_kernel_ring_buffer_channel *chan)
+struct lttng_kernel_ring_buffer *lttng_buffer_read_open(struct lttng_kernel_ring_buffer_channel *chan)
 {
-       struct lib_ring_buffer *buf;
+       struct lttng_kernel_ring_buffer *buf;
        int cpu;
 
        for_each_channel_cpu(cpu, chan) {
@@ -586,7 +587,7 @@ struct lib_ring_buffer *lttng_buffer_read_open(struct lttng_kernel_ring_buffer_c
 static
 int lttng_buffer_has_read_closed_stream(struct lttng_kernel_ring_buffer_channel *chan)
 {
-       struct lib_ring_buffer *buf;
+       struct lttng_kernel_ring_buffer *buf;
        int cpu;
 
        for_each_channel_cpu(cpu, chan) {
@@ -598,7 +599,7 @@ int lttng_buffer_has_read_closed_stream(struct lttng_kernel_ring_buffer_channel
 }
 
 static
-void lttng_buffer_read_close(struct lib_ring_buffer *buf)
+void lttng_buffer_read_close(struct lttng_kernel_ring_buffer *buf)
 {
        lib_ring_buffer_release_read(buf);
 }
@@ -657,15 +658,17 @@ void lttng_event_commit(struct lttng_kernel_ring_buffer_ctx *ctx)
 
 static
 void lttng_event_write(struct lttng_kernel_ring_buffer_ctx *ctx, const void *src,
-                    size_t len)
+                    size_t len, size_t alignment)
 {
+       lib_ring_buffer_align_ctx(ctx, alignment);
        lib_ring_buffer_write(&client_config, ctx, src, len);
 }
 
 static
 void lttng_event_write_from_user(struct lttng_kernel_ring_buffer_ctx *ctx,
-                              const void __user *src, size_t len)
+                              const void __user *src, size_t len, size_t alignment)
 {
+       lib_ring_buffer_align_ctx(ctx, alignment);
        lib_ring_buffer_copy_from_user_inatomic(&client_config, ctx, src, len);
 }
 
@@ -691,6 +694,20 @@ void lttng_event_strcpy_from_user(struct lttng_kernel_ring_buffer_ctx *ctx,
                        len, '#');
 }
 
+static
+void lttng_event_pstrcpy_pad(struct lttng_kernel_ring_buffer_ctx *ctx, const char *src,
+               size_t len)
+{
+       lib_ring_buffer_pstrcpy(&client_config, ctx, src, len, '\0');
+}
+
+static
+void lttng_event_pstrcpy_pad_from_user(struct lttng_kernel_ring_buffer_ctx *ctx, const char __user *src,
+               size_t len)
+{
+       lib_ring_buffer_pstrcpy_from_user_inatomic(&client_config, ctx, src, len, '\0');
+}
+
 static
 void lttng_channel_buffer_lost_event_too_big(struct lttng_kernel_channel_buffer *lttng_chan)
 {
@@ -700,7 +717,7 @@ void lttng_channel_buffer_lost_event_too_big(struct lttng_kernel_channel_buffer
 static
 wait_queue_head_t *lttng_get_writer_buf_wait_queue(struct lttng_kernel_ring_buffer_channel *chan, int cpu)
 {
-       struct lib_ring_buffer *buf = channel_get_ring_buffer(&client_config,
+       struct lttng_kernel_ring_buffer *buf = channel_get_ring_buffer(&client_config,
                                        chan, cpu);
        return &buf->write_wait;
 }
@@ -757,6 +774,8 @@ static struct lttng_transport lttng_relay_transport = {
                .event_memset = lttng_event_memset,
                .event_strcpy = lttng_event_strcpy,
                .event_strcpy_from_user = lttng_event_strcpy_from_user,
+               .event_pstrcpy_pad = lttng_event_pstrcpy_pad,
+               .event_pstrcpy_pad_from_user = lttng_event_pstrcpy_pad_from_user,
                .lost_event_too_big = lttng_channel_buffer_lost_event_too_big,
        },
 };
This page took 0.030624 seconds and 4 git commands to generate.