ethdev: replace full barrier with relaxed barrier
authorPhil Yang <phil.yang@arm.com>
Tue, 13 Oct 2020 16:25:36 +0000 (11:25 -0500)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 16 Oct 2020 17:48:18 +0000 (19:48 +0200)
While registering the call back functions full write barrier
can be replaced with one-way write barrier.

Signed-off-by: Phil Yang <phil.yang@arm.com>
Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_ethdev/rte_ethdev.c

index 7817224..2198548 100644 (file)
@@ -26,7 +26,6 @@
 #include <rte_eal.h>
 #include <rte_per_lcore.h>
 #include <rte_lcore.h>
-#include <rte_atomic.h>
 #include <rte_branch_prediction.h>
 #include <rte_common.h>
 #include <rte_mempool.h>
@@ -4651,8 +4650,12 @@ rte_eth_add_first_rx_callback(uint16_t port_id, uint16_t queue_id,
        rte_spinlock_lock(&rte_eth_rx_cb_lock);
        /* Add the callbacks at first position */
        cb->next = rte_eth_devices[port_id].post_rx_burst_cbs[queue_id];
-       rte_smp_wmb();
-       rte_eth_devices[port_id].post_rx_burst_cbs[queue_id] = cb;
+       /* Stores to cb->fn, cb->param and cb->next should complete before
+        * cb is visible to data plane threads.
+        */
+       __atomic_store_n(
+               &rte_eth_devices[port_id].post_rx_burst_cbs[queue_id],
+               cb, __ATOMIC_RELEASE);
        rte_spinlock_unlock(&rte_eth_rx_cb_lock);
 
        return cb;