diff options
Diffstat (limited to 'platform/linux-generic/include')
-rw-r--r-- | platform/linux-generic/include/odp_queue_internal.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/platform/linux-generic/include/odp_queue_internal.h b/platform/linux-generic/include/odp_queue_internal.h index 48576bc..0f30965 100644 --- a/platform/linux-generic/include/odp_queue_internal.h +++ b/platform/linux-generic/include/odp_queue_internal.h @@ -193,8 +193,12 @@ static inline void reorder_enq(queue_entry_t *queue, static inline void order_release(queue_entry_t *origin_qe, int count) { + uint64_t sync = odp_atomic_load_u64(&origin_qe->s.sync_out); + origin_qe->s.order_out += count; - odp_atomic_fetch_add_u64(&origin_qe->s.sync_out, count); + if (sync < origin_qe->s.order_out) + odp_atomic_fetch_add_u64(&origin_qe->s.sync_out, + origin_qe->s.order_out - sync); } static inline int reorder_deq(queue_entry_t *queue, |