From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261858AbVGZIVu (ORCPT ); Tue, 26 Jul 2005 04:21:50 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261854AbVGZITh (ORCPT ); Tue, 26 Jul 2005 04:19:37 -0400 Received: from smtp202.mail.sc5.yahoo.com ([216.136.129.92]:13723 "HELO smtp202.mail.sc5.yahoo.com") by vger.kernel.org with SMTP id S261851AbVGZIRh (ORCPT ); Tue, 26 Jul 2005 04:17:37 -0400 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com.au; h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type; b=EsUo1s+g/3gNWzHKDVvHhHirJKpCNuLYyckO0nUT7PJ8LHbcZ/ygnYqkZ6frXCgwi1Z/odqKUQmdUIbBE41fWNJjDBN6vGuoeQUObsHQvWbgxBMJam9yOVCNUpEYAplY05UNMt5is4d6WbrmQ3/o87+5MbDwdVp4aGFMIeH5C1w= ; Message-ID: <42E5F19A.6050407@yahoo.com.au> Date: Tue, 26 Jul 2005 18:17:30 +1000 From: Nick Piggin User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.6) Gecko/20050324 Debian/1.7.6-1 X-Accept-Language: en MIME-Version: 1.0 To: Andrew Morton CC: Hugh Dickins , Benjamin Herrenschmidt , linux-kernel Subject: [patch 2/6] mm: micro-optimise rmap References: <42E5F139.70002@yahoo.com.au> <42E5F173.3010409@yahoo.com.au> In-Reply-To: <42E5F173.3010409@yahoo.com.au> Content-Type: multipart/mixed; boundary="------------050907090800090702080303" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------050907090800090702080303 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit 2/6 --------------050907090800090702080303 Content-Type: text/plain; name="mm-microopt-rmap.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="mm-microopt-rmap.patch" Microoptimise page_add_anon_rmap. Although these expressions are used only in the taken branch of the if() statement, the compiler can't reorder them inside because atomic_inc_and_test is a barrier. Signed-off-by: Nick Piggin Index: linux-2.6/mm/rmap.c =================================================================== --- linux-2.6.orig/mm/rmap.c +++ linux-2.6/mm/rmap.c @@ -442,22 +442,23 @@ int page_referenced(struct page *page, i void page_add_anon_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address) { - struct anon_vma *anon_vma = vma->anon_vma; - pgoff_t index; - BUG_ON(PageReserved(page)); - BUG_ON(!anon_vma); inc_mm_counter(vma->vm_mm, anon_rss); - anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; - index = (address - vma->vm_start) >> PAGE_SHIFT; - index += vma->vm_pgoff; - index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT; - if (atomic_inc_and_test(&page->_mapcount)) { - page->index = index; + struct anon_vma *anon_vma = vma->anon_vma; + pgoff_t index; + + BUG_ON(!anon_vma); + anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON; page->mapping = (struct address_space *) anon_vma; + + index = (address - vma->vm_start) >> PAGE_SHIFT; + index += vma->vm_pgoff; + index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT; + page->index = index; + inc_page_state(nr_mapped); } /* else checking page index and mapping is racy */ --------------050907090800090702080303-- Send instant messages to your online friends http://au.messenger.yahoo.com