stack: remove redundant orderings on pop
The load-acquire of list->len on pop function is redundant. Only the CAS success needs to be load-acquire. It synchronizes with the store release in push, to ensure that the updated head is visible when the new length is visible. Without this, one thread in pop could see the increased length but the old list, which doesn't have enough items yet for pop to succeed. Signed-off-by: Steven Lariau <steven.lariau@arm.com> Reviewed-by: Dharmik Thakkar <dharmik.thakkar@arm.com> Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com> Acked-by: Gage Eads <gage.eads@intel.com>
This commit is contained in:
parent
9e90bc9c71
commit
2cdfe4e577
@ -80,7 +80,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
|
||||
int success;
|
||||
|
||||
/* Reserve num elements, if available */
|
||||
len = __atomic_load_n(&list->len, __ATOMIC_ACQUIRE);
|
||||
len = __atomic_load_n(&list->len, __ATOMIC_RELAXED);
|
||||
|
||||
while (1) {
|
||||
/* Does the list contain enough elements? */
|
||||
@ -91,7 +91,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
|
||||
if (__atomic_compare_exchange_n(&list->len,
|
||||
&len, len - num,
|
||||
1, __ATOMIC_ACQUIRE,
|
||||
__ATOMIC_ACQUIRE))
|
||||
__ATOMIC_RELAXED))
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user