summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavid decotigny <david.decotigny@google.com>2011-11-05 14:38:20 +0000
committerDavid S. Miller <davem@davemloft.net>2011-11-07 13:31:24 -0500
commitf9c4082df59e43c6667db197a4fb3eb3286f3fc1 (patch)
tree2bd8c50a7a0ea2b12b0f384fb656eb51e32cfbd0
parentdd1294c4ed25725d13a6cb3d93ca0eb5fee14963 (diff)
downloadlinux-3.10-f9c4082df59e43c6667db197a4fb3eb3286f3fc1.tar.gz
linux-3.10-f9c4082df59e43c6667db197a4fb3eb3286f3fc1.tar.bz2
linux-3.10-f9c4082df59e43c6667db197a4fb3eb3286f3fc1.zip
forcedeth: fix race when unloading module
When forcedeth module is unloaded, there exists a path that can lead to mod_timer() after del_timer_sync(), causing an oops. This patch short-circuits this unneeded path, which originates in nv_get_ethtool_stats(). Tested: x86_64 16-way + 3 ethtool -S infinite loops + 100Mbps incoming traffic + rmmod/modprobe/ifconfig in a loop Initial-Author: Salman Qazi <sqazi@google.com> Discussion: http://patchwork.ozlabs.org/patch/123548/ Signed-off-by: David Decotigny <david.decotigny@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/nvidia/forcedeth.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 1e37eb98c4e..344cb5fa512 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -4566,7 +4566,7 @@ static void nv_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *e
struct fe_priv *np = netdev_priv(dev);
/* update stats */
- nv_do_stats_poll((unsigned long)dev);
+ nv_get_hw_stats(dev);
memcpy(buffer, &np->estats, nv_get_sset_count(dev, ETH_SS_STATS)*sizeof(u64));
}