X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libringbuffer%2Fvatomic.h;h=0f5cc03d9fdd895a6ad9cc56f88fa352b80df890;hb=c0c0989ab70574e09b2f7e8b48c2da6af664a849;hp=eea6d049c71d995545054c5775a0b9cda43baf59;hpb=4931a13e87ddbbabe4911e622e78c85b2197ecbf;p=lttng-ust.git diff --git a/libringbuffer/vatomic.h b/libringbuffer/vatomic.h index eea6d049..0f5cc03d 100644 --- a/libringbuffer/vatomic.h +++ b/libringbuffer/vatomic.h @@ -1,14 +1,15 @@ -#ifndef _LINUX_RING_BUFFER_VATOMIC_H -#define _LINUX_RING_BUFFER_VATOMIC_H - /* - * linux/ringbuffer/vatomic.h - * - * Copyright (C) 2010 - Mathieu Desnoyers + * SPDX-License-Identifier: MIT * - * Dual LGPL v2.1/GPL v2 license. + * Copyright (C) 2010-2012 Mathieu Desnoyers */ +#ifndef _LTTNG_RING_BUFFER_VATOMIC_H +#define _LTTNG_RING_BUFFER_VATOMIC_H + +#include +#include + /* * Same data type (long) accessed differently depending on configuration. * v field is for non-atomic access (protected by mutual exclusion). @@ -18,65 +19,54 @@ * atomic_long_t is used for globally shared buffers. */ union v_atomic { - local_t l; - atomic_long_t a; + long a; /* accessed through uatomic */ long v; }; static inline -long v_read(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +long v_read(const struct lttng_ust_lib_ring_buffer_config *config, union v_atomic *v_a) { - if (config->sync == RING_BUFFER_SYNC_PER_CPU) - return local_read(&v_a->l); - else - return atomic_long_read(&v_a->a); + assert(config->sync != RING_BUFFER_SYNC_PER_CPU); + return uatomic_read(&v_a->a); } static inline -void v_set(const struct lib_ring_buffer_config *config, union v_atomic *v_a, +void v_set(const struct lttng_ust_lib_ring_buffer_config *config, union v_atomic *v_a, long v) { - if (config->sync == RING_BUFFER_SYNC_PER_CPU) - local_set(&v_a->l, v); - else - atomic_long_set(&v_a->a, v); + assert(config->sync != RING_BUFFER_SYNC_PER_CPU); + uatomic_set(&v_a->a, v); } static inline -void v_add(const struct lib_ring_buffer_config *config, long v, union v_atomic *v_a) +void v_add(const struct lttng_ust_lib_ring_buffer_config *config, long v, union v_atomic *v_a) { - if (config->sync == RING_BUFFER_SYNC_PER_CPU) - local_add(v, &v_a->l); - else - atomic_long_add(v, &v_a->a); + assert(config->sync != RING_BUFFER_SYNC_PER_CPU); + uatomic_add(&v_a->a, v); } static inline -void v_inc(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +void v_inc(const struct lttng_ust_lib_ring_buffer_config *config, union v_atomic *v_a) { - if (config->sync == RING_BUFFER_SYNC_PER_CPU) - local_inc(&v_a->l); - else - atomic_long_inc(&v_a->a); + assert(config->sync != RING_BUFFER_SYNC_PER_CPU); + uatomic_inc(&v_a->a); } /* * Non-atomic decrement. Only used by reader, apply to reader-owned subbuffer. */ static inline -void _v_dec(const struct lib_ring_buffer_config *config, union v_atomic *v_a) +void _v_dec(const struct lttng_ust_lib_ring_buffer_config *config, union v_atomic *v_a) { --v_a->v; } static inline -long v_cmpxchg(const struct lib_ring_buffer_config *config, union v_atomic *v_a, +long v_cmpxchg(const struct lttng_ust_lib_ring_buffer_config *config, union v_atomic *v_a, long old, long _new) { - if (config->sync == RING_BUFFER_SYNC_PER_CPU) - return local_cmpxchg(&v_a->l, old, _new); - else - return atomic_long_cmpxchg(&v_a->a, old, _new); + assert(config->sync != RING_BUFFER_SYNC_PER_CPU); + return uatomic_cmpxchg(&v_a->a, old, _new); } -#endif /* _LINUX_RING_BUFFER_VATOMIC_H */ +#endif /* _LTTNG_RING_BUFFER_VATOMIC_H */