On Fri, Jul 14, 2017 at 11:30:24AM -0700, Stephen Hemminger wrote: > Use the new link update API, and cleanup the logic in the the > link update routine. > > Signed-off-by: Stephen Hemminger <sthem...@microsoft.com> > --- > drivers/net/liquidio/lio_ethdev.c | 76 > ++++++++++----------------------------- > 1 file changed, 19 insertions(+), 57 deletions(-) > > diff --git a/drivers/net/liquidio/lio_ethdev.c > b/drivers/net/liquidio/lio_ethdev.c > index 479936a52ff9..95dc7232601e 100644 > --- a/drivers/net/liquidio/lio_ethdev.c > +++ b/drivers/net/liquidio/lio_ethdev.c > @@ -888,32 +888,6 @@ lio_dev_vlan_filter_set(struct rte_eth_dev *eth_dev, > uint16_t vlan_id, int on) > return 0; > } > > -/** > - * Atomically writes the link status information into global > - * structure rte_eth_dev. > - * > - * @param eth_dev > - * - Pointer to the structure rte_eth_dev to read from. > - * - Pointer to the buffer to be saved with the link status. > - * > - * @return > - * - On success, zero. > - * - On failure, negative value. > - */ > -static inline int > -lio_dev_atomic_write_link_status(struct rte_eth_dev *eth_dev, > - struct rte_eth_link *link) > -{ > - struct rte_eth_link *dst = ð_dev->data->dev_link; > - struct rte_eth_link *src = link; > - > - if (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst, > - *(uint64_t *)src) == 0) > - return -1; > - > - return 0; > -} > - > static uint64_t > lio_hweight64(uint64_t w) > { > @@ -933,45 +907,33 @@ lio_dev_link_update(struct rte_eth_dev *eth_dev, > int wait_to_complete __rte_unused) > { > struct lio_device *lio_dev = LIO_DEV(eth_dev); > - struct rte_eth_link link, old; > + struct rte_eth_link link; > > /* Initialize */ > - link.link_status = ETH_LINK_DOWN; > - link.link_speed = ETH_SPEED_NUM_NONE; > - link.link_duplex = ETH_LINK_HALF_DUPLEX; > - memset(&old, 0, sizeof(old)); > - > + memset(&link, 0, sizeof(link)); > /* Return what we found */ > if (lio_dev->linfo.link.s.link_up == 0) { > - /* Interface is down */ > - if (lio_dev_atomic_write_link_status(eth_dev, &link)) > - return -1; > - if (link.link_status == old.link_status) > - return -1; > - return 0; > - } > - > - link.link_status = ETH_LINK_UP; /* Interface is up */ > - link.link_duplex = ETH_LINK_FULL_DUPLEX; > - switch (lio_dev->linfo.link.s.speed) { > - case LIO_LINK_SPEED_10000: > - link.link_speed = ETH_SPEED_NUM_10G; > - break; > - case LIO_LINK_SPEED_25000: > - link.link_speed = ETH_SPEED_NUM_25G; > - break; > - default: > + link.link_status = ETH_LINK_DOWN; > link.link_speed = ETH_SPEED_NUM_NONE; > link.link_duplex = ETH_LINK_HALF_DUPLEX; > - } > - > - if (lio_dev_atomic_write_link_status(eth_dev, &link)) > - return -1; > + } else { > + link.link_status = ETH_LINK_UP; /* Interface is up */ > + link.link_duplex = ETH_LINK_FULL_DUPLEX; > + switch (lio_dev->linfo.link.s.speed) { > + case LIO_LINK_SPEED_10000: > + link.link_speed = ETH_SPEED_NUM_10G; > + break; > + case LIO_LINK_SPEED_25000: > + link.link_speed = ETH_SPEED_NUM_25G; > + break; > + default: > + link.link_speed = ETH_SPEED_NUM_NONE; > + link.link_duplex = ETH_LINK_HALF_DUPLEX; > + } > > - if (link.link_status == old.link_status) > - return -1; > + } > > - return 0; > + return _rte_eth_link_update(eth_dev, &link); > } > > /** > -- > 2.11.0 >
Tested-by: Shijith Thotton <shijith.thot...@caviumnetworks.com> Thanks, Shijith