linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* tasklet_kill will always hang for recursive tasklets on a UP
@ 2003-08-25  0:00 Nagendra Singh Tomar
  2003-08-25  1:53 ` Nagendra Singh Tomar
                   ` (2 more replies)
  0 siblings, 3 replies; 21+ messages in thread
From: Nagendra Singh Tomar @ 2003-08-25  0:00 UTC (permalink / raw)
  To: linux-kernel

Hi,
	While going thru the code for tasklet_kill(), I cannot figure out 
how recursive tasklets (tasklets that schedule themselves from within 
their tasklet handler) can be killed by this function. To me it looks that 
tasklet_kill will never complete for such tasklets.

void tasklet_kill(struct tasklet_struct *t)
{
	...
 	...
	while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
		current->state = TASK_RUNNING;
		do
			sys_sched_yield();
		while (test_bit(TASKLET_STATE_SCHED, &t->state));
	}
	...
	...
}

The above while loop will only exit if TASKLET_STATE_SCHED is not set 
(tasklet is not scheduled).
Now if we see tasklet_action

static void tasklet_action(struct softirq_action *a)
{
	...
	...
	if (!atomic_read(&t->count)) {
	--> TASKLET_STATE_SCHED is set here
		if(!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
			BUG();
		t->func(t->data);
	--> if we schedule the tasklet inside its handler, 
	--> TASKLET_STATE_SCHED will be set here also
		tasklet_unlock(t);
		continue;
	}
	...
	...
}

The only small window when TASKLET_STATE_SCHED is not set is between the 
time when test_and_clear_bit above clears it and by the time the tasklet 
handler again calls tasklet_schedule(). But since tasklet_kill is called 
from user context the while loop in tasklet_kill checking for 
TASKLET_STATE_SCHED to be cleared  cannot interleave between the above two 
lines in tasklet_action and hence tasklet_kill will never come out of the 
while loop.
This is true only for UP machines.

Pleae point me out if I am missing something.

Thanx
tomar



^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2003-09-04 13:26 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-25  0:00 tasklet_kill will always hang for recursive tasklets on a UP Nagendra Singh Tomar
2003-08-25  1:53 ` Nagendra Singh Tomar
2003-08-25 14:11 ` Juergen Quade
2003-08-25 17:14   ` Nagendra Singh Tomar
2003-08-27 18:21     ` Juergen Quade
2003-08-27 17:46       ` Nagendra Singh Tomar
2003-08-28 15:29         ` Juergen Quade
2003-08-28 15:53           ` kuznet
2003-08-28 16:17             ` Juergen Quade
2003-08-29  2:22               ` Werner Almesberger
2003-08-26  5:48 ` Werner Almesberger
2003-08-25 18:45   ` Nagendra Singh Tomar
2003-08-26  7:38     ` Werner Almesberger
2003-08-26  8:32       ` Juergen Quade
2003-08-26 17:56         ` Werner Almesberger
2003-08-27  1:47           ` kuznet
2003-08-26 16:17             ` Nagendra Singh Tomar
2003-08-28 13:17               ` kuznet
2003-08-28 16:25                 ` Nagendra Singh Tomar
2003-09-04 13:25                   ` kuznet
2003-08-29  2:30             ` Werner Almesberger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).