Message ID | 20240318200404.448346-1-peterx@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | mm/treewide: Remove pXd_huge() API | expand |
> On Mar 19, 2024, at 04:03, peterx@redhat.com wrote: > > From: Peter Xu <peterx@redhat.com> > > Please refer to the previous patch on the reasoning for x86. Now sparc is > the only architecture that will allow swap entries to be reported as > pXd_huge(). After this patch, all architectures should forbid swap entries > in pXd_huge(). > > Cc: David S. Miller <davem@davemloft.net> > Cc: Andreas Larsson <andreas@gaisler.com> > Cc: sparclinux@vger.kernel.org > Signed-off-by: Peter Xu <peterx@redhat.com> > --- > arch/sparc/mm/hugetlbpage.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c > index b432500c13a5..d31c2cec35c9 100644 > --- a/arch/sparc/mm/hugetlbpage.c > +++ b/arch/sparc/mm/hugetlbpage.c > @@ -409,14 +409,12 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, > > int pmd_huge(pmd_t pmd) > { > - return !pmd_none(pmd) && > - (pmd_val(pmd) & (_PAGE_VALID|_PAGE_PMD_HUGE)) != _PAGE_VALID; > + return pmd_leaf(pmd);; There is a redundant semicolon in the end. Thanks. > } > > int pud_huge(pud_t pud) > { > - return !pud_none(pud) && > - (pud_val(pud) & (_PAGE_VALID|_PAGE_PUD_HUGE)) != _PAGE_VALID; > + return pud_leaf(pud); > } > > static void hugetlb_free_pte_range(struct mmu_gather *tlb, pmd_t *pmd, > -- > 2.44.0 >
On Tue, Mar 19, 2024 at 12:25:39PM +0800, Muchun Song wrote: > > @@ -409,14 +409,12 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, > > > > int pmd_huge(pmd_t pmd) > > { > > - return !pmd_none(pmd) && > > - (pmd_val(pmd) & (_PAGE_VALID|_PAGE_PMD_HUGE)) != _PAGE_VALID; > > + return pmd_leaf(pmd);; > > There is a redundant semicolon in the end. Will touch it up, thanks. PS: This will be dropped as a whole in patch 12.
Le 18/03/2024 à 21:04, peterx@redhat.com a écrit : > From: Peter Xu <peterx@redhat.com> > > This API is not used anymore, drop it for the whole tree. Some documentation remain in v6.10-rc1: $ git grep -w p.d_huge Documentation/mm/arch_pgtable_helpers.rst:| pmd_huge | Tests a HugeTLB mapped PMD | Documentation/mm/arch_pgtable_helpers.rst:| pud_huge | Tests a HugeTLB mapped PUD | arch/x86/mm/pat/set_memory.c: * otherwise pmd_present/pmd_huge will return true Christophe
On Mon, May 27, 2024 at 06:03:30AM +0000, Christophe Leroy wrote: > > > Le 18/03/2024 à 21:04, peterx@redhat.com a écrit : > > From: Peter Xu <peterx@redhat.com> > > > > This API is not used anymore, drop it for the whole tree. > > Some documentation remain in v6.10-rc1: > > $ git grep -w p.d_huge > Documentation/mm/arch_pgtable_helpers.rst:| pmd_huge | > Tests a HugeTLB mapped PMD | > Documentation/mm/arch_pgtable_helpers.rst:| pud_huge | > Tests a HugeTLB mapped PUD | > arch/x86/mm/pat/set_memory.c: * otherwise > pmd_present/pmd_huge will return true True, I'll send a patch, thanks.
From: Peter Xu <peterx@redhat.com> [based on akpm/mm-unstable commit b66d4391d8fe, March 18th] v2: - Add a patch to cleanup ARM's pmd_thp_or_huge [Christophe] - Enhance commit message for PowerPC patch on hugepd [Christophe] v1: https://lore.kernel.org/r/20240313214719.253873-1-peterx@redhat.com In previous work [1], we removed the pXd_large() API, which is arch specific. This patchset further removes the hugetlb pXd_huge() API. Hugetlb was never special on creating huge mappings when compared with other huge mappings. Having a standalone API just to detect such pgtable entries is more or less redundant, especially after the pXd_leaf() API set is introduced with/without CONFIG_HUGETLB_PAGE. When looking at this problem, a few issues are also exposed that we don't have a clear definition of the *_huge() variance API. This patchset started by cleaning these issues first, then replace all *_huge() users to use *_leaf(), then drop all *_huge() code. On x86/sparc, swap entries will be reported "true" in pXd_huge(), while for all the rest archs they're reported "false" instead. This part is done in patch 1-5, in which I suspect patch 1 can be seen as a bug fix, but I'll leave that to hmm experts to decide. Besides, there are three archs (arm, arm64, powerpc) that have slightly different definitions between the *_huge() v.s. *_leaf() variances. I tackled them separately so that it'll be easier for arch experts to chim in when necessary. This part is done in patch 6-9. The final patches 10-14 do the rest on the final removal, since *_leaf() will be the ultimate API in the future, and we seem to have quite some confusions on how *_huge() APIs can be defined, provide a rich comment for *_leaf() API set to define them properly to avoid future misuse, and hopefully that'll also help new archs to start support huge mappings and avoid traps (like either swap entries, or PROT_NONE entry checks). The whole series is lightly tested on x86 and arm64. [1] https://lore.kernel.org/r/20240305043750.93762-1-peterx@redhat.com Peter Xu (14): mm/hmm: Process pud swap entry without pud_huge() mm/gup: Cache p4d in follow_p4d_mask() mm/gup: Check p4d presence before going on mm/x86: Change pXd_huge() behavior to exclude swap entries mm/sparc: Change pXd_huge() behavior to exclude swap entries mm/arm: Use macros to define pmd/pud helpers mm/arm: Redefine pmd_huge() with pmd_leaf() mm/arm64: Merge pXd_huge() and pXd_leaf() definitions mm/powerpc: Redefine pXd_huge() with pXd_leaf() mm/gup: Merge pXd huge mapping checks mm/treewide: Replace pXd_huge() with pXd_leaf() mm/treewide: Remove pXd_huge() mm/arm: Remove pmd_thp_or_huge() mm: Document pXd_leaf() API arch/arm/include/asm/pgtable-2level.h | 5 ++- arch/arm/include/asm/pgtable-3level-hwdef.h | 1 + arch/arm/include/asm/pgtable-3level.h | 5 ++- arch/arm/lib/uaccess_with_memcpy.c | 4 +-- arch/arm/mm/Makefile | 1 - arch/arm/mm/hugetlbpage.c | 34 ------------------- arch/arm64/include/asm/pgtable.h | 6 ++-- arch/arm64/mm/hugetlbpage.c | 18 ++-------- arch/loongarch/mm/hugetlbpage.c | 12 +------ arch/mips/include/asm/pgtable-32.h | 2 +- arch/mips/include/asm/pgtable-64.h | 2 +- arch/mips/mm/hugetlbpage.c | 10 ------ arch/mips/mm/tlb-r4k.c | 2 +- arch/parisc/mm/hugetlbpage.c | 11 ------ .../include/asm/book3s/64/pgtable-4k.h | 20 ----------- .../include/asm/book3s/64/pgtable-64k.h | 25 -------------- arch/powerpc/include/asm/book3s/64/pgtable.h | 27 +++++++-------- arch/powerpc/include/asm/nohash/pgtable.h | 10 ------ arch/powerpc/mm/pgtable_64.c | 6 ++-- arch/riscv/mm/hugetlbpage.c | 10 ------ arch/s390/mm/hugetlbpage.c | 10 ------ arch/sh/mm/hugetlbpage.c | 10 ------ arch/sparc/mm/hugetlbpage.c | 12 ------- arch/x86/mm/hugetlbpage.c | 26 -------------- arch/x86/mm/pgtable.c | 4 +-- include/linux/hugetlb.h | 24 ------------- include/linux/pgtable.h | 24 ++++++++++--- mm/gup.c | 24 ++++++------- mm/hmm.c | 9 ++--- mm/memory.c | 2 +- 30 files changed, 68 insertions(+), 288 deletions(-) delete mode 100644 arch/arm/mm/hugetlbpage.c