#define OOO_SEGMENT_INVALID_INDEX ((u32)~0)
-typedef struct
+typedef struct _svm_fifo
{
volatile u32 cursize; /**< current fifo size */
u32 nitems;
CLIB_CACHE_LINE_ALIGN_MARK (end_cursize);
- volatile u8 has_event; /**< non-zero if deq event exists */
+ volatile u32 has_event; /**< non-zero if deq event exists */
/* Backpointers */
u32 master_session_index;
ooo_segment_t *ooo_segments; /**< Pool of ooo segments */
u32 ooos_list_head; /**< Head of out-of-order linked-list */
u32 ooos_newest; /**< Last segment to have been updated */
-
+ struct _svm_fifo *next; /**< next in freelist/active chain */
+ struct _svm_fifo *prev; /**< prev in active chain */
CLIB_CACHE_LINE_ALIGN_MARK (data);
} svm_fifo_t;
svm_fifo_unset_event (svm_fifo_t * f)
{
/* Probably doesn't need to be atomic. Still, better avoid surprises */
- __sync_lock_test_and_set (&f->has_event, 0);
+ __sync_lock_release (&f->has_event);
}
svm_fifo_t *svm_fifo_create (u32 data_size_in_bytes);