38 #ifndef included_clib_smp_vec_h 39 #define included_clib_smp_vec_h 43 #define foreach_clib_smp_fifo_data_state \ 51 #define _(f) CLIB_SMP_FIFO_DATA_STATE_##f, 64 #define CLIB_SMP_DATA_FOOTER_MAGIC 0xfafbfcf0 115 ASSERT (n <= f->max_n_elts_less_one + 1);
131 uword n_bytes_per_elt_cache_aligned;
133 ASSERT (i <= f->max_n_elts_less_one);
135 n_bytes_per_elt_cache_aligned =
138 return f->
data + i * n_bytes_per_elt_cache_aligned;
165 if (s != CLIB_SMP_FIFO_DATA_STATE_free)
176 CLIB_SMP_FIFO_DATA_STATE_write_alloc);
199 CLIB_SMP_FIFO_DATA_STATE_write_alloc);
201 CLIB_SMP_FIFO_DATA_STATE_write_done);
228 if (s != CLIB_SMP_FIFO_DATA_STATE_write_done)
238 CLIB_SMP_FIFO_DATA_STATE_read_fetch);
256 CLIB_SMP_FIFO_DATA_STATE_read_fetch);
263 word n_bytes_left = n_bytes;
265 while (n_bytes_left >= 4 *
sizeof (
uword))
273 n_bytes_left -= 4 *
sizeof (dst[0]);
276 while (n_bytes_left > 0)
281 n_bytes_left -= 1 *
sizeof (dst[0]);
287 uword n_bytes_per_elt)
297 uword n_bytes_per_elt)
#define clib_smp_compare_and_swap(addr, new, old)
sll srl srl sll sra u16x4 i
static void clib_smp_fifo_memcpy(uword *dst, uword *src, uword n_bytes)
static void clib_smp_fifo_write_inline(clib_smp_fifo_t *f, void *elt_to_write, uword n_bytes_per_elt)
clib_smp_fifo_t * clib_smp_fifo_init(uword max_n_elts, uword n_bytes_per_elt)
static void * clib_smp_fifo_write_alloc(clib_smp_fifo_t *f, uword n_bytes_per_elt)
#define foreach_clib_smp_fifo_data_state
static void * clib_smp_fifo_read_fetch(clib_smp_fifo_t *f, uword n_bytes_per_elt)
static uword clib_smp_fifo_round_elt_bytes(uword n_bytes_per_elt)
clib_smp_fifo_data_state_t
static clib_smp_fifo_data_footer_t * clib_smp_fifo_get_data_footer(void *d, uword n_bytes_per_elt)
static void clib_smp_fifo_read_done(clib_smp_fifo_t *f, void *d, uword n_bytes_per_elt)
#define CLIB_SMP_DATA_FOOTER_MAGIC
static uword round_pow2(uword x, uword pow2)
static void clib_smp_fifo_data_footer_set_state(clib_smp_fifo_data_footer_t *f, clib_smp_fifo_data_state_t s)
static void clib_smp_fifo_read_inline(clib_smp_fifo_t *f, void *elt_to_read, uword n_bytes_per_elt)
static clib_smp_fifo_data_state_t clib_smp_fifo_data_footer_get_state(clib_smp_fifo_data_footer_t *f)
static void * clib_smp_fifo_elt_at_index(clib_smp_fifo_t *f, uword n_bytes_per_elt, uword i)
#define CLIB_MEMORY_BARRIER()
#define CLIB_CACHE_LINE_BYTES
static uword clib_smp_fifo_n_elts(clib_smp_fifo_t *f)
static void clib_smp_fifo_write_done(clib_smp_fifo_t *f, void *d, uword n_bytes_per_elt)