[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <45893C1C.60305@gmail.com>
Date: Wed, 20 Dec 2006 14:35:24 +0100
From: Jiri Slaby <jirislaby@...il.com>
To: Linux kernel mailing list <linux-kernel@...r.kernel.org>
Subject: locking issue (hardirq+softirq+user)
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
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists