Re: [PATCH V5 3/4] mm/sparse-vmemmap: Generalise vmemmap_populate_hugepages()
From: Huacai Chen <chenhuacai@kernel.org>
Date: 2022-07-28 09:25:15
Also in:
linux-arch, linux-mips, linux-mm, lkml, loongarch
Hi, Will, On Fri, Jul 22, 2022 at 5:16 PM Will Deacon [off-list ref] wrote:
On Thu, Jul 21, 2022 at 09:04:18PM +0800, Huacai Chen wrote:quoted
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 0abcb0a5f1b5..eafd084b8e19 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c@@ -694,6 +694,69 @@ int __meminit vmemmap_populate_basepages(unsigned long start, unsigned long end, return vmemmap_populate_range(start, end, node, altmap, NULL); } +void __weak __meminit vmemmap_set_pmd(pmd_t *pmd, void *p, int node, + unsigned long addr, unsigned long next) +{ +} + +int __weak __meminit vmemmap_check_pmd(pmd_t *pmd, int node, unsigned long addr, + unsigned long next) +{ + return 0; +} + +int __meminit vmemmap_populate_hugepages(unsigned long start, unsigned long end, + int node, struct vmem_altmap *altmap) +{ + unsigned long addr; + unsigned long next; + pgd_t *pgd; + p4d_t *p4d; + pud_t *pud; + pmd_t *pmd; + + for (addr = start; addr < end; addr = next) { + next = pmd_addr_end(addr, end); + + pgd = vmemmap_pgd_populate(addr, node); + if (!pgd) + return -ENOMEM; + + p4d = vmemmap_p4d_populate(pgd, addr, node); + if (!p4d) + return -ENOMEM; + + pud = vmemmap_pud_populate(p4d, addr, node); + if (!pud) + return -ENOMEM; + + pmd = pmd_offset(pud, addr); + if (pmd_none(READ_ONCE(*pmd))) { + void *p; + + p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); + if (p) { + vmemmap_set_pmd(pmd, p, node, addr, next); + continue; + } else if (altmap) { + /* + * No fallback: In any case we care about, the + * altmap should be reasonably sized and aligned + * such that vmemmap_alloc_block_buf() will always + * succeed. If there is no more space in the altmap + * and we'd have to fallback to PTE (highly unlikely).Can you tweak the last couple of sentences please, as they don't make sense to me? To be specific, I'd suggest replacing: "If there is no more space in the altmap and we'd have to fallback to PTE (highly unlikely). That could indicate an altmap-size configuration issue." with something like: "For consistency with the PTE case, return an error here as failure could indicate a configuration issue with the size of the altmap." With that: Acked-by: Will Deacon <will@kernel.org>
OK, I will send V5, thanks. Huacai
Will
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel