From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760732AbYFQX5f (ORCPT ); Tue, 17 Jun 2008 19:57:35 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757176AbYFQX5Y (ORCPT ); Tue, 17 Jun 2008 19:57:24 -0400 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: References: <1213739834.3803.137.camel@johannes.berg> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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