On Tue, 2008-06-17 at 16:55 -0700, Linus Torvalds wrote: > > On Tue, 17 Jun 2008, Johannes Berg wrote: > > > > This warning has started to trigger with mac80211 because it can, under > > some circumstances, use spin_lock_bh() protected sections within > > irq-disabled sections. Is that a bug? > > Yes, it's a bug. > > Why? Not because of the "spin_lock_bh()" itself, but because of the > _unlock_, which does a "local_bh_enable_ip()", which in turn will check > the whole "do_softirq()" if it was the last softirq_count. > > And you must not do softirq's when hard-irq's were disabled! > > So it should in theory be ok (but perhaps a bit odd) to do something like > > spin_lock_irq(&irq_lock); > ..do something.. > spin_lock_bh(&bh_lock); > spin_unlock_irq(&irq_lock); > .. do something else .. > spin_unlock_bh(&bh_lock); > > where the "spin_lock_bh()" itself is in an irq-locked context - as long as > the "spin_unlock_bh()" is *not*. I would suggest discouraging such madne^Wcreativity, its gains are dubious at best and it doesn't make the locking any more obvious and could be an indication of messy locking to begin with. So I would like to see Johannes' other patch that allows all of us to enjoy the warning he ran into ;-) Peter -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html