Re: [PATCH V6 1/2] mm/page_alloc: Make alloc_gigantic_page() available for general use
From: David Hildenbrand <hidden>
Date: 2019-10-15 11:42:18
Also in:
linux-mm, linuxppc-dev
On 15.10.19 11:21, Anshuman Khandual wrote:
quoted hunk ↗ jump to hunk
alloc_gigantic_page() implements an allocation method where it scans over various zones looking for a large contiguous memory block which could not have been allocated through the buddy allocator. A subsequent patch which tests arch page table helpers needs such a method to allocate PUD_SIZE sized memory block. In the future such methods might have other use cases as well. So alloc_gigantic_page() has been split carving out actual memory allocation method and made available via new alloc_gigantic_page_order() which is wrapped under CONFIG_CONTIG_ALLOC. Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Vlastimil Babka <redacted> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Thomas Gleixner <redacted> Cc: Mike Rapoport <redacted> Cc: Mike Kravetz <redacted> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Dan Williams <redacted> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mark Brown <broonie@kernel.org> Cc: Steven Price <Steven.Price@arm.com> Cc: Ard Biesheuvel <redacted> Cc: Masahiro Yamada <redacted> Cc: Kees Cook <redacted> Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> Cc: Matthew Wilcox <willy@infradead.org> Cc: Sri Krishna chowdary <redacted> Cc: Dave Hansen <redacted> Cc: Russell King - ARM Linux <linux@armlinux.org.uk> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <redacted> Cc: Martin Schwidefsky <redacted> Cc: Heiko Carstens <redacted> Cc: "David S. Miller" <davem@davemloft.net> Cc: Vineet Gupta <redacted> Cc: James Hogan <jhogan@kernel.org> Cc: Paul Burton <redacted> Cc: Ralf Baechle <redacted> Cc: Kirill A. Shutemov <redacted> Cc: Gerald Schaefer <redacted> Cc: Christophe Leroy <redacted> Cc: David Rientjes <rientjes@google.com> Cc: Andrea Arcangeli <redacted> Cc: Oscar Salvador <osalvador@suse.de> Cc: Mel Gorman <redacted> Cc: linux-snps-arc@lists.infradead.org Cc: linux-mips@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-ia64@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <redacted> --- include/linux/gfp.h | 3 ++ mm/hugetlb.c | 76 +---------------------------------- mm/page_alloc.c | 98 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 75 deletions(-)diff --git a/include/linux/gfp.h b/include/linux/gfp.h index fb07b503dc45..379ad23437d1 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h@@ -589,6 +589,9 @@ static inline bool pm_suspended_storage(void) /* The below functions must be run on a range from a single zone. */ extern int alloc_contig_range(unsigned long start, unsigned long end, unsigned migratetype, gfp_t gfp_mask); +extern struct page *alloc_gigantic_page_order(unsigned int order, + gfp_t gfp_mask, int nid, + nodemask_t *nodemask); #endif void free_contig_range(unsigned long pfn, unsigned int nr_pages);diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 977f9a323a7a..d199556a4a2c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c@@ -1023,86 +1023,12 @@ static void free_gigantic_page(struct page *page, unsigned int order) } #ifdef CONFIG_CONTIG_ALLOC -static int __alloc_gigantic_page(unsigned long start_pfn, - unsigned long nr_pages, gfp_t gfp_mask) -{ - unsigned long end_pfn = start_pfn + nr_pages; - return alloc_contig_range(start_pfn, end_pfn, MIGRATE_MOVABLE, - gfp_mask); -} - -static bool pfn_range_valid_gigantic(struct zone *z, - unsigned long start_pfn, unsigned long nr_pages) -{ - unsigned long i, end_pfn = start_pfn + nr_pages; - struct page *page; - - for (i = start_pfn; i < end_pfn; i++) { - if (!pfn_valid(i)) - return false; - - page = pfn_to_page(i);
Am I missing something or should here really be a pfn_to_online_page() here instead of a pfn_valid() ? -- Thanks, David / dhildenb _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel