Skip to contentSkip to conversation

isdn/gigaset: use tasklet_kill in device remove/release process

PATCH In review Xiaotian Feng 2 participants 2 messages Oct 31, 2012 – Nov 2, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 isdn/gigaset: use tasklet_kill in device remove/release process

Some driver uses tasklet_disable in device remove/release process, tasklet_disable will inc tasklet->count and return. If the tasklet is not handled yet under some softirq pressure, the tasklet will be placed on the tasklet_vec, never have a chance to be excuted. This might lead to a heavy loaded ksoftirqd, wakeup with pending_softirq, but tasklet is disabled. tasklet_kill should be used in this case.

Cc Hansjoerg Lipp <[email protected]>
Cc Tilman Schmidt <[email protected]>
Cc Karsten Keil <[email protected]>
---
 drivers/isdn/gigaset/interface.c |    1 -
 1 file changed, 1 deletion(-)
drivers/isdn/gigaset/interface.c +0 -1
index 67abf3f..284c7f3 100644
@@ -544,7 +544,6 @@ void gigaset_if_free(struct cardstate *cs)
 	if (!drv->have_tty)
 		return;
 
-	tasklet_disable(&cs->if_wake_tasklet);
 	tasklet_kill(&cs->if_wake_tasklet);
 	cs->tty_dev = NULL;
 	tty_unregister_device(drv->tty, cs->minor_index);
Signature · 1 line
1.7.9.5
Acked-by on v1 1/1
#1 lore raw

Am 31.10.2012 11:44, schrieb Xiaotian Feng:

Quoted 7 lines

Some driver uses tasklet_disable in device remove/release process, tasklet_disable will inc tasklet->count and return. If the tasklet is not handled yet under some softirq pressure, the tasklet will be placed on the tasklet_vec, never have a chance to be excuted. This might lead to a heavy loaded ksoftirqd, wakeup with pending_softirq, but tasklet is disabled. tasklet_kill should be used in this case.

Quoted 5 lines
Cc Hansjoerg Lipp <[email protected]>
Cc Tilman Schmidt <[email protected]>
Cc Karsten Keil <[email protected]>
Quoted 17 lines
---
 drivers/isdn/gigaset/interface.c |    1 -
 1 file changed, 1 deletion(-)
drivers/isdn/gigaset/interface.c +0 -1
index 67abf3f..284c7f3 100644
@@ -544,7 +544,6 @@ void gigaset_if_free(struct cardstate *cs)
 	if (!drv->have_tty)
 		return;
 
-	tasklet_disable(&cs->if_wake_tasklet);
 	tasklet_kill(&cs->if_wake_tasklet);
 	cs->tty_dev = NULL;
 	tty_unregister_device(drv->tty, cs->minor_index);
Signature · 4 lines
Tilman Schmidt                    E-Mail: [email protected]
Bonn, Germany
Diese Nachricht besteht zu 100% aus wiederverwerteten Bits.
Ungeöffnet mindestens haltbar bis: (siehe Rückseite)