New common code can be used, eliminating driver code. Signed-off-by: Stephen Hemminger --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c 2014-05-14 11:26:30.381274255 -0700 +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c 2014-05-14 11:37:51.319893900 -0700 @@ -56,7 +56,6 @@ #include #include #include -#include #include #include "ixgbe_logs.h" @@ -325,58 +324,6 @@ static struct eth_dev_ops ixgbevf_eth_de .tx_queue_release = ixgbe_dev_tx_queue_release, }; -/** - * Atomically reads the link status information from global - * structure rte_eth_dev. - * - * @param 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 -rte_ixgbe_dev_atomic_read_link_status(struct rte_eth_dev *dev, - struct rte_eth_link *link) -{ - struct rte_eth_link *dst = link; - struct rte_eth_link *src = &(dev->data->dev_link); - - if (rte_atomic64_cmpset((uint64_t *)dst, *(uint64_t *)dst, - *(uint64_t *)src) == 0) - return -1; - - return 0; -} - -/** - * Atomically writes the link status information into global - * structure rte_eth_dev. - * - * @param 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 -rte_ixgbe_dev_atomic_write_link_status(struct rte_eth_dev *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; -} - /* * This function is the same as ixgbe_is_sfp() in ixgbe/ixgbe.h. */ @@ -1453,7 +1400,7 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) /* Clear recorded link status */ memset(&link, 0, sizeof(link)); - rte_ixgbe_dev_atomic_write_link_status(dev, &link); + rte_eth_dev_set_link(dev, &link); } /* @@ -1764,11 +1711,8 @@ ixgbe_dev_link_update(struct rte_eth_dev int link_up; int diag; - link.link_status = 0; - link.link_speed = 0; - link.link_duplex = 0; - memset(&old, 0, sizeof(old)); - rte_ixgbe_dev_atomic_read_link_status(dev, &old); + memset(&link, 0, sizeof(link)); + rte_eth_dev_get_link(dev, &old); /* check if it needs to wait to complete, if lsc interrupt is enabled */ if (wait_to_complete == 0 || dev->data->dev_conf.intr_conf.lsc != 0) @@ -1778,14 +1722,14 @@ ixgbe_dev_link_update(struct rte_eth_dev if (diag != 0) { link.link_speed = ETH_LINK_SPEED_100; link.link_duplex = ETH_LINK_HALF_DUPLEX; - rte_ixgbe_dev_atomic_write_link_status(dev, &link); + rte_eth_dev_set_link(dev, &link); if (link.link_status == old.link_status) return -1; return 0; } if (link_up == 0) { - rte_ixgbe_dev_atomic_write_link_status(dev, &link); + rte_eth_dev_set_link(dev, &link); if (link.link_status == old.link_status) return -1; return 0; @@ -1812,7 +1756,7 @@ ixgbe_dev_link_update(struct rte_eth_dev link.link_speed = ETH_LINK_SPEED_10000; break; } - rte_ixgbe_dev_atomic_write_link_status(dev, &link); + rte_eth_dev_set_link(dev, &link); if (link.link_status == old.link_status) return -1; @@ -1946,8 +1890,7 @@ ixgbe_dev_link_status_print(struct rte_e { struct rte_eth_link link; - memset(&link, 0, sizeof(link)); - rte_ixgbe_dev_atomic_read_link_status(dev, &link); + rte_eth_dev_get_link(dev, &link); if (link.link_status) { PMD_INIT_LOG(INFO, "Port %d: Link Up - speed %u Mbps - %s", (int)(dev->data->port_id), @@ -1993,8 +1936,7 @@ ixgbe_dev_interrupt_action(struct rte_et if (intr->flags & IXGBE_FLAG_NEED_LINK_UPDATE) { /* get the link status before link update, for predicting later */ - memset(&link, 0, sizeof(link)); - rte_ixgbe_dev_atomic_read_link_status(dev, &link); + rte_eth_dev_get_link(dev, &link); ixgbe_dev_link_update(dev, 0);