From: "Bang Li" <libang.li@antgroup.com>
To: Ryan Roberts <ryan.roberts@arm.com>,
akpm@linux-foundation.org, chenhuacai@kernel.org,
tsbogend@alpha.franken.de, paul.walmsley@sifive.com,
palmer@dabbelt.com, chris@zankel.net, jcmvbkbc@gmail.com
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
loongarch@lists.linux.dev, linux-riscv@lists.infradead.org,
david@redhat.com, ioworker0@gmail.com, libang.linux@gmail.com,
baolin.wang@linux.alibaba.com
Subject: Re: [PATCH v2 5/5] mm: Add update_mmu_tlb_range()
Date: Sat, 11 May 2024 00:36:35 +0800 [thread overview]
Message-ID: <41acfd35-69b4-41bc-a45b-4426d5110077@antgroup.com> (raw)
In-Reply-To: <eb41fcb3-7207-40a8-9b49-0825a2e74e86@arm.com>
Hi Ryan,
Thanks for you review!
On 2024/5/10 17:05, Ryan Roberts wrote:
> On 06/05/2024 16:51, Bang Li wrote:
>> After the commit 19eaf44954df ("mm: thp: support allocation of anonymous
>> multi-size THP"), it may need to batch update tlb of an address range
>> through the update_mmu_tlb function. We can simplify this operation by
>> adding the update_mmu_tlb_range function, which may also reduce the
>> execution of some unnecessary code in some architectures.
>>
>> Signed-off-by: Bang Li <libang.li@antgroup.com>
>> ---
>> include/linux/pgtable.h | 8 ++++++++
>> mm/memory.c | 4 +---
>> 2 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
>> index 18019f037bae..869bfe6054f1 100644
>> --- a/include/linux/pgtable.h
>> +++ b/include/linux/pgtable.h
>> @@ -737,6 +737,14 @@ static inline void update_mmu_tlb(struct vm_area_struct *vma,
>> #define __HAVE_ARCH_UPDATE_MMU_TLB
>> #endif
>
> Given you are implementing update_mmu_tlb_range() in all the arches that
> currently override update_mmu_tlb() I wonder if it would be cleaner to remove
> update_mmu_tlb() from all those arches, and define generically, removing the
> ability for arches to override it:
>
> static inline void update_mmu_tlb(struct vm_area_struct *vma,
> unsigned long address, pte_t *ptep)
> {
> update_mmu_tlb_range(vma, address, ptep, 1);
> }
Agreed! Thank you for your suggestion, I will modify it in the next version.
>
>>
>> +#ifndef __HAVE_ARCH_UPDATE_MMU_TLB_RANGE
>> +static inline void update_mmu_tlb_range(struct vm_area_struct *vma,
>> + unsigned long address, pte_t *ptep, unsigned int nr)
>> +{
>> +}
>> +#define __HAVE_ARCH_UPDATE_MMU_TLB_RANGE
>> +#endif
>
> Then you could use the modern override scheme as Lance suggested and you won't
> have any confusion with __HAVE_ARCH_UPDATE_MMU_TLB because it won't exist anymore.
Yes, use update_mmu_tlb_range to implement update_mmu_tlb, we only need
to define the update_mmu_tlb_range macro.
>
>> +
>> /*
>> * Some architectures may be able to avoid expensive synchronization
>> * primitives when modifications are made to PTE's which are already
>> diff --git a/mm/memory.c b/mm/memory.c
>> index eea6e4984eae..2d53e29cf76e 100644
>> --- a/mm/memory.c
>> +++ b/mm/memory.c
>> @@ -4421,7 +4421,6 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
>> vm_fault_t ret = 0;
>> int nr_pages = 1;
>> pte_t entry;
>> - int i;
>>
>> /* File mapping without ->vm_ops ? */
>> if (vma->vm_flags & VM_SHARED)
>> @@ -4491,8 +4490,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
>> update_mmu_tlb(vma, addr, vmf->pte);
>> goto release;
>> } else if (nr_pages > 1 && !pte_range_none(vmf->pte, nr_pages)) {
>> - for (i = 0; i < nr_pages; i++)
>> - update_mmu_tlb(vma, addr + PAGE_SIZE * i, vmf->pte + i);
>> + update_mmu_tlb_range(vma, addr, vmf->pte, nr_pages);
>
> I certainly agree that this will be a useful helper to have. I expect there will
> be more users in future.
Thank you for your affirmation. Baolin’s "add mTHP support for anonymous
shmem" series[1] can also use this function to simplify the code.
[1]
https://lore.kernel.org/linux-mm/cover.1714978902.git.baolin.wang@linux.alibaba.com/
Thanks,
Bang
>
>> goto release;
>> }
>>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: "Bang Li" <libang.li@antgroup.com>
To: Ryan Roberts <ryan.roberts@arm.com>,
akpm@linux-foundation.org, chenhuacai@kernel.org,
tsbogend@alpha.franken.de, paul.walmsley@sifive.com,
palmer@dabbelt.com, chris@zankel.net, jcmvbkbc@gmail.com
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
loongarch@lists.linux.dev, linux-riscv@lists.infradead.org,
david@redhat.com, ioworker0@gmail.com, libang.linux@gmail.com,
baolin.wang@linux.alibaba.com
Subject: Re: [PATCH v2 5/5] mm: Add update_mmu_tlb_range()
Date: Sat, 11 May 2024 00:36:35 +0800 [thread overview]
Message-ID: <41acfd35-69b4-41bc-a45b-4426d5110077@antgroup.com> (raw)
In-Reply-To: <eb41fcb3-7207-40a8-9b49-0825a2e74e86@arm.com>
Hi Ryan,
Thanks for you review!
On 2024/5/10 17:05, Ryan Roberts wrote:
> On 06/05/2024 16:51, Bang Li wrote:
>> After the commit 19eaf44954df ("mm: thp: support allocation of anonymous
>> multi-size THP"), it may need to batch update tlb of an address range
>> through the update_mmu_tlb function. We can simplify this operation by
>> adding the update_mmu_tlb_range function, which may also reduce the
>> execution of some unnecessary code in some architectures.
>>
>> Signed-off-by: Bang Li <libang.li@antgroup.com>
>> ---
>> include/linux/pgtable.h | 8 ++++++++
>> mm/memory.c | 4 +---
>> 2 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
>> index 18019f037bae..869bfe6054f1 100644
>> --- a/include/linux/pgtable.h
>> +++ b/include/linux/pgtable.h
>> @@ -737,6 +737,14 @@ static inline void update_mmu_tlb(struct vm_area_struct *vma,
>> #define __HAVE_ARCH_UPDATE_MMU_TLB
>> #endif
>
> Given you are implementing update_mmu_tlb_range() in all the arches that
> currently override update_mmu_tlb() I wonder if it would be cleaner to remove
> update_mmu_tlb() from all those arches, and define generically, removing the
> ability for arches to override it:
>
> static inline void update_mmu_tlb(struct vm_area_struct *vma,
> unsigned long address, pte_t *ptep)
> {
> update_mmu_tlb_range(vma, address, ptep, 1);
> }
Agreed! Thank you for your suggestion, I will modify it in the next version.
>
>>
>> +#ifndef __HAVE_ARCH_UPDATE_MMU_TLB_RANGE
>> +static inline void update_mmu_tlb_range(struct vm_area_struct *vma,
>> + unsigned long address, pte_t *ptep, unsigned int nr)
>> +{
>> +}
>> +#define __HAVE_ARCH_UPDATE_MMU_TLB_RANGE
>> +#endif
>
> Then you could use the modern override scheme as Lance suggested and you won't
> have any confusion with __HAVE_ARCH_UPDATE_MMU_TLB because it won't exist anymore.
Yes, use update_mmu_tlb_range to implement update_mmu_tlb, we only need
to define the update_mmu_tlb_range macro.
>
>> +
>> /*
>> * Some architectures may be able to avoid expensive synchronization
>> * primitives when modifications are made to PTE's which are already
>> diff --git a/mm/memory.c b/mm/memory.c
>> index eea6e4984eae..2d53e29cf76e 100644
>> --- a/mm/memory.c
>> +++ b/mm/memory.c
>> @@ -4421,7 +4421,6 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
>> vm_fault_t ret = 0;
>> int nr_pages = 1;
>> pte_t entry;
>> - int i;
>>
>> /* File mapping without ->vm_ops ? */
>> if (vma->vm_flags & VM_SHARED)
>> @@ -4491,8 +4490,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
>> update_mmu_tlb(vma, addr, vmf->pte);
>> goto release;
>> } else if (nr_pages > 1 && !pte_range_none(vmf->pte, nr_pages)) {
>> - for (i = 0; i < nr_pages; i++)
>> - update_mmu_tlb(vma, addr + PAGE_SIZE * i, vmf->pte + i);
>> + update_mmu_tlb_range(vma, addr, vmf->pte, nr_pages);
>
> I certainly agree that this will be a useful helper to have. I expect there will
> be more users in future.
Thank you for your affirmation. Baolin’s "add mTHP support for anonymous
shmem" series[1] can also use this function to simplify the code.
[1]
https://lore.kernel.org/linux-mm/cover.1714978902.git.baolin.wang@linux.alibaba.com/
Thanks,
Bang
>
>> goto release;
>> }
>>
next prev parent reply other threads:[~2024-05-10 16:37 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-06 15:51 [PATCH v2 0/5] Add update_mmu_tlb_range() to simplify code Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-06 15:51 ` [PATCH v2 1/5] LoongArch: Add update_mmu_tlb_range() Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-06 15:51 ` [PATCH v2 2/5] mips: " Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-06 15:51 ` [PATCH v2 3/5] riscv: " Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-07 5:35 ` Alexandre Ghiti
2024-05-07 5:35 ` Alexandre Ghiti
2024-05-10 2:18 ` Bang Li
2024-05-10 2:18 ` Bang Li
2024-05-06 15:51 ` [PATCH v2 4/5] xtensa: " Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-06 15:51 ` [PATCH v2 5/5] mm: " Bang Li
2024-05-06 15:51 ` Bang Li
2024-05-06 16:07 ` Lance Yang
2024-05-06 16:07 ` Lance Yang
2024-05-07 3:26 ` Bang Li
2024-05-07 3:26 ` Bang Li
2024-05-10 9:05 ` Ryan Roberts
2024-05-10 9:05 ` Ryan Roberts
2024-05-10 9:19 ` Lance Yang
2024-05-10 9:19 ` Lance Yang
2024-05-10 16:36 ` Bang Li [this message]
2024-05-10 16:36 ` Bang Li
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=41acfd35-69b4-41bc-a45b-4426d5110077@antgroup.com \
--to=libang.li@antgroup.com \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=chenhuacai@kernel.org \
--cc=chris@zankel.net \
--cc=david@redhat.com \
--cc=ioworker0@gmail.com \
--cc=jcmvbkbc@gmail.com \
--cc=libang.linux@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-riscv@lists.infradead.org \
--cc=loongarch@lists.linux.dev \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=ryan.roberts@arm.com \
--cc=tsbogend@alpha.franken.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.