On 01/07/2024 09:48, David Hildenbrand wrote: > On 01.07.24 10:40, Ryan Roberts wrote: >> On 01/07/2024 09:33, Baolin Wang wrote: >>> >>> >>> On 2024/7/1 15:55, Ryan Roberts wrote: >>>> On 28/06/2024 11:49, Bang Li wrote: >>>>> After the commit 7fb1b252afb5 ("mm: shmem: add mTHP support for >>>>> anonymous shmem"), we can configure different policies through >>>>> the multi-size THP sysfs interface for anonymous shmem. But >>>>> currently "THPeligible" indicates only whether the mapping is >>>>> eligible for allocating THP-pages as well as the THP is PMD >>>>> mappable or not for anonymous shmem, we need to support semantics >>>>> for mTHP with anonymous shmem similar to those for mTHP with >>>>> anonymous memory. >>>>> >>>>> Signed-off-by: Bang Li <libang.li@xxxxxxxxxxxx> >>>>> --- >>>>> fs/proc/task_mmu.c | 10 +++++++--- >>>>> include/linux/huge_mm.h | 11 +++++++++++ >>>>> mm/shmem.c | 9 +-------- >>>>> 3 files changed, 19 insertions(+), 11 deletions(-) >>>>> >>>>> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c >>>>> index 93fb2c61b154..09b5db356886 100644 >>>>> --- a/fs/proc/task_mmu.c >>>>> +++ b/fs/proc/task_mmu.c >>>>> @@ -870,6 +870,7 @@ static int show_smap(struct seq_file *m, void *v) >>>>> { >>>>> struct vm_area_struct *vma = v; >>>>> struct mem_size_stats mss = {}; >>>>> + bool thp_eligible; >>>>> smap_gather_stats(vma, &mss, 0); >>>>> @@ -882,9 +883,12 @@ static int show_smap(struct seq_file *m, void *v) >>>>> __show_smap(m, &mss, false); >>>>> - seq_printf(m, "THPeligible: %8u\n", >>>>> - !!thp_vma_allowable_orders(vma, vma->vm_flags, >>>>> - TVA_SMAPS | TVA_ENFORCE_SYSFS, THP_ORDERS_ALL)); >>>>> + thp_eligible = !!thp_vma_allowable_orders(vma, vma->vm_flags, >>>>> + TVA_SMAPS | TVA_ENFORCE_SYSFS, THP_ORDERS_ALL); >>>>> + if (vma_is_anon_shmem(vma)) >>>>> + thp_eligible = >>>>> !!shmem_allowable_huge_orders(file_inode(vma->vm_file), >>>>> + vma, vma->vm_pgoff, thp_eligible); >>>> >>>> Afraid I haven't been following the shmem mTHP support work as much as I would >>>> have liked, but is there a reason why we need a separate function for shmem? >>> >>> Since shmem_allowable_huge_orders() only uses shmem specific logic to determine >>> if huge orders are allowable, there is no need to complicate the >>> thp_vma_allowable_orders() function by adding more shmem related logic, making >>> it more bloated. In my view, providing a dedicated helper >>> shmem_allowable_huge_orders(), specifically for shmem, simplifies the logic. >> >> My point was really that a single interface (thp_vma_allowable_orders) should be >> used to get this information. I have no strong opinon on how the implementation >> of that interface looks. What you suggest below seems perfectly reasonable to me. > > Right. thp_vma_allowable_orders() might require some care as discussed in other > context (cleanly separate dax and shmem handling/orders). But that would be > follow-up cleanups. Are you planning to do that, or do you want me to send a patch?