From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f198.google.com (mail-pf0-f198.google.com [209.85.192.198]) by kanga.kvack.org (Postfix) with ESMTP id 39A8F6B0030 for ; Wed, 28 Mar 2018 05:38:41 -0400 (EDT) Received: by mail-pf0-f198.google.com with SMTP id k16so1132529pfi.7 for ; Wed, 28 Mar 2018 02:38:41 -0700 (PDT) Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v5-v6sor1530388plg.116.2018.03.28.02.38.40 for (Google Transport Security); Wed, 28 Mar 2018 02:38:40 -0700 (PDT) Date: Wed, 28 Mar 2018 17:38:30 +0800 From: Wei Yang Subject: Re: [PATCH v3 4/5] arm64: introduce pfn_valid_region() Message-ID: <20180328093830.GB98648@WeideMacBook-Pro.local> Reply-To: Wei Yang References: <1522033340-6575-1-git-send-email-hejianet@gmail.com> <1522033340-6575-5-git-send-email-hejianet@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1522033340-6575-5-git-send-email-hejianet@gmail.com> Sender: owner-linux-mm@kvack.org List-ID: To: Jia He Cc: Andrew Morton , Michal Hocko , Catalin Marinas , Mel Gorman , Will Deacon , Mark Rutland , Ard Biesheuvel , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Pavel Tatashin , Daniel Jordan , AKASHI Takahiro , Gioh Kim , Steven Sistare , Daniel Vacek , Eugeniu Rosca , Vlastimil Babka , linux-kernel@vger.kernel.org, linux-mm@kvack.org, James Morse , Steve Capper , x86@kernel.org, Greg Kroah-Hartman , Kate Stewart , Philippe Ombredanne , Johannes Weiner , Kemi Wang , Petr Tesarik , YASUAKI ISHIMATSU , Andrey Ryabinin , Nikolay Borisov , Jia He On Sun, Mar 25, 2018 at 08:02:18PM -0700, Jia He wrote: >This is the preparation for further optimizing in early_pfn_valid >on arm64. > >Signed-off-by: Jia He >--- > arch/arm64/include/asm/page.h | 3 ++- > arch/arm64/mm/init.c | 25 ++++++++++++++++++++++++- > 2 files changed, 26 insertions(+), 2 deletions(-) > >diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h >index 60d02c8..da2cba3 100644 >--- a/arch/arm64/include/asm/page.h >+++ b/arch/arm64/include/asm/page.h >@@ -38,7 +38,8 @@ extern void clear_page(void *to); > typedef struct page *pgtable_t; > > #ifdef CONFIG_HAVE_ARCH_PFN_VALID >-extern int pfn_valid(unsigned long); >+extern int pfn_valid(unsigned long pfn); >+extern int pfn_valid_region(unsigned long pfn, int *last_idx); > #endif > > #include >diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >index 00e7b90..06433d5 100644 >--- a/arch/arm64/mm/init.c >+++ b/arch/arm64/mm/init.c >@@ -290,7 +290,30 @@ int pfn_valid(unsigned long pfn) > return memblock_is_map_memory(pfn << PAGE_SHIFT); > } > EXPORT_SYMBOL(pfn_valid); >-#endif >+ >+int pfn_valid_region(unsigned long pfn, int *last_idx) >+{ >+ unsigned long start_pfn, end_pfn; >+ struct memblock_type *type = &memblock.memory; >+ >+ if (*last_idx != -1) { >+ start_pfn = PFN_DOWN(type->regions[*last_idx].base); PFN_UP() should be used. >+ end_pfn= PFN_DOWN(type->regions[*last_idx].base + >+ type->regions[*last_idx].size); >+ >+ if (pfn >= start_pfn && pfn < end_pfn) >+ return !memblock_is_nomap( >+ &memblock.memory.regions[*last_idx]); Could use type->regions directly. >+ } >+ >+ *last_idx = memblock_search_pfn_regions(pfn); >+ if (*last_idx == -1) >+ return false; >+ >+ return !memblock_is_nomap(&memblock.memory.regions[*last_idx]); Could use type->regions directly. Well, since your check memblock.memory.regions, how about use a variable equals memblock.memory.regions directly instead of type->regions? For example: struct memblock_region *regions = memblock.memory.regions; >+} >+EXPORT_SYMBOL(pfn_valid_region); >+#endif /*CONFIG_HAVE_ARCH_PFN_VALID*/ > > #ifndef CONFIG_SPARSEMEM > static void __init arm64_memory_present(void) >-- >2.7.4 -- Wei Yang Help you, Help me