aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/include
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/include')
-rw-r--r--platform/linux-generic/include/odp_queue_internal.h6
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,