The old rte_atomic16 and rte_atomic64 functions are deprecated.
Replace with rte_stdatomic for managing warning and timer flags.

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/net/bonding/eth_bond_8023ad_private.h |  6 ++--
 drivers/net/bonding/rte_eth_bond_8023ad.c     | 35 ++++++++-----------
 2 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/drivers/net/bonding/eth_bond_8023ad_private.h 
b/drivers/net/bonding/eth_bond_8023ad_private.h
index ab7d15f81a..dd3cf3ed26 100644
--- a/drivers/net/bonding/eth_bond_8023ad_private.h
+++ b/drivers/net/bonding/eth_bond_8023ad_private.h
@@ -9,7 +9,7 @@
 
 #include <rte_ether.h>
 #include <rte_byteorder.h>
-#include <rte_atomic.h>
+#include <rte_stdatomic.h>
 #include <rte_flow.h>
 
 #include "rte_eth_bond_8023ad.h"
@@ -140,10 +140,10 @@ struct port {
        /** Timer which is also used as mutex. If is 0 (not running) RX marker
         * packet might be responded. Otherwise shall be dropped. It is zeroed 
in
         * mode 4 callback function after expire. */
-       volatile uint64_t rx_marker_timer;
+       RTE_ATOMIC(uint64_t) rx_marker_timer;
 
        uint64_t warning_timer;
-       volatile uint16_t warnings_to_show;
+       RTE_ATOMIC(uint16_t) warnings_to_show;
 
        /** Memory pool used to allocate slow queues */
        struct rte_mempool *slow_pool;
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c 
b/drivers/net/bonding/rte_eth_bond_8023ad.c
index ba88f6d261..cc7e4af2b9 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -171,27 +171,17 @@ timer_is_running(uint64_t *timer)
 static void
 set_warning_flags(struct port *port, uint16_t flags)
 {
-       int retval;
-       uint16_t old;
-       uint16_t new_flag = 0;
-
-       do {
-               old = port->warnings_to_show;
-               new_flag = old | flags;
-               retval = rte_atomic16_cmpset(&port->warnings_to_show, old, 
new_flag);
-       } while (unlikely(retval == 0));
+       rte_atomic_fetch_or_explicit(&port->warnings_to_show, flags, 
rte_memory_order_relaxed);
 }
 
 static void
 show_warnings(uint16_t member_id)
 {
        struct port *port = &bond_mode_8023ad_ports[member_id];
-       uint8_t warnings;
-
-       do {
-               warnings = port->warnings_to_show;
-       } while (rte_atomic16_cmpset(&port->warnings_to_show, warnings, 0) == 
0);
+       uint16_t warnings;
 
+       warnings = rte_atomic_exchange_explicit(&port->warnings_to_show, 0,
+                                               rte_memory_order_relaxed);
        if (!warnings)
                return;
 
@@ -1337,7 +1327,6 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private 
*internals,
        struct port *port = &bond_mode_8023ad_ports[member_id];
        struct marker_header *m_hdr;
        uint64_t marker_timer, old_marker_timer;
-       int retval;
        uint8_t wrn, subtype;
        /* If packet is a marker, we send response now by reusing given packet
         * and update only source MAC, destination MAC is multicast so don't
@@ -1354,17 +1343,19 @@ bond_mode_8023ad_handle_slow_pkt(struct 
bond_dev_private *internals,
                }
 
                /* Setup marker timer. Do it in loop in case concurrent access. 
*/
+               old_marker_timer = 
rte_atomic_load_explicit(&port->rx_marker_timer,
+                                                           
rte_memory_order_relaxed);
                do {
-                       old_marker_timer = port->rx_marker_timer;
                        if (!timer_is_expired(&old_marker_timer)) {
                                wrn = WRN_RX_MARKER_TO_FAST;
                                goto free_out;
                        }
 
                        timer_set(&marker_timer, mode4->rx_marker_timeout);
-                       retval = rte_atomic64_cmpset(&port->rx_marker_timer,
-                               old_marker_timer, marker_timer);
-               } while (unlikely(retval == 0));
+
+               } while 
(!rte_atomic_compare_exchange_weak_explicit(&port->rx_marker_timer,
+                                       &old_marker_timer, marker_timer,
+                                       rte_memory_order_seq_cst, 
rte_memory_order_relaxed));
 
                m_hdr->marker.tlv_type_marker = MARKER_TLV_TYPE_RESP;
                rte_eth_macaddr_get(member_id, &m_hdr->eth_hdr.src_addr);
@@ -1372,7 +1363,8 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private 
*internals,
                if (internals->mode4.dedicated_queues.enabled == 0) {
                        if (rte_ring_enqueue(port->tx_ring, pkt) != 0) {
                                /* reset timer */
-                               port->rx_marker_timer = 0;
+                               
rte_atomic_store_explicit(&port->rx_marker_timer, 0,
+                                                         
rte_memory_order_release);
                                wrn = WRN_TX_QUEUE_FULL;
                                goto free_out;
                        }
@@ -1386,7 +1378,8 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private 
*internals,
                                        &pkt, tx_count);
                        if (tx_count != 1) {
                                /* reset timer */
-                               port->rx_marker_timer = 0;
+                               
rte_atomic_store_explicit(&port->rx_marker_timer, 0,
+                                                         
rte_memory_order_release);
                                wrn = WRN_TX_QUEUE_FULL;
                                goto free_out;
                        }
-- 
2.53.0

Reply via email to