diff options
author | david decotigny <david.decotigny@google.com> | 2011-11-05 10:38:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-07 13:31:24 -0500 |
commit | f9c4082df59e43c6667db197a4fb3eb3286f3fc1 (patch) | |
tree | 2bd8c50a7a0ea2b12b0f384fb656eb51e32cfbd0 /drivers | |
parent | dd1294c4ed25725d13a6cb3d93ca0eb5fee14963 (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.c | 2 |
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 | } |