aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authordavid decotigny <david.decotigny@google.com>2011-11-05 10:38:20 -0400
committerDavid S. Miller <davem@davemloft.net>2011-11-07 13:31:24 -0500
commitf9c4082df59e43c6667db197a4fb3eb3286f3fc1 (patch)
tree2bd8c50a7a0ea2b12b0f384fb656eb51e32cfbd0 /drivers
parentdd1294c4ed25725d13a6cb3d93ca0eb5fee14963 (diff)
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>
Diffstat (limited to 'drivers')
-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 1e37eb98c4e2..344cb5fa512d 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
4566 struct fe_priv *np = netdev_priv(dev); 4566 struct fe_priv *np = netdev_priv(dev);
4567 4567
4568 /* update stats */ 4568 /* update stats */
4569 nv_do_stats_poll((unsigned long)dev); 4569 nv_get_hw_stats(dev);
4570 4570
4571 memcpy(buffer, &np->estats, nv_get_sset_count(dev, ETH_SS_STATS)*sizeof(u64)); 4571 memcpy(buffer, &np->estats, nv_get_sset_count(dev, ETH_SS_STATS)*sizeof(u64));
4572} 4572}