Yet another driver which was not returing correct value on
link change.

Signed-off-by: Stephen Hemminger <sthem...@microsoft.com>
---
 drivers/net/szedata2/rte_eth_szedata2.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/net/szedata2/rte_eth_szedata2.c 
b/drivers/net/szedata2/rte_eth_szedata2.c
index 9c0d57cc14c0..b81ba8e79c64 100644
--- a/drivers/net/szedata2/rte_eth_szedata2.c
+++ b/drivers/net/szedata2/rte_eth_szedata2.c
@@ -50,7 +50,6 @@
 #include <rte_memcpy.h>
 #include <rte_kvargs.h>
 #include <rte_dev.h>
-#include <rte_atomic.h>
 
 #include "rte_eth_szedata2.h"
 #include "szedata2_iobuf.h"
@@ -1171,9 +1170,7 @@ static int
 eth_link_update(struct rte_eth_dev *dev,
                int wait_to_complete __rte_unused)
 {
-       struct rte_eth_link link;
-       struct rte_eth_link *link_ptr = &link;
-       struct rte_eth_link *dev_link = &dev->data->dev_link;
+       struct rte_eth_link link, old;
        struct pmd_internals *internals = (struct pmd_internals *)
                dev->data->dev_private;
        const volatile struct szedata2_ibuf *ibuf;
@@ -1195,8 +1192,12 @@ eth_link_update(struct rte_eth_dev *dev,
                break;
        }
 
+       _rte_eth_link_read(dev, &old);
+       memset(&link, 0, sizeof(link));
+
        /* szedata2 uses only full duplex */
        link.link_duplex = ETH_LINK_FULL_DUPLEX;
+       link.link_autoneg = ETH_LINK_SPEED_FIXED;
 
        for (i = 0; i < szedata2_ibuf_count; i++) {
                ibuf = ibuf_ptr_by_index(internals->pci_rsc, i);
@@ -1210,14 +1211,11 @@ eth_link_update(struct rte_eth_dev *dev,
                }
        }
 
-       link.link_status = (link_is_up) ? ETH_LINK_UP : ETH_LINK_DOWN;
+       link.link_status = link_is_up ? ETH_LINK_UP : ETH_LINK_DOWN;
 
-       link.link_autoneg = ETH_LINK_SPEED_FIXED;
+       _rte_eth_link_write(dev, &link);
 
-       rte_atomic64_cmpset((uint64_t *)dev_link, *(uint64_t *)dev_link,
-                       *(uint64_t *)link_ptr);
-
-       return 0;
+       return (old.link_status == link.link_status) ? -1 : 0;
 }
 
 static int
-- 
2.11.0

Reply via email to