X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Fbackend_types.h;h=f821c27fdd0684695866148da84a6e1fd8599e62;hb=c0c0989ab70574e09b2f7e8b48c2da6af664a849;hp=cfbe59c3cdedefb091148f648671bd35972c01c0;hpb=14641debd03ba299bd06040cb62e0dbdef7fac81;p=lttng-ust.git diff --git a/libringbuffer/backend_types.h b/libringbuffer/backend_types.h index cfbe59c3..f821c27f 100644 --- a/libringbuffer/backend_types.h +++ b/libringbuffer/backend_types.h @@ -1,58 +1,81 @@ -#ifndef _LINUX_RING_BUFFER_BACKEND_TYPES_H -#define _LINUX_RING_BUFFER_BACKEND_TYPES_H - /* - * linux/ringbuffer/backend_types.h + * SPDX-License-Identifier: LGPL-2.1-only * - * Copyright (C) 2008-2010 - Mathieu Desnoyers + * Copyright (C) 2008-2012 Mathieu Desnoyers * * Ring buffer backend (types). - * - * Dual LGPL v2.1/GPL v2 license. */ -struct lib_ring_buffer_backend_page { - void *virt; /* page virtual address (cached) */ - struct page *page; /* pointer to page structure */ -}; +#ifndef _LTTNG_RING_BUFFER_BACKEND_TYPES_H +#define _LTTNG_RING_BUFFER_BACKEND_TYPES_H + +#include +#include +#include "shm_internal.h" +#include "vatomic.h" -struct lib_ring_buffer_backend_pages { +#define RB_BACKEND_PAGES_PADDING 16 +struct lttng_ust_lib_ring_buffer_backend_pages { unsigned long mmap_offset; /* offset of the subbuffer in mmap */ union v_atomic records_commit; /* current records committed count */ union v_atomic records_unread; /* records to read */ unsigned long data_size; /* Amount of data to read from subbuf */ - struct lib_ring_buffer_backend_page p[]; + DECLARE_SHMP(char, p); /* Backing memory map */ + char padding[RB_BACKEND_PAGES_PADDING]; }; -struct lib_ring_buffer_backend_subbuffer { +struct lttng_ust_lib_ring_buffer_backend_subbuffer { /* Identifier for subbuf backend pages. Exchanged atomically. */ unsigned long id; /* backend subbuffer identifier */ }; +struct lttng_ust_lib_ring_buffer_backend_counts { + /* + * Counter specific to the sub-buffer location within the ring buffer. + * The actual sequence number of the packet within the entire ring + * buffer can be derived from the formula nr_subbuffers * seq_cnt + + * subbuf_idx. + */ + uint64_t seq_cnt; /* packet sequence number */ +}; + /* * Forward declaration of frontend-specific channel and ring_buffer. */ struct channel; -struct lib_ring_buffer; +struct lttng_ust_lib_ring_buffer; + +struct lttng_ust_lib_ring_buffer_backend_pages_shmp { + DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_backend_pages, shmp); +}; -struct lib_ring_buffer_backend { +#define RB_BACKEND_RING_BUFFER_PADDING 64 +struct lttng_ust_lib_ring_buffer_backend { /* Array of ring_buffer_backend_subbuffer for writer */ - struct lib_ring_buffer_backend_subbuffer *buf_wsb; + DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_backend_subbuffer, buf_wsb); /* ring_buffer_backend_subbuffer for reader */ - struct lib_ring_buffer_backend_subbuffer buf_rsb; + struct lttng_ust_lib_ring_buffer_backend_subbuffer buf_rsb; + /* Array of lib_ring_buffer_backend_counts for the packet counter */ + DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_backend_counts, buf_cnt); /* * Pointer array of backend pages, for whole buffer. * Indexed by ring_buffer_backend_subbuffer identifier (id) index. */ - struct lib_ring_buffer_backend_pages **array; - unsigned int num_pages_per_subbuf; + DECLARE_SHMP(struct lttng_ust_lib_ring_buffer_backend_pages_shmp, array); + DECLARE_SHMP(char, memory_map); /* memory mapping */ - struct channel *chan; /* Associated channel */ + DECLARE_SHMP(struct channel, chan); /* Associated channel */ int cpu; /* This buffer's cpu. -1 if global. */ union v_atomic records_read; /* Number of records read */ - unsigned int allocated:1; /* Bool: is buffer allocated ? */ + unsigned int allocated:1; /* is buffer allocated ? */ + char padding[RB_BACKEND_RING_BUFFER_PADDING]; }; +struct lttng_ust_lib_ring_buffer_shmp { + DECLARE_SHMP(struct lttng_ust_lib_ring_buffer, shmp); /* Channel per-cpu buffers */ +}; + +#define RB_BACKEND_CHANNEL_PADDING 64 struct channel_backend { unsigned long buf_size; /* Size of the buffer */ unsigned long subbuf_size; /* Sub-buffer size */ @@ -62,14 +85,14 @@ struct channel_backend { * for writer. */ unsigned int buf_size_order; /* Order of buffer size */ - int extra_reader_sb:1; /* Bool: has extra reader subbuffer */ - struct lib_ring_buffer *buf; /* Channel per-cpu buffers */ - + unsigned int extra_reader_sb:1; /* has extra reader subbuffer ? */ unsigned long num_subbuf; /* Number of sub-buffers for writer */ - u64 start_tsc; /* Channel creation TSC value */ - void *priv; /* Client-specific information */ - const struct lib_ring_buffer_config *config; /* Ring buffer configuration */ + uint64_t start_tsc; /* Channel creation TSC value */ + DECLARE_SHMP(void *, priv_data);/* Client-specific information */ + struct lttng_ust_lib_ring_buffer_config config; /* Ring buffer configuration */ char name[NAME_MAX]; /* Channel name */ + char padding[RB_BACKEND_CHANNEL_PADDING]; + struct lttng_ust_lib_ring_buffer_shmp buf[]; }; -#endif /* _LINUX_RING_BUFFER_BACKEND_TYPES_H */ +#endif /* _LTTNG_RING_BUFFER_BACKEND_TYPES_H */