While writing the hyperv 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. The difference from v1 is that function name changed, rebasing to current source and the introduction of atomic exchange. Stephen Hemminger (15): eal: introduce atomic exchange operation ethdev: add linkstatus get/set helper functions virtio: use eth_linkstatus_set vmxnet3: use rte_eth_linkstatus_set dpaa2: use rte_eth_linkstatus_set nfp: use rte_eth_linkstatus functions e1000: use rte_eth_linkstatus helpers ixgbe: use rte_eth_linkstatus functions sfc: use new rte_eth_linkstatus functions i40e: use rte_eth_linkstatus functions liquidio: use _rte_eth_linkstatus_set thunderx: use _rte_eth_linkstatus_set szedata: use _rte_eth_linkstatus_set octeontx: use rte_eth_linkstatus_set enic: use _rte_eth_linkstatus_set drivers/net/dpaa2/dpaa2_ethdev.c | 65 ++------------ 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 | 44 ++-------- drivers/net/i40e/i40e_ethdev_vf.c | 19 +---- drivers/net/ixgbe/ixgbe_ethdev.c | 99 ++++------------------ drivers/net/liquidio/lio_ethdev.c | 54 ++---------- drivers/net/nfp/nfp_net.c | 75 ++-------------- drivers/net/octeontx/octeontx_ethdev.c | 16 +--- drivers/net/sfc/sfc_ethdev.c | 27 ++---- drivers/net/sfc/sfc_ev.c | 23 +---- drivers/net/szedata2/rte_eth_szedata2.c | 20 ++--- drivers/net/thunderx/nicvf_ethdev.c | 17 +--- drivers/net/virtio/virtio_ethdev.c | 67 +++------------ drivers/net/vmxnet3/vmxnet3_ethdev.c | 85 ++++--------------- .../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 | 35 ++++++++ lib/librte_ether/rte_ethdev.h | 28 ++++++ 23 files changed, 305 insertions(+), 657 deletions(-) -- 2.15.1