Re: [PATCH v6 0/6] mm/vmalloc: Speed up ioremap, vmalloc and vmap with contiguous memory
From: Anshuman Khandual
Date: Wed Jul 15 2026 - 00:05:32 EST
On 14/07/26 4:47 PM, Dev Jain wrote:
>
>
> On 14/07/26 2:06 pm, Anshuman Khandual wrote:
>>
>>
>> On 10/07/26 2:24 PM, Wen Jiang wrote:
>>> On Fri, 10 Jul 2026 at 07:08, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>>>>
>>>> On Thu, 9 Jul 2026 15:38:17 +0800 Wen Jiang <jiangwenxiaomi@xxxxxxxxx> wrote:
>>>>
>>>>> This patchset accelerates ioremap, vmalloc, and vmap when the memory
>>>>> is physically fully or partially contiguous.
>>>>
>>>> Thanks, I added this to mm.git's mm-new branch for wider testing.
>>>>
>>>> AI review asked some questions, and some of them are new since the v5
>>>> series:
>>>> https://sashiko.dev/#/patchset/20260709073823.6643-1-jiangwen6@xxxxxxxxxx
>>>
>>> Hi Andrew,
>>>
>>> I've gone through the Sashiko findings:
>>>
>>> - Patch 1 (find_num_contig): Over-interpretation. No new hugetlbfs hstate
>>> is added. The extra sizes are only used by init_mm kernel mappings via.
>>
>> But not sure if that is a right approach. If these multi CONT_PTE
>> sized mappings need to be supported in vmalloc() but without adding
>> corresponding HugeTLB sizes, probably these required helpers could
>> just be factored outside HugeTLB.
>
> The problem is that the existing vmalloc-huge code reuses the hugetlb helpers
> because it is easier that way.
>
> If you really look at it, num_contig_ptes(), set_huge_pte_at() and arch_make_huge_pte()
> do not have anything to do with hugetlbfs, but with huge mappings. It is unfortunate
> that these helpers are sitting in hugetlbpage.c . Really these functions should be
> pulled out of CONFIG_HUGETLBFS and put into some common header - but I can't think
> of a clean solution to this.
>
set_huge_pte_at() and arch_make_huge_pte() are provided by subscribing platforms
to be used in generic HugeTLB. But later these callbacks started getting used in
generic vmalloc() as well. Although arch_vmap_pte_range_map_size() first narrows
down supported size from HugeTLB list. Basically vmalloc huge mapping support is
still a subset of HugeTLB support. Hence we should not add new vmalloc based huge
size support without first adding that up in HugeTLB. Otherwise set_huge_pte_at()
and arch_make_huge_pte() need moved outside generic HugeTLB as well.
> So I think for this series, the least we can do is add a comment to clarify that these
> helpers can be used by non-hugetlbfs mm code to set multiple huge mappings at the PTE level.
For these helpers to be used outside HugeTLB (without prerequisite)
- Move them outside generic HugeTLB
- Drop #ifdef CONFIG_HUGETLB_PAGE in vmalloc.c
Not sure if a comment would be sufficient here.
> >
>>>
>>> - Patch 5/6 (NULL page): Invalid input. vmap() expects a fully populated
>>> array of valid struct page pointers.
>>>
>>> - Patch 6 (32-bit count << PAGE_SHIFT overflow): Pre-existing. This was
>>> already discussed in the V3 thread, and a separate fix was proposed
>>> there.
>>>
>>> Thanks,
>>> Wen
>>
>