mirror_ubuntu-kernels/drivers/net/ethernet/intel
Jacob Keller 841c950d67 i40e/i40evf: use cmpxchg64 when updating private flags in ethtool
When a user gives an invalid command to change a private flag which is
not supported, either because it is read-only, or the device is not
capable of the feature, we simply ignore the request.

A naive solution would simply be to report error codes when one of the
flags was not supported. However, this causes problems because it makes
the operation not atomic. If a user requests multiple private flags
together at once we could end up changing one before failing at the
second flag.

We can do a bit better if we instead update a temporary copy of the
flags variable in the loop, and then copy it into place after. If we
aren't careful this has the pitfall of potentially silently overwriting
any changes caused by other threads.

Avoid this by using cmpxchg64 which will compare and swap the flags
variable only if it currently matched the old value. We'll report
-EAGAIN in the (hopefully rare!) case where the cmpxchg64 fails.

This ensures that we can properly report when flags are not supported in
an atomic fashion without the risk of overwriting other threads changes.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2017-08-25 14:46:34 -07:00
..
e1000 networking: introduce and use skb_put_data() 2017-06-16 11:48:37 -04:00
e1000e e1000e: Initial Support for IceLake 2017-08-08 17:54:21 -07:00
fm10k net: sched: get rid of struct tc_to_netdev 2017-08-07 09:42:37 -07:00
i40e i40e/i40evf: use cmpxchg64 when updating private flags in ethtool 2017-08-25 14:46:34 -07:00
i40evf i40e/i40evf: use cmpxchg64 when updating private flags in ethtool 2017-08-25 14:46:34 -07:00
igb igb: support BCM54616 PHY 2017-08-08 18:09:12 -07:00
igbvf igbvf: convert msleep to mdelay in atomic context 2017-08-08 18:08:00 -07:00
ixgb ixgb: Omit private ndo_get_stats function 2017-04-20 16:18:45 -07:00
ixgbe ixgbe: use return codes from ndo_xdp_xmit that are distinguishable 2017-08-24 11:59:37 -07:00
ixgbevf ixgbe: Initialize 64-bit stats seqcounts 2017-08-01 20:06:07 -07:00
e100.c net/{mii, smsc}: Make mii_ethtool_get_link_ksettings and smc_netdev_get_ecmd return void 2017-06-05 11:00:42 -04:00
Kconfig i40evf: Add support for Adaptive Virtual Function 2017-06-01 14:30:02 -07:00
Makefile fm10k: Add skeletal frame for Intel(R) FM10000 Ethernet Switch Host Interface Driver 2014-09-23 03:59:13 -07:00