Calculate context length outside of retry loop
[lttng-modules.git] / lib / ringbuffer / config.h
index 5a9f8962070e49af5884bdb2e0478e9f5bdc07ba..05985197ff930ee3b6a889f36abbbc5f6599aa06 100644 (file)
@@ -1,19 +1,33 @@
-#ifndef _LINUX_RING_BUFFER_CONFIG_H
-#define _LINUX_RING_BUFFER_CONFIG_H
+#ifndef _LIB_RING_BUFFER_CONFIG_H
+#define _LIB_RING_BUFFER_CONFIG_H
 
 /*
- * linux/ringbuffer/config.h
- *
- * Copyright (C) 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * lib/ringbuffer/config.h
  *
  * Ring buffer configuration header. Note: after declaring the standard inline
  * functions, clients should also include linux/ringbuffer/api.h.
  *
- * Dual LGPL v2.1/GPL v2 license.
+ * Copyright (C) 2010-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
  */
 
 #include <linux/types.h>
 #include <linux/percpu.h>
+#include <lib/align.h>
+#include <lttng-tracer-core.h>
 
 struct lib_ring_buffer;
 struct channel;
@@ -33,10 +47,9 @@ struct lib_ring_buffer_client_cb {
        u64 (*ring_buffer_clock_read) (struct channel *chan);
        size_t (*record_header_size) (const struct lib_ring_buffer_config *config,
                                      struct channel *chan, size_t offset,
-                                     size_t data_size,
                                      size_t *pre_header_padding,
-                                     unsigned int rflags,
-                                     struct lib_ring_buffer_ctx *ctx);
+                                     struct lib_ring_buffer_ctx *ctx,
+                                     void *client_ctx);
 
        /* Slow path only, at subbuffer switch */
        size_t (*subbuffer_header_size) (void);
@@ -94,7 +107,7 @@ struct lib_ring_buffer_client_cb {
  *
  * wakeup:
  *
- * RING_BUFFER_WAKEUP_BY_TIMER uses per-cpu deferrable timers to poll the
+ * RING_BUFFER_WAKEUP_BY_TIMER uses per-cpu timers to poll the
  * buffers and wake up readers if data is ready. Mainly useful for tracers which
  * don't want to call into the wakeup code on the tracing path. Use in
  * combination with "read_timer_interval" channel_create() argument.
@@ -188,6 +201,8 @@ struct lib_ring_buffer_ctx {
                                         */
        u64 tsc;                        /* time-stamp counter value */
        unsigned int rflags;            /* reservation flags */
+       /* Cache backend pages pointer chasing. */
+       struct lib_ring_buffer_backend_pages *backend_pages;
 };
 
 /**
@@ -195,7 +210,7 @@ struct lib_ring_buffer_ctx {
  * @ctx: ring buffer context to initialize
  * @chan: channel
  * @priv: client private data
- * @data_size: size of record data payload
+ * @data_size: size of record data payload. It must be greater than 0.
  * @largest_align: largest alignment within data payload types
  * @cpu: processor id
  */
@@ -210,6 +225,8 @@ void lib_ring_buffer_ctx_init(struct lib_ring_buffer_ctx *ctx,
        ctx->data_size = data_size;
        ctx->largest_align = largest_align;
        ctx->cpu = cpu;
+       ctx->rflags = 0;
+       ctx->backend_pages = NULL;
 }
 
 /*
@@ -229,6 +246,10 @@ void lib_ring_buffer_ctx_init(struct lib_ring_buffer_ctx *ctx,
 #define        RING_BUFFER_RFLAG_FULL_TSC              (1U << 0)
 #define RING_BUFFER_RFLAG_END                  (1U << 1)
 
+#ifndef LTTNG_TRACER_CORE_H
+#error "lttng-tracer-core.h is needed for RING_BUFFER_ALIGN define"
+#endif
+
 /*
  * We need to define RING_BUFFER_ALIGN_ATTR so it is known early at
  * compile-time. We have to duplicate the "config->align" information and the
@@ -293,6 +314,6 @@ int lib_ring_buffer_check_config(const struct lib_ring_buffer_config *config,
        return 0;
 }
 
-#include "../../wrapper/ringbuffer/vatomic.h"
+#include <wrapper/ringbuffer/vatomic.h>
 
-#endif /* _LINUX_RING_BUFFER_CONFIG_H */
+#endif /* _LIB_RING_BUFFER_CONFIG_H */
This page took 0.025743 seconds and 4 git commands to generate.