From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtp1.linux-foundation.org ([140.211.169.13]:41884 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756705AbYFQX5Y (ORCPT ); Tue, 17 Jun 2008 19:57:24 -0400 Date: Tue, 17 Jun 2008 16:55:02 -0700 (PDT) From: Linus Torvalds To: Johannes Berg cc: Linux Kernel list , Michael Buesch , David Ellingsworth , linux-wireless , Ingo Molnar Subject: Re: [PATCH/RFC] remove irqs_disabled warning from local_bh_enable In-Reply-To: <1213739834.3803.137.camel@johannes.berg> Message-ID: (sfid-20080618_015729_353460_3475260E) References: <1213739834.3803.137.camel@johannes.berg> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-wireless-owner@vger.kernel.org List-ID: 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