On Thursday 16 June 2011 22:23:09 f6bvp wrote: > Jun 16 12:03:34 f6bvp-9 kernel: ================================= > Jun 16 12:03:34 f6bvp-9 kernel: [ INFO: inconsistent lock state ] > Jun 16 12:03:34 f6bvp-9 kernel: 2.6.39.1 #3 > Jun 16 12:03:34 f6bvp-9 kernel: --------------------------------- > Jun 16 12:03:34 f6bvp-9 kernel: inconsistent {IN-SOFTIRQ-R} -> {SOFTIRQ-ON-W} usage. > Jun 16 12:03:34 f6bvp-9 kernel: ax25ipd/2813 [HC0[0]:SC0[0]:HE1:SE1] takes: > Jun 16 12:03:34 f6bvp-9 kernel: (disc_data_lock){+++?.-}, at: [<ffffffffa018552b>] mkiss_close+0x1b/0x90 [mkiss] > Jun 16 12:03:34 f6bvp-9 kernel: {IN-SOFTIRQ-R} state was registered at: > ... > Is there something wrong in AX25 code or (more unlikely) is this > operation not permitted ? The message hints that disc_data_lock is aquired with softirqs disabled, but does not itself disable softirqs, which can in rare circumstances lead to a deadlock. Does this fix it? Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> --- a/drivers/net/hamradio/mkiss.c +++ b/drivers/net/hamradio/mkiss.c @@ -708,11 +708,11 @@ static struct mkiss *mkiss_get(struct tty_struct *tty) { struct mkiss *ax; - read_lock(&disc_data_lock); + read_lock_bh(&disc_data_lock); ax = tty->disc_data; if (ax) atomic_inc(&ax->refcnt); - read_unlock(&disc_data_lock); + read_unlock_bh(&disc_data_lock); return ax; } @@ -813,10 +813,10 @@ static void mkiss_close(struct tty_struct *tty) { struct mkiss *ax; - write_lock(&disc_data_lock); + write_lock_bh(&disc_data_lock); ax = tty->disc_data; tty->disc_data = NULL; - write_unlock(&disc_data_lock); + write_unlock_bh(&disc_data_lock); if (!ax) return; -- To unsubscribe from this list: send the line "unsubscribe linux-hams" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html