Fix: pass private data to context callbacks
[lttng-ust.git] / libringbuffer / ring_buffer_backend.c
index 72c49102fc935e0995ac08982a1703118d87ac23..6ba0d8b1d44fe4fbb4dbe8989e773a355691c4d2 100644 (file)
@@ -1,35 +1,26 @@
 /*
- * ring_buffer_backend.c
+ * SPDX-License-Identifier: LGPL-2.1-only
  *
  * Copyright (C) 2005-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; only
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#define _GNU_SOURCE
 #define _LGPL_SOURCE
+#include <stddef.h>
+#include <stdint.h>
 #include <unistd.h>
 #include <urcu/arch.h>
 #include <limits.h>
 
-#include <lttng/ringbuffer-config.h>
+#include <lttng/ust-utils.h>
+#include <lttng/ringbuffer-context.h>
+
+#include "ringbuffer-config.h"
 #include "vatomic.h"
 #include "backend.h"
 #include "frontend.h"
 #include "smp.h"
 #include "shm.h"
+#include "ust-compat.h"
 
 /**
  * lib_ring_buffer_backend_allocate - allocate a channel buffer
@@ -42,7 +33,7 @@
 static
 int lib_ring_buffer_backend_allocate(const struct lttng_ust_lib_ring_buffer_config *config,
                                     struct lttng_ust_lib_ring_buffer_backend *bufb,
-                                    size_t size, size_t num_subbuf,
+                                    size_t size __attribute__((unused)), size_t num_subbuf,
                                     int extra_reader_sb,
                                     struct lttng_ust_shm_handle *handle,
                                     struct shm_object *shmobj)
@@ -63,7 +54,7 @@ int lib_ring_buffer_backend_allocate(const struct lttng_ust_lib_ring_buffer_conf
        if (extra_reader_sb)
                num_subbuf_alloc++;
 
-       page_size = sysconf(_SC_PAGE_SIZE);
+       page_size = LTTNG_UST_PAGE_SIZE;
        if (page_size <= 0) {
                goto page_size_error;
        }
@@ -234,7 +225,8 @@ void lib_ring_buffer_backend_reset(struct lttng_ust_lib_ring_buffer_backend *buf
  */
 void channel_backend_reset(struct channel_backend *chanb)
 {
-       struct channel *chan = caa_container_of(chanb, struct channel, backend);
+       struct lttng_ust_lib_ring_buffer_channel *chan = caa_container_of(chanb,
+                       struct lttng_ust_lib_ring_buffer_channel, backend);
        const struct lttng_ust_lib_ring_buffer_config *config = &chanb->config;
 
        /*
@@ -271,7 +263,8 @@ int channel_backend_init(struct channel_backend *chanb,
                         struct lttng_ust_shm_handle *handle,
                         const int *stream_fds)
 {
-       struct channel *chan = caa_container_of(chanb, struct channel, backend);
+       struct lttng_ust_lib_ring_buffer_channel *chan = caa_container_of(chanb,
+                       struct lttng_ust_lib_ring_buffer_channel, backend);
        unsigned int i;
        int ret;
        size_t shmsize = 0, num_subbuf_alloc;
@@ -280,7 +273,7 @@ int channel_backend_init(struct channel_backend *chanb,
        if (!name)
                return -EPERM;
 
-       page_size = sysconf(_SC_PAGE_SIZE);
+       page_size = LTTNG_UST_PAGE_SIZE;
        if (page_size <= 0) {
                return -ENOMEM;
        }
@@ -320,27 +313,29 @@ int channel_backend_init(struct channel_backend *chanb,
        memcpy(&chanb->config, config, sizeof(*config));
 
        /* Per-cpu buffer size: control (prior to backend) */
-       shmsize = offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer));
+       shmsize = lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer));
        shmsize += sizeof(struct lttng_ust_lib_ring_buffer);
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct commit_counters_hot));
+       shmsize += sizeof(struct commit_counters_hot) * num_subbuf;
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct commit_counters_cold));
+       shmsize += sizeof(struct commit_counters_cold) * num_subbuf;
+       /* Sampled timestamp end */
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(uint64_t));
+       shmsize += sizeof(uint64_t) * num_subbuf;
 
        /* Per-cpu buffer size: backend */
        /* num_subbuf + 1 is the worse case */
        num_subbuf_alloc = num_subbuf + 1;
-       shmsize += offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_pages_shmp));
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_pages_shmp));
        shmsize += sizeof(struct lttng_ust_lib_ring_buffer_backend_pages_shmp) * num_subbuf_alloc;
-       shmsize += offset_align(shmsize, page_size);
+       shmsize += lttng_ust_offset_align(shmsize, page_size);
        shmsize += subbuf_size * num_subbuf_alloc;
-       shmsize += offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_pages));
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_pages));
        shmsize += sizeof(struct lttng_ust_lib_ring_buffer_backend_pages) * num_subbuf_alloc;
-       shmsize += offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_subbuffer));
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_subbuffer));
        shmsize += sizeof(struct lttng_ust_lib_ring_buffer_backend_subbuffer) * num_subbuf;
-       shmsize += offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_counts));
+       shmsize += lttng_ust_offset_align(shmsize, __alignof__(struct lttng_ust_lib_ring_buffer_backend_counts));
        shmsize += sizeof(struct lttng_ust_lib_ring_buffer_backend_counts) * num_subbuf;
-       /* Per-cpu buffer size: control (after backend) */
-       shmsize += offset_align(shmsize, __alignof__(struct commit_counters_hot));
-       shmsize += sizeof(struct commit_counters_hot) * num_subbuf;
-       shmsize += offset_align(shmsize, __alignof__(struct commit_counters_cold));
-       shmsize += sizeof(struct commit_counters_cold) * num_subbuf;
 
        if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) {
                struct lttng_ust_lib_ring_buffer *buf;
@@ -351,7 +346,7 @@ int channel_backend_init(struct channel_backend *chanb,
                        struct shm_object *shmobj;
 
                        shmobj = shm_object_table_alloc(handle->table, shmsize,
-                                       SHM_OBJECT_SHM, stream_fds[i]);
+                                       SHM_OBJECT_SHM, stream_fds[i], i);
                        if (!shmobj)
                                goto end;
                        align_shm(shmobj, __alignof__(struct lttng_ust_lib_ring_buffer));
@@ -370,7 +365,7 @@ int channel_backend_init(struct channel_backend *chanb,
                struct lttng_ust_lib_ring_buffer *buf;
 
                shmobj = shm_object_table_alloc(handle->table, shmsize,
-                                       SHM_OBJECT_SHM, stream_fds[0]);
+                                       SHM_OBJECT_SHM, stream_fds[0], -1);
                if (!shmobj)
                        goto end;
                align_shm(shmobj, __alignof__(struct lttng_ust_lib_ring_buffer));
@@ -400,8 +395,8 @@ end:
  *
  * Destroy all channel buffers and frees the channel.
  */
-void channel_backend_free(struct channel_backend *chanb,
-                         struct lttng_ust_shm_handle *handle)
+void channel_backend_free(struct channel_backend *chanb __attribute__((unused)),
+                         struct lttng_ust_shm_handle *handle __attribute__((unused)))
 {
        /* SHM teardown takes care of everything */
 }
This page took 0.026637 seconds and 4 git commands to generate.