*/
#include <errno.h>
+#include "ust/lttng-tracer.h"
+#include "ust/usterr-signal-safe.h"
#include "ust/kcompat/kcompat.h"
#include "ust/align.h"
struct channel;
struct lib_ring_buffer_config;
struct lib_ring_buffer_ctx;
+struct shm_handle *handle;
/*
* Ring buffer client callbacks. Only used by slow path, never on fast path.
/* Slow path only, at subbuffer switch */
size_t (*subbuffer_header_size) (void);
void (*buffer_begin) (struct lib_ring_buffer *buf, u64 tsc,
- unsigned int subbuf_idx);
+ unsigned int subbuf_idx,
+ struct shm_handle *handle);
void (*buffer_end) (struct lib_ring_buffer *buf, u64 tsc,
- unsigned int subbuf_idx, unsigned long data_size);
+ unsigned int subbuf_idx, unsigned long data_size,
+ struct shm_handle *handle);
/* Optional callbacks (can be set to NULL) */
/* Called at buffer creation/finalize */
int (*buffer_create) (struct lib_ring_buffer *buf, void *priv,
- int cpu, const char *name);
+ int cpu, const char *name,
+ struct shm_handle *handle);
/*
* Clients should guarantee that no new reader handle can be opened
* after finalize.
*/
- void (*buffer_finalize) (struct lib_ring_buffer *buf, void *priv, int cpu);
+ void (*buffer_finalize) (struct lib_ring_buffer *buf,
+ void *priv, int cpu,
+ struct shm_handle *handle);
/*
* Extract header length, payload length and timestamp from event
void (*record_get) (const struct lib_ring_buffer_config *config,
struct channel *chan, struct lib_ring_buffer *buf,
size_t offset, size_t *header_len,
- size_t *payload_len, u64 *timestamp);
+ size_t *payload_len, u64 *timestamp,
+ struct shm_handle *handle);
};
/*
/* input received by lib_ring_buffer_reserve(), saved here. */
struct channel *chan; /* channel */
void *priv; /* client private data */
+ struct shm_handle *handle; /* shared-memory handle */
size_t data_size; /* size of payload */
int largest_align; /*
* alignment of the largest element
void lib_ring_buffer_ctx_init(struct lib_ring_buffer_ctx *ctx,
struct channel *chan, void *priv,
size_t data_size, int largest_align,
- int cpu)
+ int cpu, struct shm_handle *handle)
{
ctx->chan = chan;
ctx->priv = priv;
ctx->largest_align = largest_align;
ctx->cpu = cpu;
ctx->rflags = 0;
+ ctx->handle = handle;
}
/*