Rename "tsc" to "timestamp"
[lttng-modules.git] / src / lttng-ring-buffer-client.h
index 2eee81a1fad57f37d1f1e305af1a4d282cedacc0..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;
 
@@ -149,7 +149,7 @@ size_t record_header_size(const struct lttng_kernel_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 lttng_kernel_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 {
@@ -223,14 +223,14 @@ void lttng_write_event_header(const struct lttng_kernel_ring_buffer_config *conf
                                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));
@@ -260,7 +260,7 @@ void lttng_write_event_header_slow(const struct lttng_kernel_ring_buffer_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 lttng_kernel_ring_buffer_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 lttng_kernel_ring_buffer_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 lttng_kernel_ring_buffer_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 */
@@ -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 lttng_kernel_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 lttng_kernel_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 lttng_kernel_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 lttng_kernel_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,14 +387,14 @@ static void client_buffer_end(struct lttng_kernel_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;
 }
 
@@ -514,7 +515,7 @@ static const struct lttng_kernel_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,
@@ -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)
 {
@@ -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.026317 seconds and 4 git commands to generate.