Fix: handle capture page faults as skip field
[lttng-modules.git] / src / lttng-ring-buffer-client.h
index 2eee81a1fad57f37d1f1e305af1a4d282cedacc0..0dc8a8d9f5f73393a04afa39efe51db09e226e1d 100644 (file)
@@ -377,7 +377,8 @@ static void client_buffer_begin(struct lttng_kernel_ring_buffer *buf, u64 tsc,
  * 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)
+                             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 =
@@ -391,9 +392,9 @@ static void client_buffer_end(struct lttng_kernel_ring_buffer *buf, u64 tsc,
                (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;
 }
 
@@ -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.024841 seconds and 4 git commands to generate.