From: Andrea Arcangeli Subject: Re: [PATCH] fix pgd_lock deadlock Date: Tue, 15 Feb 2011 23:52:34 +0100 Message-ID: <20110215225234.GP5935@random.random> References: <20110203024838.GI5843@random.random> <4D4B1392.5090603@goop.org> <20110204012109.GP5843@random.random> <4D4C6F45.6010204@goop.org> <20110207232045.GJ3347@random.random> <20110215190710.GL5935@random.random> <20110215195450.GO5935@random.random> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: Thomas Gleixner Cc: Jeremy Fitzhardinge , "H. Peter Anvin" , the arch/x86 maintainers , "Xen-devel@lists.xensource.com" , Linux Kernel Mailing List , Ian Campbell , Jan Beulich , Larry Woodman , Andrew Morton , Andi Kleen , Johannes Weiner , Hugh Dickins , Rik van Riel List-Id: xen-devel@lists.xenproject.org On Tue, Feb 15, 2011 at 09:26:35PM +0100, Thomas Gleixner wrote: > Another thing. You check for in_interrupt(), but what makes sure that > the code which takes pgd_lock is never taken with interrupts disabled > except during early boot ? It's perfectly fine to take pgd_lock with irq disabled, as long as you don't pretend to take the page_table_lock too after that. So that's not a concern. I removed _irqsave from all pgd_lock, and I doubt there's any code protected by pgd_lock that runs with irq disabled, but if there is, it's still ok and it especially shouldn't have used _irqsave. The only real issue here to sort out, is if pgd_lock is ever taken from irq or not, and to me it looks like in_interrupt() should trigger if it is ever taken from irq, so it won't go unnoticed for long if this isn't ok.