sfc: Hold efx_nic::stats_lock while reading efx_nic::mac_stats
authorBen Hutchings <bhutchings@solarflare.com>
Fri, 2 Sep 2011 22:23:00 +0000 (23:23 +0100)
committerBen Hutchings <bhutchings@solarflare.com>
Fri, 27 Jan 2012 00:10:45 +0000 (00:10 +0000)
commit1cb345220f135dcca24f01cc04cbb97a8242d419
tree059ec907cd50bd10114bd942d0ffbfa7fd080aa2
parent788ec41cc843f12e8d0eba5f2b37af18b76654a5
sfc: Hold efx_nic::stats_lock while reading efx_nic::mac_stats

efx_nic::stats_lock is used to serialise stats updates, but each
reader was dropping it before it finished reading efx_nic::mac_stats.

If there were concurrent stats reads using procfs, or one using procfs
and one using ethtool, an update could race with a read.  On a 32-bit
system, the reader could see word-tearing of 64-bit stats (32 bits of
the old value and 32 bits of the new).

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/sfc/efx.c
drivers/net/ethernet/sfc/ethtool.c
drivers/net/ethernet/sfc/net_driver.h