X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=libringbuffer%2Fbackend.h;h=6b18e4cf51f7fbf94fe442ad473fead7ed673947;hb=c53279a3e7796da67c5ad8d5e5657bf03def2dcb;hp=698994c21881a78a7c7beb160c0daa3a47e689fe;hpb=879f9b0aa0c9a8ee31ba47bfaaf6539ef2e349b2;p=lttng-ust.git diff --git a/libringbuffer/backend.h b/libringbuffer/backend.h index 698994c2..6b18e4cf 100644 --- a/libringbuffer/backend.h +++ b/libringbuffer/backend.h @@ -23,15 +23,15 @@ /* Ring buffer backend access (read/write) */ -__attribute__((visibility("hidden"))) extern size_t lib_ring_buffer_read(struct lttng_ust_lib_ring_buffer_backend *bufb, size_t offset, void *dest, size_t len, - struct lttng_ust_shm_handle *handle); + struct lttng_ust_shm_handle *handle) + __attribute__((visibility("hidden"))); -__attribute__((visibility("hidden"))) extern int lib_ring_buffer_read_cstr(struct lttng_ust_lib_ring_buffer_backend *bufb, size_t offset, void *dest, size_t len, - struct lttng_ust_shm_handle *handle); + struct lttng_ust_shm_handle *handle) + __attribute__((visibility("hidden"))); /* * Return the address where a given offset is located. @@ -39,17 +39,17 @@ extern int lib_ring_buffer_read_cstr(struct lttng_ust_lib_ring_buffer_backend *b * it's never on a page boundary, it's safe to write directly to this address, * as long as the write is never bigger than a page size. */ -__attribute__((visibility("hidden"))) extern void * lib_ring_buffer_offset_address(struct lttng_ust_lib_ring_buffer_backend *bufb, size_t offset, - struct lttng_ust_shm_handle *handle); + struct lttng_ust_shm_handle *handle) + __attribute__((visibility("hidden"))); -__attribute__((visibility("hidden"))) extern void * lib_ring_buffer_read_offset_address(struct lttng_ust_lib_ring_buffer_backend *bufb, size_t offset, - struct lttng_ust_shm_handle *handle); + struct lttng_ust_shm_handle *handle) + __attribute__((visibility("hidden"))); /** * lib_ring_buffer_write - write data to a buffer backend @@ -63,14 +63,20 @@ lib_ring_buffer_read_offset_address(struct lttng_ust_lib_ring_buffer_backend *bu * backend-specific memcpy() operation. Calls the slow path (_ring_buffer_write) * if copy is crossing a page boundary. */ -static inline __attribute__((always_inline)) +static inline +void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config, + struct lttng_ust_lib_ring_buffer_ctx *ctx, + const void *src, size_t len) + __attribute__((always_inline)); +static inline void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config, struct lttng_ust_lib_ring_buffer_ctx *ctx, const void *src, size_t len) { - struct channel_backend *chanb = &ctx->chan->backend; - struct lttng_ust_shm_handle *handle = ctx->handle; - size_t offset = ctx->buf_offset; + struct lttng_ust_lib_ring_buffer_ctx_private *ctx_private = ctx->priv; + struct channel_backend *chanb = &ctx_private->chan->backend; + struct lttng_ust_shm_handle *handle = ctx_private->chan->handle; + size_t offset = ctx_private->buf_offset; struct lttng_ust_lib_ring_buffer_backend_pages *backend_pages; void *p; @@ -90,7 +96,7 @@ void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config if (caa_unlikely(!p)) return; lib_ring_buffer_do_copy(config, p, src, len); - ctx->buf_offset += len; + ctx_private->buf_offset += len; } /* @@ -98,7 +104,11 @@ void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config * terminating character is found in @src. Returns the number of bytes * copied. Does *not* terminate @dest with NULL terminating character. */ -static inline __attribute__((always_inline)) +static inline +size_t lib_ring_buffer_do_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, + char *dest, const char *src, size_t len) + __attribute__((always_inline)); +static inline size_t lib_ring_buffer_do_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, char *dest, const char *src, size_t len) { @@ -134,15 +144,21 @@ size_t lib_ring_buffer_do_strcpy(const struct lttng_ust_lib_ring_buffer_config * * character is found in @src before @len - 1 characters are copied, pad * the buffer with @pad characters (e.g. '#'). */ -static inline __attribute__((always_inline)) +static inline +void lib_ring_buffer_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, + struct lttng_ust_lib_ring_buffer_ctx *ctx, + const char *src, size_t len, char pad) + __attribute__((always_inline)); +static inline void lib_ring_buffer_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, struct lttng_ust_lib_ring_buffer_ctx *ctx, const char *src, size_t len, char pad) { - struct channel_backend *chanb = &ctx->chan->backend; - struct lttng_ust_shm_handle *handle = ctx->handle; + struct lttng_ust_lib_ring_buffer_ctx_private *ctx_private = ctx->priv; + struct channel_backend *chanb = &ctx_private->chan->backend; + struct lttng_ust_shm_handle *handle = ctx_private->chan->handle; size_t count; - size_t offset = ctx->buf_offset; + size_t offset = ctx_private->buf_offset; struct lttng_ust_lib_ring_buffer_backend_pages *backend_pages; void *p; @@ -179,7 +195,7 @@ void lib_ring_buffer_strcpy(const struct lttng_ust_lib_ring_buffer_config *confi if (caa_unlikely(!p)) return; lib_ring_buffer_do_memset(p, '\0', 1); - ctx->buf_offset += len; + ctx_private->buf_offset += len; } /** @@ -198,15 +214,21 @@ void lib_ring_buffer_strcpy(const struct lttng_ust_lib_ring_buffer_config *confi * The length of the pascal strings in the ring buffer is explicit: it * is either the array or sequence length. */ -static inline __attribute__((always_inline)) +static inline +void lib_ring_buffer_pstrcpy(const struct lttng_ust_lib_ring_buffer_config *config, + struct lttng_ust_lib_ring_buffer_ctx *ctx, + const char *src, size_t len, char pad) + __attribute__((always_inline)); +static inline void lib_ring_buffer_pstrcpy(const struct lttng_ust_lib_ring_buffer_config *config, struct lttng_ust_lib_ring_buffer_ctx *ctx, const char *src, size_t len, char pad) { - struct channel_backend *chanb = &ctx->chan->backend; - struct lttng_ust_shm_handle *handle = ctx->handle; + struct lttng_ust_lib_ring_buffer_ctx_private *ctx_private = ctx->priv; + struct channel_backend *chanb = &ctx_private->chan->backend; + struct lttng_ust_shm_handle *handle = ctx_private->chan->handle; size_t count; - size_t offset = ctx->buf_offset; + size_t offset = ctx_private->buf_offset; struct lttng_ust_lib_ring_buffer_backend_pages *backend_pages; void *p; @@ -237,7 +259,7 @@ void lib_ring_buffer_pstrcpy(const struct lttng_ust_lib_ring_buffer_config *conf return; lib_ring_buffer_do_memset(p, pad, pad_len); } - ctx->buf_offset += len; + ctx_private->buf_offset += len; } /*