Messages in this thread | | | Date | Wed, 20 Dec 2006 14:35:24 +0100 | From | Jiri Slaby <> | 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |