]> git.droids-corp.org - dpdk.git/commitdiff
stack: remove redundant orderings on pop
authorSteven Lariau <steven.lariau@arm.com>
Fri, 25 Sep 2020 17:43:37 +0000 (18:43 +0100)
committerDavid Marchand <david.marchand@redhat.com>
Wed, 30 Sep 2020 19:08:39 +0000 (21:08 +0200)
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>
lib/librte_stack/rte_stack_lf_c11.h

index 82b7287f191445a84284a292e47f4b9064821585..2bc63941943b2419327eb89de31fe720c037a2b6 100644 (file)
@@ -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;
        }