Messages in this thread | | | Date | Tue, 17 Jun 2008 16:55:02 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: [PATCH/RFC] remove irqs_disabled warning from local_bh_enable |
| |
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*.
See?
Linus
| |