From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 666F9C4321D for ; Tue, 21 Aug 2018 21:08:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 224A4217C9 for ; Tue, 21 Aug 2018 21:08:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 224A4217C9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linux-foundation.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727743AbeHVAaS (ORCPT ); Tue, 21 Aug 2018 20:30:18 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:45170 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726626AbeHVAaR (ORCPT ); Tue, 21 Aug 2018 20:30:17 -0400 Received: from akpm3.svl.corp.google.com (unknown [104.133.8.65]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id EEF379DA; Tue, 21 Aug 2018 21:08:29 +0000 (UTC) Date: Tue, 21 Aug 2018 14:08:29 -0700 From: Andrew Morton To: Jia He Cc: Pasha Tatashin , Russell King , Catalin Marinas , Will Deacon , Mark Rutland , Ard Biesheuvel , Michal Hocko , Wei Yang , Kees Cook , Laura Abbott , Vladimir Murzin , Philip Derrin , AKASHI Takahiro , James Morse , Steve Capper , Pavel Tatashin , Gioh Kim , Vlastimil Babka , Mel Gorman , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov , Daniel Jordan , Daniel Vacek , Eugeniu Rosca , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , Jia He Subject: Re: [RESEND PATCH v10 3/6] mm: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() Message-Id: <20180821140829.7d804678e9db8725f52180c2@linux-foundation.org> In-Reply-To: <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> References: <1530867675-9018-1-git-send-email-hejianet@gmail.com> <1530867675-9018-4-git-send-email-hejianet@gmail.com> <61ca29b9-a985-cce0-03e9-d216791c802c@microsoft.com> <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> X-Mailer: Sylpheed 3.6.0 (GTK+ 2.24.31; x86_64-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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 21 Aug 2018 14:14:30 +0800 Jia He wrote: > Hi Pasha > > On 8/17/2018 9:08 AM, Pasha Tatashin Wrote: > > > >> Signed-off-by: Jia He > >> --- > >> mm/memblock.c | 37 +++++++++++++++++++++++++++++-------- > >> 1 file changed, 29 insertions(+), 8 deletions(-) > >> > >> diff --git a/mm/memblock.c b/mm/memblock.c > >> index ccad225..84f7fa7 100644 > >> --- a/mm/memblock.c > >> +++ b/mm/memblock.c > >> @@ -1140,31 +1140,52 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, > >> #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ > >> > >> #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID > >> +static int early_region_idx __init_memblock = -1; > > > > One comment: > > > > This should be __initdata, but even better bring it inside the function > > as local static variable. > > > Seems it should be __initdata_memblock instead of __initdata? > Eh, it's 4 bytes. It should however be local to the sole function which uses it. And what's this "ulong" thing? mm/ uses unsigned long. --- a/mm/memblock.c~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/mm/memblock.c @@ -1232,15 +1232,15 @@ int __init_memblock memblock_set_node(ph #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -static int early_region_idx __init_memblock = -1; -ulong __init_memblock memblock_next_valid_pfn(ulong pfn) +unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn) { struct memblock_type *type = &memblock.memory; struct memblock_region *regions = type->regions; uint right = type->cnt; uint mid, left = 0; - ulong start_pfn, end_pfn, next_start_pfn; + unsigned long start_pfn, end_pfn, next_start_pfn; phys_addr_t addr = PFN_PHYS(++pfn); + static int early_region_idx __initdata_memblock = -1; /* fast path, return pfn+1 if next pfn is in the same region */ if (early_region_idx != -1) { --- a/include/linux/mmzone.h~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/include/linux/mmzone.h @@ -1269,7 +1269,7 @@ static inline int pfn_present(unsigned l #define early_pfn_valid(pfn) pfn_valid(pfn) #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -extern ulong memblock_next_valid_pfn(ulong pfn); +extern unsigned long memblock_next_valid_pfn(unsigned long pfn); #define next_valid_pfn(pfn) memblock_next_valid_pfn(pfn) #endif void sparse_init(void); _ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by kanga.kvack.org (Postfix) with ESMTP id 272616B20BD for ; Tue, 21 Aug 2018 17:08:32 -0400 (EDT) Received: by mail-pg1-f200.google.com with SMTP id u6-v6so5868582pgn.10 for ; Tue, 21 Aug 2018 14:08:32 -0700 (PDT) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org. [140.211.169.12]) by mx.google.com with ESMTPS id b30-v6si14362794pla.426.2018.08.21.14.08.30 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 14:08:31 -0700 (PDT) Date: Tue, 21 Aug 2018 14:08:29 -0700 From: Andrew Morton Subject: Re: [RESEND PATCH v10 3/6] mm: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() Message-Id: <20180821140829.7d804678e9db8725f52180c2@linux-foundation.org> In-Reply-To: <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> References: <1530867675-9018-1-git-send-email-hejianet@gmail.com> <1530867675-9018-4-git-send-email-hejianet@gmail.com> <61ca29b9-a985-cce0-03e9-d216791c802c@microsoft.com> <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Jia He Cc: Pasha Tatashin , Russell King , Catalin Marinas , Will Deacon , Mark Rutland , Ard Biesheuvel , Michal Hocko , Wei Yang , Kees Cook , Laura Abbott , Vladimir Murzin , Philip Derrin , AKASHI Takahiro , James Morse , Steve Capper , Pavel Tatashin , Gioh Kim , Vlastimil Babka , Mel Gorman , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov , Daniel Jordan , Daniel Vacek , Eugeniu Rosca , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , Jia He On Tue, 21 Aug 2018 14:14:30 +0800 Jia He wrote: > Hi Pasha > > On 8/17/2018 9:08 AM, Pasha Tatashin Wrote: > > > >> Signed-off-by: Jia He > >> --- > >> mm/memblock.c | 37 +++++++++++++++++++++++++++++-------- > >> 1 file changed, 29 insertions(+), 8 deletions(-) > >> > >> diff --git a/mm/memblock.c b/mm/memblock.c > >> index ccad225..84f7fa7 100644 > >> --- a/mm/memblock.c > >> +++ b/mm/memblock.c > >> @@ -1140,31 +1140,52 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, > >> #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ > >> > >> #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID > >> +static int early_region_idx __init_memblock = -1; > > > > One comment: > > > > This should be __initdata, but even better bring it inside the function > > as local static variable. > > > Seems it should be __initdata_memblock instead of __initdata? > Eh, it's 4 bytes. It should however be local to the sole function which uses it. And what's this "ulong" thing? mm/ uses unsigned long. --- a/mm/memblock.c~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/mm/memblock.c @@ -1232,15 +1232,15 @@ int __init_memblock memblock_set_node(ph #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -static int early_region_idx __init_memblock = -1; -ulong __init_memblock memblock_next_valid_pfn(ulong pfn) +unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn) { struct memblock_type *type = &memblock.memory; struct memblock_region *regions = type->regions; uint right = type->cnt; uint mid, left = 0; - ulong start_pfn, end_pfn, next_start_pfn; + unsigned long start_pfn, end_pfn, next_start_pfn; phys_addr_t addr = PFN_PHYS(++pfn); + static int early_region_idx __initdata_memblock = -1; /* fast path, return pfn+1 if next pfn is in the same region */ if (early_region_idx != -1) { --- a/include/linux/mmzone.h~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/include/linux/mmzone.h @@ -1269,7 +1269,7 @@ static inline int pfn_present(unsigned l #define early_pfn_valid(pfn) pfn_valid(pfn) #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -extern ulong memblock_next_valid_pfn(ulong pfn); +extern unsigned long memblock_next_valid_pfn(unsigned long pfn); #define next_valid_pfn(pfn) memblock_next_valid_pfn(pfn) #endif void sparse_init(void); _ From mboxrd@z Thu Jan 1 00:00:00 1970 From: akpm@linux-foundation.org (Andrew Morton) Date: Tue, 21 Aug 2018 14:08:29 -0700 Subject: [RESEND PATCH v10 3/6] mm: page_alloc: reduce unnecessary binary search in memblock_next_valid_pfn() In-Reply-To: <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> References: <1530867675-9018-1-git-send-email-hejianet@gmail.com> <1530867675-9018-4-git-send-email-hejianet@gmail.com> <61ca29b9-a985-cce0-03e9-d216791c802c@microsoft.com> <334337ca-811e-4a2e-09ff-65ebe37ef6df@gmail.com> Message-ID: <20180821140829.7d804678e9db8725f52180c2@linux-foundation.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, 21 Aug 2018 14:14:30 +0800 Jia He wrote: > Hi Pasha > > On 8/17/2018 9:08 AM, Pasha Tatashin Wrote: > > > >> Signed-off-by: Jia He > >> --- > >> mm/memblock.c | 37 +++++++++++++++++++++++++++++-------- > >> 1 file changed, 29 insertions(+), 8 deletions(-) > >> > >> diff --git a/mm/memblock.c b/mm/memblock.c > >> index ccad225..84f7fa7 100644 > >> --- a/mm/memblock.c > >> +++ b/mm/memblock.c > >> @@ -1140,31 +1140,52 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, > >> #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ > >> > >> #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID > >> +static int early_region_idx __init_memblock = -1; > > > > One comment: > > > > This should be __initdata, but even better bring it inside the function > > as local static variable. > > > Seems it should be __initdata_memblock instead of __initdata? > Eh, it's 4 bytes. It should however be local to the sole function which uses it. And what's this "ulong" thing? mm/ uses unsigned long. --- a/mm/memblock.c~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/mm/memblock.c @@ -1232,15 +1232,15 @@ int __init_memblock memblock_set_node(ph #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -static int early_region_idx __init_memblock = -1; -ulong __init_memblock memblock_next_valid_pfn(ulong pfn) +unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn) { struct memblock_type *type = &memblock.memory; struct memblock_region *regions = type->regions; uint right = type->cnt; uint mid, left = 0; - ulong start_pfn, end_pfn, next_start_pfn; + unsigned long start_pfn, end_pfn, next_start_pfn; phys_addr_t addr = PFN_PHYS(++pfn); + static int early_region_idx __initdata_memblock = -1; /* fast path, return pfn+1 if next pfn is in the same region */ if (early_region_idx != -1) { --- a/include/linux/mmzone.h~mm-page_alloc-reduce-unnecessary-binary-search-in-memblock_next_valid_pfn-fix +++ a/include/linux/mmzone.h @@ -1269,7 +1269,7 @@ static inline int pfn_present(unsigned l #define early_pfn_valid(pfn) pfn_valid(pfn) #ifdef CONFIG_HAVE_MEMBLOCK_PFN_VALID -extern ulong memblock_next_valid_pfn(ulong pfn); +extern unsigned long memblock_next_valid_pfn(unsigned long pfn); #define next_valid_pfn(pfn) memblock_next_valid_pfn(pfn) #endif void sparse_init(void); _