Ring buffer: use shmp (shared-memory pointers) for per-channel shm structures
[lttng-ust.git] / libringbuffer / frontend.h
index 01af77a281b046a9dfc8d3de2d0eb69daa98c15e..fe301c1b4ee981268fdc8f4e71e8de241ceae012 100644 (file)
  * Dual LGPL v2.1/GPL v2 license.
  */
 
-#include <linux/pipe_fs_i.h>
-#include <linux/rcupdate.h>
-#include <linux/cpumask.h>
-#include <linux/module.h>
-#include <linux/bitops.h>
-#include <linux/splice.h>
-#include <linux/string.h>
-#include <linux/timer.h>
-#include <linux/sched.h>
-#include <linux/cache.h>
-#include <linux/time.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/stat.h>
-#include <linux/cpu.h>
-#include <linux/fs.h>
-
-#include <asm/atomic.h>
-#include <asm/local.h>
+#include <urcu/compiler.h>
+#include <urcu/uatomic.h>
 
+#include "smp.h"
 /* Internal helpers */
-#include "../../wrapper/ringbuffer/frontend_internal.h"
+#include "frontend_internal.h"
 
 /* Buffer creation/removal and setup operations */
 
@@ -58,7 +42,8 @@ struct channel *channel_create(const struct lib_ring_buffer_config *config,
                               void *buf_addr,
                               size_t subbuf_size, size_t num_subbuf,
                               unsigned int switch_timer_interval,
-                              unsigned int read_timer_interval);
+                              unsigned int read_timer_interval,
+                              int *shmid);
 
 /*
  * channel_destroy returns the private data pointer. It finalizes all channel's
@@ -78,9 +63,7 @@ void *channel_destroy(struct channel *chan);
  * only performed at channel destruction.
  */
 #define for_each_channel_cpu(cpu, chan)                                        \
-       for ((cpu) = -1;                                                \
-               ({ (cpu) = cpumask_next(cpu, (chan)->backend.cpumask);  \
-                  smp_read_barrier_depends(); (cpu) < nr_cpu_ids; });)
+       for_each_possible_cpu(cpu)
 
 extern struct lib_ring_buffer *channel_get_ring_buffer(
                                const struct lib_ring_buffer_config *config,
@@ -121,7 +104,7 @@ static inline void lib_ring_buffer_put_next_subbuf(struct lib_ring_buffer *buf)
 {
        lib_ring_buffer_put_subbuf(buf);
        lib_ring_buffer_move_consumer(buf, subbuf_align(buf->cons_snapshot,
-                                                   buf->backend.chan));
+                                                   shmp(buf->backend.chan)));
 }
 
 extern void channel_reset(struct channel *chan);
@@ -138,7 +121,7 @@ static inline
 unsigned long lib_ring_buffer_get_consumed(const struct lib_ring_buffer_config *config,
                                           struct lib_ring_buffer *buf)
 {
-       return atomic_long_read(&buf->consumed);
+       return uatomic_read(&buf->consumed);
 }
 
 /*
@@ -149,11 +132,11 @@ static inline
 int lib_ring_buffer_is_finalized(const struct lib_ring_buffer_config *config,
                                 struct lib_ring_buffer *buf)
 {
-       int finalized = ACCESS_ONCE(buf->finalized);
+       int finalized = CMM_ACCESS_ONCE(buf->finalized);
        /*
         * Read finalized before counters.
         */
-       smp_rmb();
+       cmm_smp_rmb();
        return finalized;
 }
 
@@ -166,7 +149,7 @@ int lib_ring_buffer_channel_is_finalized(const struct channel *chan)
 static inline
 int lib_ring_buffer_channel_is_disabled(const struct channel *chan)
 {
-       return atomic_read(&chan->record_disabled);
+       return uatomic_read(&chan->record_disabled);
 }
 
 static inline
This page took 0.02464 seconds and 4 git commands to generate.