From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755608Ab1BXIXn (ORCPT ); Thu, 24 Feb 2011 03:23:43 -0500 Received: from vpn.id2.novell.com ([195.33.99.129]:33433 "EHLO vpn.id2.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755308Ab1BXIXm convert rfc822-to-8bit (ORCPT ); Thu, 24 Feb 2011 03:23:42 -0500 Message-Id: <4D66239902000078000336D6@vpn.id2.novell.com> X-Mailer: Novell GroupWise Internet Agent 8.0.1 Date: Thu, 24 Feb 2011 08:23:37 +0000 From: "Jan Beulich" To: "Andrea Arcangeli" Cc: "Ian Campbell" , "Andi Kleen" , "Hugh Dickins" , "Jeremy Fitzhardinge" , "the arch/x86 maintainers" , "Thomas Gleixner" , "Andrew Morton" , "Xen-devel@lists.xensource.com" , "Konrad Rzeszutek Wilk" , "Johannes Weiner" , "Larry Woodman" , "Rik van Riel" , "Linux Kernel Mailing List" , "H. Peter Anvin" Subject: Re: [PATCH] fix pgd_lock deadlock References: <20110215195450.GO5935@random.random> <20110216183304.GD5935@random.random> <20110217101941.GH2380@redhat.com> <20110221143023.GF13092@random.random> <20110221145350.GH25382@redhat.com> <4D6378760200007800033104@vpn.id2.novell.com> <20110222134956.GU13092@random.random> <4D63D4CD020000780003320A@vpn.id2.novell.com> <20110224042222.GG31195@random.random> In-Reply-To: <20110224042222.GG31195@random.random> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8BIT Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org >>> On 24.02.11 at 05:22, Andrea Arcangeli wrote: > On Tue, Feb 22, 2011 at 02:22:53PM +0000, Jan Beulich wrote: >> >>> On 22.02.11 at 14:49, Andrea Arcangeli wrote: >> > On Tue, Feb 22, 2011 at 07:48:54AM +0000, Jan Beulich wrote: >> >> A possible alternative would be to acquire the page table lock >> >> in vmalloc_sync_all() only in the Xen case (perhaps by storing >> >> NULL into page->index in pgd_set_mm() when not running on >> >> Xen). This is utilizing the fact that there aren't (supposed to >> >> be - for non-pvops this is definitely the case) any TLB flush IPIs >> >> under Xen, and hence the race you're trying to fix doesn't >> >> exist there (while non-Xen doesn't need the extra locking). >> > >> > That's sure ok with me. Can we use a global runtime to check if the >> > guest is running under Xen paravirt, instead of passing that info >> > through page->something? >> >> If everyone's okay with putting a couple of "if (xen_pv_domain())" >> into mm/fault.c - sure. I would have thought that this wouldn't be >> liked, hence the suggestion to make this depend on seeing the >> backlink be non-NULL. > > What about this? The page->private logic gets optimized away at > compile time with XEN=n. > > The removal of _irqsave from pgd_lock, I'll delay it as it's no bugfix > anymore. > > === > Subject: xen: stop taking the page_table_lock with irq disabled > > From: Andrea Arcangeli > > It's forbidden to take the page_table_lock with the irq disabled or if there's > contention the IPIs (for tlb flushes) sent with the page_table_lock held will > never run leading to a deadlock. > > Only Xen needs the page_table_lock and Xen won't need IPI TLB flushes hence > the deadlock doesn't exist for Xen. Looks reasonable to me, except for the implementation no longer matching subject and description (the lock still gets taken with IRQs disabled, just that - as far as we can tell so far - doesn't matter for Xen). With the conditional on the reader side I also wonder whether the conditional on the writer side is really a good thing to have, considering that generally distro kernels are likely to have XEN enabled. Jan