From: Will Deacon <will@kernel.org>
To: Barry Song <baohua@kernel.org>
Cc: Wen Jiang <jiangwenxiaomi@gmail.com>,
akpm@linux-foundation.org, catalin.marinas@arm.com,
linux-mm@kvack.org, urezki@gmail.com, Xueyuan.chen21@gmail.com,
ajd@linux.ibm.com, anshuman.khandual@arm.com, david@kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, rppt@kernel.org,
ryan.roberts@arm.com, dev.jain@arm.com,
Wen Jiang <jiangwen6@xiaomi.com>, Leo Yan <leo.yan@arm.com>
Subject: Re: [PATCH v7 1/7] arm64/hugetlb: Extend batching of multiple CONT_PTE in a single PTE setup
Date: Tue, 4 Aug 2026 15:40:02 +0100 [thread overview]
Message-ID: <anH5wnXvAhoLWmH1@willie-the-truck> (raw)
In-Reply-To: <CAGsJ_4zgFk1iaQWisYMOR4iFxonwDskRt3Gte0cEts1q9hxibA@mail.gmail.com>
On Wed, Jul 29, 2026 at 05:47:34AM +0800, Barry Song wrote:
> On Tue, Jul 28, 2026 at 8:03 PM Will Deacon <will@kernel.org> wrote:
> >
> > On Wed, Jul 15, 2026 at 08:08:07PM +0800, Wen Jiang wrote:
> > > From: "Barry Song (Xiaomi)" <baohua@kernel.org>
> > >
> > > For sizes aligned to CONT_PTE_SIZE and smaller than PMD_SIZE,
> > > we can handle CONT_PTE_SIZE groups together.
> > >
> > > These additional sizes are mapping spans used by non-hugetlbfs(vmalloc)
> > > mm code, not new HugeTLB hstate sizes.
> > >
> > > Signed-off-by: Barry Song (Xiaomi) <baohua@kernel.org>
> > > Signed-off-by: Wen Jiang <jiangwen6@xiaomi.com>
> > > Tested-by: Xueyuan Chen <xueyuan.chen21@gmail.com>
> > > Tested-by: Leo Yan <leo.yan@arm.com>
> > > Reviewed-by: Dev Jain <dev.jain@arm.com>
> > > ---
> > > arch/arm64/mm/hugetlbpage.c | 15 +++++++++++++++
> > > 1 file changed, 15 insertions(+)
> > >
> > > diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
> > > index a42c05cf56408..7ce159483a354 100644
> > > --- a/arch/arm64/mm/hugetlbpage.c
> > > +++ b/arch/arm64/mm/hugetlbpage.c
> > > @@ -94,6 +94,11 @@ static int find_num_contig(struct mm_struct *mm, unsigned long addr,
> > > return CONT_PTES;
> > > }
> > >
> > > +/*
> > > + * num_contig_ptes(), set_huge_pte_at() and arch_make_huge_pte() can be
> > > + * used by non-hugetlbfs(vmalloc) mm code to set multiple huge mappings
> > > + * at the PTE level.
> > > + */
> > > static inline int num_contig_ptes(unsigned long size, size_t *pgsize)
> > > {
> > > int contig_ptes = 1;
> > > @@ -110,6 +115,12 @@ static inline int num_contig_ptes(unsigned long size, size_t *pgsize)
> > > contig_ptes = CONT_PTES;
> > > break;
> > > default:
> > > + if (size > 0 && size < PMD_SIZE &&
> > > + IS_ALIGNED(size, CONT_PTE_SIZE)) {
> > > + *pgsize = PAGE_SIZE;
> > > + contig_ptes = size >> PAGE_SHIFT;
> > > + break;
> > > + }
> >
> > Under which circumstances would you get a size of 0 here?
> >
> > Given that you're relying on arch_vmap_pte_range_map_size() to give you
> > a well-formed size, why isn't if sufficient to check only the alignment?
>
> Thanks very much for your review.
>
> Are you suggesting the change below? If so, I'm fine with it.
> I guess the current code is just being overly cautious for
> defensive programming.
>
> diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
> index 8429d220660b..c1af52ba572d 100644
> --- a/arch/arm64/mm/hugetlbpage.c
> +++ b/arch/arm64/mm/hugetlbpage.c
> @@ -115,8 +115,7 @@ static inline int num_contig_ptes(unsigned long
> size, size_t *pgsize)
> contig_ptes = CONT_PTES;
> break;
> default:
> - if (size > 0 && size < PMD_SIZE &&
> - IS_ALIGNED(size, CONT_PTE_SIZE)) {
> + if (IS_ALIGNED(size, CONT_PTE_SIZE)) {
> *pgsize = PAGE_SIZE;
> contig_ptes = size >> PAGE_SHIFT;
> break;
>
Yeah, that's what I had in mind.
> > > WARN_ON(!__hugetlb_valid_size(size));
> >
> > I agree with David that it's messy having hugetlb tangled up in here.
> > It means this validity check is now going to miss some genuinely bogus
> > cases for the hugetlb path (as opposed to the vmalloc path).
>
> I agree that coupling hugetlb with vmalloc is not ideal. As I
> explained to David, this has been an issue for a couple of
> years and affects multiple architectures since 2021:
>
> https://lore.kernel.org/all/fb3ccc73377832ac6708181ec419128a2f98ce36.1620795204.git.christophe.leroy@csgroup.eu/
>
> where `#ifdef CONFIG_HUGETLB_PAGE` is required by `vmalloc`.
>
> So I'd prefer to address it in a separate follow-up patch
> series.
>
> For the `WARN_ON(!__hugetlb_valid_size(size))` check, I don't
> see anything broken here. Hugetlb only uses sizes registered
> by `hugetlbpage_init()`, which are validated by
> `arch_hugetlb_valid_size()` implemented in
> `arch/arm64/mm/hugetlbpage.c`:
>
> static int __init hugetlbpage_init(void)
> {
> BUILD_BUG_ON(HUGE_MAX_HSTATE < 4);
> if (pud_sect_supported())
> hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
>
> hugetlb_add_hstate(CONT_PMD_SHIFT - PAGE_SHIFT);
> hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
> hugetlb_add_hstate(CONT_PTE_SHIFT - PAGE_SHIFT);
>
> return 0;
> }
> arch_initcall(hugetlbpage_init);
>
> bool __init arch_hugetlb_valid_size(unsigned long size)
> {
> return __hugetlb_valid_size(size);
> }
I'm just pointing out that the defensive checking in __hugetlb_valid_size(),
which should really only warn if something has gone horribly wrong, will
now not detect bogus sizes if the address is aligned to CONT_PTE_SIZE.
Keeping hugetlb and vmalloc separate would avoid this problem.
Will
next prev parent reply other threads:[~2026-08-04 14:40 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 12:08 [PATCH v7 0/7] mm/vmalloc: Speed up ioremap, vmalloc and vmap with contiguous memory Wen Jiang
2026-07-15 12:08 ` [PATCH v7 1/7] arm64/hugetlb: Extend batching of multiple CONT_PTE in a single PTE setup Wen Jiang
2026-07-20 8:16 ` David Hildenbrand (Arm)
2026-07-21 5:31 ` Barry Song
2026-07-28 12:02 ` Will Deacon
2026-07-28 21:47 ` Barry Song
2026-07-29 6:45 ` David Hildenbrand (Arm)
2026-07-29 7:10 ` Barry Song
2026-07-29 7:27 ` David Hildenbrand (Arm)
2026-08-04 14:40 ` Will Deacon [this message]
2026-07-15 12:08 ` [PATCH v7 2/7] arm64/vmalloc: Allow arch_vmap_pte_range_map_size to batch multiple CONT_PTE Wen Jiang
2026-07-21 18:17 ` David Carlier
2026-07-29 3:45 ` Barry Song
2026-07-29 3:57 ` Barry Song
2026-07-29 13:15 ` David CARLIER
2026-07-28 12:08 ` Will Deacon
2026-07-29 4:38 ` Barry Song
2026-07-15 12:08 ` [PATCH v7 3/7] mm/vmalloc: Extract vmap_set_ptes() to consolidate PTE mapping logic Wen Jiang
2026-07-15 12:08 ` [PATCH v7 4/7] mm/vmalloc: Extend page table walk to support larger page_shift sizes and eliminate page table rewalk Wen Jiang
2026-07-15 12:08 ` [PATCH v7 5/7] mm/vmalloc: Extract vm_shift() to consolidate mapping shift selection Wen Jiang
2026-07-16 10:12 ` David Hildenbrand (Arm)
2026-07-20 7:50 ` Dev Jain
2026-07-15 12:08 ` [PATCH v7 6/7] mm/vmalloc: map contiguous pages in batches for vmap() if possible Wen Jiang
2026-07-16 10:57 ` David Hildenbrand (Arm)
2026-07-20 7:50 ` Dev Jain
2026-07-20 16:20 ` Wen Jiang
2026-07-22 8:58 ` Wen Jiang
2026-07-15 12:08 ` [PATCH v7 7/7] mm/vmalloc: align vm_area so vmap() can batch mappings Wen Jiang
2026-07-15 18:37 ` [PATCH v7 0/7] mm/vmalloc: Speed up ioremap, vmalloc and vmap with contiguous memory Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=anH5wnXvAhoLWmH1@willie-the-truck \
--to=will@kernel.org \
--cc=Xueyuan.chen21@gmail.com \
--cc=ajd@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=baohua@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=jiangwen6@xiaomi.com \
--cc=jiangwenxiaomi@gmail.com \
--cc=leo.yan@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=urezki@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox