While writing hyper-v driver, noticed a lot of unnecessary duplication of code in drivers for handling the eth_dev link status information. While consolidating this, it also became obvious that some drivers behave differently for no good reason.
It also was a good chance to introduce atomic exchange primitives in EAL because there are other places using cmpset where not necessary (such as bonding). Mostly only compile tested only, don't have all of the hardware available (except ixgbe and virtio) to test. v8 - fix typo in 32bit exchange - fix build of dpaa2 - go back to same return value as original code - reduce number of lines changed v7 - add exchange functions for PPC64 - move linkstatus helpers to rte_ethdev_driver - rebase to 18.02 Stephen Hemminger (15): eal: introduce atomic exchange operation ethdev: add linkstatus get/set helper functions net/virtio: use eth_linkstatus_set net/vmxnet3: use rte_eth_linkstatus_set net/dpaa2: use rte_eth_linkstatus_set net/nfp: use rte_eth_linkstatus functions net/e1000: use rte_eth_linkstatus helpers net/ixgbe: use rte_eth_linkstatus functions net/sfc: use new rte_eth_linkstatus functions net/i40e: use rte_eth_linkstatus functions net/liquidio: use rte_eth_linkstatus_set net/thunderx: use rte_eth_linkstatus_set net/szedata: use _rte_eth_linkstatus_set net/octeontx: use rte_eth_linkstatus_set net/enic: use rte_eth_linkstatus_set drivers/net/dpaa2/dpaa2_ethdev.c | 78 +++---------------- drivers/net/e1000/em_ethdev.c | 70 ++--------------- drivers/net/e1000/igb_ethdev.c | 71 ++--------------- drivers/net/enic/enic_ethdev.c | 5 +- drivers/net/enic/enic_main.c | 16 ++-- drivers/net/i40e/i40e_ethdev.c | 46 ++--------- drivers/net/i40e/i40e_ethdev_vf.c | 19 +---- drivers/net/ixgbe/ixgbe_ethdev.c | 90 ++++------------------ drivers/net/liquidio/lio_ethdev.c | 44 +---------- drivers/net/nfp/nfp_net.c | 72 ++--------------- drivers/net/octeontx/octeontx_ethdev.c | 16 +--- drivers/net/sfc/sfc_ethdev.c | 24 ++---- drivers/net/sfc/sfc_ev.c | 20 +---- drivers/net/szedata2/rte_eth_szedata2.c | 11 +-- drivers/net/thunderx/nicvf_ethdev.c | 45 +++++------ drivers/net/virtio/virtio_ethdev.c | 52 ++----------- drivers/net/vmxnet3/vmxnet3_ethdev.c | 63 +-------------- .../common/include/arch/ppc_64/rte_atomic.h | 21 ++++- .../common/include/arch/x86/rte_atomic.h | 24 ++++++ .../common/include/arch/x86/rte_atomic_32.h | 12 +++ .../common/include/arch/x86/rte_atomic_64.h | 12 +++ lib/librte_eal/common/include/generic/rte_atomic.h | 78 +++++++++++++++++++ lib/librte_ether/rte_ethdev.c | 22 +----- lib/librte_ether/rte_ethdev_driver.h | 63 +++++++++++++++ 24 files changed, 313 insertions(+), 661 deletions(-) -- 2.15.1