aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/jme.c
diff options
context:
space:
mode:
authorXiaotian Feng <xtfeng@gmail.com>2012-10-31 00:29:57 +0000
committerDavid S. Miller <davem@davemloft.net>2012-11-03 15:10:15 -0400
commit175c0dffef310fc7d7f026ca4a7682beb2fbd8ec (patch)
treeb9ff3f9ae6b5a1a6e41b1b950d3820d68c5ef8ac /drivers/net/ethernet/jme.c
parenttipc: do not use tasklet_disable before tasklet_kill (diff)
downloadlinux-dev-175c0dffef310fc7d7f026ca4a7682beb2fbd8ec.tar.xz
linux-dev-175c0dffef310fc7d7f026ca4a7682beb2fbd8ec.zip
drivers/net: use tasklet_kill in device remove/close process
Some driver uses tasklet_disable in device remove/close process, tasklet_disable will inc tasklet->count and return. If the tasklet is not handled yet because some softirq pressure, the tasklet will placed on the tasklet_vec, never have a chance to excute. This might lead to ksoftirqd heavy loaded, wakeup with pending_softirq, but tasklet is disabled. tasklet_kill should be used in this case. Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: netdev@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/jme.c')
-rw-r--r--drivers/net/ethernet/jme.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index f8064df10cc4..92317e9c0f73 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -1948,10 +1948,10 @@ jme_close(struct net_device *netdev)
JME_NAPI_DISABLE(jme);
- tasklet_disable(&jme->linkch_task);
- tasklet_disable(&jme->txclean_task);
- tasklet_disable(&jme->rxclean_task);
- tasklet_disable(&jme->rxempty_task);
+ tasklet_kill(&jme->linkch_task);
+ tasklet_kill(&jme->txclean_task);
+ tasklet_kill(&jme->rxclean_task);
+ tasklet_kill(&jme->rxempty_task);
jme_disable_rx_engine(jme);
jme_disable_tx_engine(jme);