X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-ring-buffer-client.h;h=8916ab0239a537215a310f05acf1b99c8ef97ff2;hb=refs%2Fheads%2Fstable-2.10;hp=34493333bcc8a0055db535cf262a319e09b92021;hpb=5b3cf4f924befda843a7736daf84f8ecae5e86a4;p=lttng-modules.git diff --git a/lttng-ring-buffer-client.h b/lttng-ring-buffer-client.h index 34493333..8916ab02 100644 --- a/lttng-ring-buffer-client.h +++ b/lttng-ring-buffer-client.h @@ -22,12 +22,12 @@ #include #include -#include "lib/bitfield.h" -#include "wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */ -#include "wrapper/trace-clock.h" -#include "lttng-events.h" -#include "lttng-tracer.h" -#include "wrapper/ringbuffer/frontend_types.h" +#include +#include /* for wrapper_vmalloc_sync_all() */ +#include +#include +#include +#include #define LTTNG_COMPACT_EVENT_BITS 5 #define LTTNG_COMPACT_TSC_BITS 27 @@ -57,6 +57,7 @@ struct packet_header { */ uint8_t uuid[16]; uint32_t stream_id; + uint64_t stream_instance_id; struct { /* Stream packet context */ @@ -123,13 +124,14 @@ void ctx_record(struct lib_ring_buffer_ctx *bufctx, * contains. */ static __inline__ -unsigned char record_header_size(const struct lib_ring_buffer_config *config, +size_t record_header_size(const struct lib_ring_buffer_config *config, struct channel *chan, size_t offset, size_t *pre_header_padding, struct lib_ring_buffer_ctx *ctx) { struct lttng_channel *lttng_chan = channel_get_private(chan); - struct lttng_event *event = ctx->priv; + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; size_t orig_offset = offset; size_t padding; @@ -168,14 +170,14 @@ unsigned char record_header_size(const struct lib_ring_buffer_config *config, padding = 0; WARN_ON_ONCE(1); } - offset += ctx_get_size(offset, event->ctx); offset += ctx_get_size(offset, lttng_chan->ctx); + offset += ctx_get_size(offset, event->ctx); *pre_header_padding = padding; return offset - orig_offset; } -#include "wrapper/ringbuffer/api.h" +#include static void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config, @@ -197,7 +199,8 @@ void lttng_write_event_header(const struct lib_ring_buffer_config *config, uint32_t event_id) { struct lttng_channel *lttng_chan = channel_get_private(ctx->chan); - struct lttng_event *event = ctx->priv; + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; if (unlikely(ctx->rflags)) goto slow_path; @@ -248,7 +251,8 @@ void lttng_write_event_header_slow(const struct lib_ring_buffer_config *config, uint32_t event_id) { struct lttng_channel *lttng_chan = channel_get_private(ctx->chan); - struct lttng_event *event = ctx->priv; + struct lttng_probe_ctx *lttng_probe_ctx = ctx->priv; + struct lttng_event *event = lttng_probe_ctx->event; switch (lttng_chan->header_type) { case 1: /* compact */ @@ -352,6 +356,7 @@ static void client_buffer_begin(struct lib_ring_buffer *buf, u64 tsc, header->magic = CTF_MAGIC_NUMBER; memcpy(header->uuid, session->uuid.b, sizeof(session->uuid)); header->stream_id = lttng_chan->id; + header->stream_instance_id = buf->backend.cpu; header->ctx.timestamp_begin = tsc; header->ctx.timestamp_end = 0; header->ctx.content_size = ~0ULL; /* for debugging */ @@ -459,9 +464,10 @@ static int client_stream_id(const struct lib_ring_buffer_config *config, struct lib_ring_buffer *buf, uint64_t *stream_id) { - struct packet_header *header = client_packet_header(config, buf); - *stream_id = header->stream_id; + struct channel *chan = buf->backend.chan; + struct lttng_channel *lttng_chan = channel_get_private(chan); + *stream_id = lttng_chan->id; return 0; } @@ -485,6 +491,16 @@ static int client_sequence_number(const struct lib_ring_buffer_config *config, return 0; } +static +int client_instance_id(const struct lib_ring_buffer_config *config, + struct lib_ring_buffer *buf, + uint64_t *id) +{ + *id = buf->backend.cpu; + + return 0; +} + static const struct lib_ring_buffer_config client_config = { .cb.ring_buffer_clock_read = client_ring_buffer_clock_read, .cb.record_header_size = client_record_header_size, @@ -590,7 +606,7 @@ int lttng_event_reserve(struct lib_ring_buffer_ctx *ctx, int ret, cpu; cpu = lib_ring_buffer_get_cpu(&client_config); - if (cpu < 0) + if (unlikely(cpu < 0)) return -EPERM; ctx->cpu = cpu; @@ -608,8 +624,10 @@ int lttng_event_reserve(struct lib_ring_buffer_ctx *ctx, } ret = lib_ring_buffer_reserve(&client_config, ctx); - if (ret) + if (unlikely(ret)) goto put; + lib_ring_buffer_backend_get_pages(&client_config, ctx, + &ctx->backend_pages); lttng_write_event_header(&client_config, ctx, event_id); return 0; put: @@ -716,6 +734,7 @@ static struct lttng_transport lttng_relay_transport = { .stream_id = client_stream_id, .current_timestamp = client_current_timestamp, .sequence_number = client_sequence_number, + .instance_id = client_instance_id, }, };