X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fsvm%2Fsvm_fifo.h;h=9bba85fddf4f81fcbb9cac70d6d4ed349336ac45;hb=fa76a76;hp=1ac5b6363cd3782eefdb628b14e033d8abbd55ad;hpb=0e88e851e058f4fb7cc690dbbdb19216ab360d1c;p=vpp.git diff --git a/src/svm/svm_fifo.h b/src/svm/svm_fifo.h index 1ac5b6363cd..9bba85fddf4 100644 --- a/src/svm/svm_fifo.h +++ b/src/svm/svm_fifo.h @@ -36,8 +36,10 @@ typedef struct format_function_t format_ooo_segment; format_function_t format_ooo_list; -#define SVM_FIFO_TRACE (0) -#define OOO_SEGMENT_INVALID_INDEX ((u32)~0) +#define SVM_FIFO_TRACE (0) +#define OOO_SEGMENT_INVALID_INDEX ((u32)~0) +#define SVM_FIFO_INVALID_SESSION_INDEX ((u32)~0) +#define SVM_FIFO_INVALID_INDEX ((u32)~0) typedef struct { @@ -60,6 +62,8 @@ typedef struct _svm_fifo u8 master_thread_index; u8 client_thread_index; u32 segment_manager; + u32 segment_index; + u32 ct_session_index; /**< Local session index for vpp */ CLIB_CACHE_LINE_ALIGN_MARK (end_shared); u32 head; volatile u32 want_tx_evt; /**< producer wants nudge */ @@ -111,19 +115,19 @@ u8 *svm_fifo_replay (u8 * s, svm_fifo_t * f, u8 no_read, u8 verbose); static inline u32 svm_fifo_max_dequeue (svm_fifo_t * f) { - return f->cursize; + return clib_atomic_load_acq_n (&f->cursize); } static inline int svm_fifo_is_full (svm_fifo_t * f) { - return (f->cursize == f->nitems); + return (clib_atomic_load_acq_n (&f->cursize) == f->nitems); } static inline int svm_fifo_is_empty (svm_fifo_t * f) { - return (f->cursize == 0); + return (clib_atomic_load_acq_n (&f->cursize) == 0); } static inline u32 @@ -167,7 +171,7 @@ svm_fifo_set_event (svm_fifo_t * f) always_inline void svm_fifo_unset_event (svm_fifo_t * f) { - __sync_lock_release (&f->has_event); + clib_atomic_release (&f->has_event); } static inline void