public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* locking issue (hardirq+softirq+user)
@ 2006-12-20 13:35 Jiri Slaby
  2006-12-20 13:50 ` Arjan van de Ven
  2006-12-20 22:28 ` linux-os (Dick Johnson)
  0 siblings, 2 replies; 4+ messages in thread
From: Jiri Slaby @ 2006-12-20 13:35 UTC (permalink / raw)
  To: Linux kernel mailing list

Hi!

an user still gets NMI watchdog warning, that the machine deadlocked.

The code is something like this:

DEFINE_SPINLOCK(lock);

isr() /* i.e. hardirq context */
{
spin_lock(&lock);
...
spin_unlock(&lock);
}

timer() /* i.e. softirq context */
{
unsigned int f;
spin_lock_irqsave(&lock, f) /* stack shows, that it locks here */
...
spin_unlock_irqrestore(&lock, f)
...
mod_timer();
}

tty_open_or_whatever() /* i.e. user context */
{
unsigned int f;
spin_lock_irqsave(&lock, f)
...
spin_unlock_irqrestore(&lock, f)
}

init()
{
mod_timer();
request_irq();
register_that_open_with_something();
}

What's the correct locking approach in this situation? Is that correct (I tried
to go through Rusty Russel's guide to locking, but I didn't get it in this
case)? There were many spin_lock recursions in the driver
(drivers/char/isicom.c), which I removed, but it still deadlocks on SMP.

thanks,
-- 
http://www.fi.muni.cz/~xslaby/            Jiri Slaby
faculty of informatics, masaryk university, brno, cz
e-mail: jirislaby gmail com, gpg pubkey fingerprint:
B674 9967 0407 CE62 ACC8  22A0 32CC 55C3 39D4 7A7E

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

end of thread, other threads:[~2006-12-20 22:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-20 13:35 locking issue (hardirq+softirq+user) Jiri Slaby
2006-12-20 13:50 ` Arjan van de Ven
2006-12-20 13:59   ` Jiri Slaby
2006-12-20 22:28 ` linux-os (Dick Johnson)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox