Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964838AbWIVTuP (ORCPT ); Fri, 22 Sep 2006 15:50:15 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964841AbWIVTuP (ORCPT ); Fri, 22 Sep 2006 15:50:15 -0400 Received: from smtp.osdl.org ([65.172.181.4]:64694 "EHLO smtp.osdl.org") by vger.kernel.org with ESMTP id S964838AbWIVTuN (ORCPT ); Fri, 22 Sep 2006 15:50:13 -0400 Date: Fri, 22 Sep 2006 12:49:40 -0700 From: Andrew Morton To: Jes Sorensen Cc: Linus Torvalds , Linux Kernel Mailing List , bjorn_helgaas@hp.com, Nick Piggin , Robin Holt , Dean Nelson , Hugh Dickins Subject: Re: [patch] do_no_pfn() Message-Id: <20060922124940.5ca5ee87.akpm@osdl.org> In-Reply-To: References: X-Mailer: Sylpheed version 2.2.7 (GTK+ 2.8.6; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2041 Lines: 55 On 20 Sep 2006 03:25:25 -0400 Jes Sorensen wrote: > Implement do_no_pfn() for handling mapping of memory without a struct > page backing it. This avoids creating fake page table entries for > regions which are not backed by real memory. > > This feature is used by the MSPEC driver and other users, where it is > highly undesirable to have a struct page sitting behind the page > (for instance if the page is accessed in cached mode via the struct > page in parallel to the the driver accessing it uncached, which can > result in data corruption on some architectures, such as ia64). > > This version uses specific NOPFN_{SIGBUS,OOM} return values, rather > than expect all negative pfn values would be an error. It also bugs on > cow mappings as this would not work with the VM. How does this followup look? We don't want the rarely-used do_no_pfn() to get inlined in the oft-used handle_pte_fault(), using up icache. Mark it noinline and unlikely. --- a/mm/memory.c~do_no_pfn-tweaks +++ a/mm/memory.c @@ -2276,8 +2276,10 @@ oom: * * It is expected that the ->nopfn handler always returns the same pfn * for a given virtual mapping. + * + * Mark this `noinline' to prevent it from bloating the main pagefault code. */ -static int do_no_pfn(struct mm_struct *mm, struct vm_area_struct *vma, +static noinline int do_no_pfn(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, pte_t *page_table, pmd_t *pmd, int write_access) { @@ -2376,7 +2378,7 @@ static inline int handle_pte_fault(struc return do_no_page(mm, vma, address, pte, pmd, write_access); - if (vma->vm_ops->nopfn) + if (unlikely(vma->vm_ops->nopfn)) return do_no_pfn(mm, vma, address, pte, pmd, write_access); } _ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/