* [PATCH 0/3] mm/hugetlb: Add some new arch enabling macros @ 2020-04-14 11:44 Anshuman Khandual 2020-04-14 11:44 ` [PATCH 1/3] arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET Anshuman Khandual ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Anshuman Khandual @ 2020-04-14 11:44 UTC (permalink / raw) To: linux-mm Cc: Anshuman Khandual, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel This series adds two macros which platforms can enable to override generic fallback definitions. Before that it drops __HAVE_ARCH_HUGE_PTEP_GET from arm64 platform. 1. HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE - is_hugepage_only_range() 2. HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS - arch_clear_hugepage_flags() This has been boot tested on arm64 and x86 platforms but built tested on some more platforms including the changed ones here. This series applies on v5.7-rc1. After this arm (32 bit) remains the sole platform defining it's own huge_ptep_get() via __HAVE_ARCH_HUGE_PTEP_GET. Cc: Russell King <linux@armlinux.org.uk> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Helge Deller <deller@gmx.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: x86@kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-ia64@vger.kernel.org Cc: linux-mips@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-arch@vger.kernel.org Cc: linux-kernel@vger.kernel.org Anshuman Khandual (3): arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET mm/hugetlb: Introduce HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS arch/arm/include/asm/hugetlb.h | 7 +------ arch/arm64/include/asm/hugetlb.h | 13 +------------ arch/ia64/include/asm/hugetlb.h | 5 +---- arch/mips/include/asm/hugetlb.h | 11 ----------- arch/parisc/include/asm/hugetlb.h | 10 ---------- arch/powerpc/include/asm/hugetlb.h | 5 +---- arch/riscv/include/asm/hugetlb.h | 10 ---------- arch/s390/include/asm/hugetlb.h | 8 +------- arch/sh/include/asm/hugetlb.h | 7 +------ arch/sparc/include/asm/hugetlb.h | 10 ---------- arch/x86/include/asm/hugetlb.h | 10 ---------- include/linux/hugetlb.h | 12 ++++++++++++ 12 files changed, 18 insertions(+), 90 deletions(-) -- 2.20.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET 2020-04-14 11:44 [PATCH 0/3] mm/hugetlb: Add some new arch enabling macros Anshuman Khandual @ 2020-04-14 11:44 ` Anshuman Khandual 2020-04-14 11:44 ` [PATCH 2/3] mm/hugetlb: Introduce HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE Anshuman Khandual 2020-04-14 11:44 ` [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS Anshuman Khandual 2 siblings, 0 replies; 9+ messages in thread From: Anshuman Khandual @ 2020-04-14 11:44 UTC (permalink / raw) To: linux-mm Cc: Anshuman Khandual, Catalin Marinas, Will Deacon, Andrew Morton, linux-arm-kernel, linux-kernel Platform specific huge_ptep_get() is required only when fetching the huge PTE involves more than just dereferencing the page table pointer. This is not the case on arm64 platform. Hence huge_ptep_pte() can be dropped along with it's __HAVE_ARCH_HUGE_PTEP_GET subscription. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/include/asm/hugetlb.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 2eb6c234d594..b88878ddc88b 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -17,12 +17,6 @@ extern bool arch_hugetlb_migration_supported(struct hstate *h); #endif -#define __HAVE_ARCH_HUGE_PTEP_GET -static inline pte_t huge_ptep_get(pte_t *ptep) -{ - return READ_ONCE(*ptep); -} - static inline int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, unsigned long len) { -- 2.20.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] mm/hugetlb: Introduce HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE 2020-04-14 11:44 [PATCH 0/3] mm/hugetlb: Add some new arch enabling macros Anshuman Khandual 2020-04-14 11:44 ` [PATCH 1/3] arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET Anshuman Khandual @ 2020-04-14 11:44 ` Anshuman Khandual 2020-04-14 11:44 ` [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS Anshuman Khandual 2 siblings, 0 replies; 9+ messages in thread From: Anshuman Khandual @ 2020-04-14 11:44 UTC (permalink / raw) To: linux-mm Cc: Anshuman Khandual, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel There are multiple similar definitions for is_hugepage_only_range() across platforms. This introduces HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE for platforms that need to define their own is_hugepage_only_range() but otherwise there is a generic fallback definition for others to use. This help reduce code duplication. Cc: Russell King <linux@armlinux.org.uk> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Helge Deller <deller@gmx.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: x86@kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-ia64@vger.kernel.org Cc: linux-mips@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-arch@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm/include/asm/hugetlb.h | 6 ------ arch/arm64/include/asm/hugetlb.h | 6 ------ arch/ia64/include/asm/hugetlb.h | 1 + arch/mips/include/asm/hugetlb.h | 7 ------- arch/parisc/include/asm/hugetlb.h | 6 ------ arch/powerpc/include/asm/hugetlb.h | 1 + arch/riscv/include/asm/hugetlb.h | 6 ------ arch/s390/include/asm/hugetlb.h | 7 ------- arch/sh/include/asm/hugetlb.h | 6 ------ arch/sparc/include/asm/hugetlb.h | 6 ------ arch/x86/include/asm/hugetlb.h | 6 ------ include/linux/hugetlb.h | 8 ++++++++ 12 files changed, 10 insertions(+), 56 deletions(-) diff --git a/arch/arm/include/asm/hugetlb.h b/arch/arm/include/asm/hugetlb.h index 318dcf5921ab..9ecd516d1ff7 100644 --- a/arch/arm/include/asm/hugetlb.h +++ b/arch/arm/include/asm/hugetlb.h @@ -14,12 +14,6 @@ #include <asm/hugetlb-3level.h> #include <asm-generic/hugetlb.h> -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, unsigned long len) -{ - return 0; -} - static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_dcache_clean, &page->flags); diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index b88878ddc88b..8f58e052697a 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -17,12 +17,6 @@ extern bool arch_hugetlb_migration_supported(struct hstate *h); #endif -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, unsigned long len) -{ - return 0; -} - static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_dcache_clean, &page->flags); diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index 36cc0396b214..f17c1e228045 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -13,6 +13,7 @@ void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, int prepare_hugepage_range(struct file *file, unsigned long addr, unsigned long len); +#define HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE static inline int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, unsigned long len) diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index 425bb6fc3bda..8b201e281f67 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -11,13 +11,6 @@ #include <asm/page.h> -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) -{ - return 0; -} - #define __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE static inline int prepare_hugepage_range(struct file *file, unsigned long addr, diff --git a/arch/parisc/include/asm/hugetlb.h b/arch/parisc/include/asm/hugetlb.h index 7cb595dcb7d7..411d9d867baa 100644 --- a/arch/parisc/include/asm/hugetlb.h +++ b/arch/parisc/include/asm/hugetlb.h @@ -12,12 +12,6 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) { - return 0; -} - /* * If the arch doesn't supply something else, assume that hugepage * size aligned regions are ok without further preparation. diff --git a/arch/powerpc/include/asm/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h index bd6504c28c2f..9dd50e1e4fe5 100644 --- a/arch/powerpc/include/asm/hugetlb.h +++ b/arch/powerpc/include/asm/hugetlb.h @@ -22,6 +22,7 @@ void flush_dcache_icache_hugepage(struct page *page); int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, unsigned long len); +#define HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE static inline int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, unsigned long len) diff --git a/arch/riscv/include/asm/hugetlb.h b/arch/riscv/include/asm/hugetlb.h index 728a5db66597..866f6ae6467c 100644 --- a/arch/riscv/include/asm/hugetlb.h +++ b/arch/riscv/include/asm/hugetlb.h @@ -5,12 +5,6 @@ #include <asm-generic/hugetlb.h> #include <asm/page.h> -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) { - return 0; -} - static inline void arch_clear_hugepage_flags(struct page *page) { } diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h index de8f0bf5f238..7d27ea96ec2f 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -21,13 +21,6 @@ pte_t huge_ptep_get(pte_t *ptep); pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); -static inline bool is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) -{ - return false; -} - /* * If the arch doesn't supply something else, assume that hugepage * size aligned regions are ok without further preparation. diff --git a/arch/sh/include/asm/hugetlb.h b/arch/sh/include/asm/hugetlb.h index 6f025fe18146..536ad2cb8aa4 100644 --- a/arch/sh/include/asm/hugetlb.h +++ b/arch/sh/include/asm/hugetlb.h @@ -5,12 +5,6 @@ #include <asm/cacheflush.h> #include <asm/page.h> -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) { - return 0; -} - /* * If the arch doesn't supply something else, assume that hugepage * size aligned regions are ok without further preparation. diff --git a/arch/sparc/include/asm/hugetlb.h b/arch/sparc/include/asm/hugetlb.h index 3963f80d1cb3..a056fe1119f5 100644 --- a/arch/sparc/include/asm/hugetlb.h +++ b/arch/sparc/include/asm/hugetlb.h @@ -20,12 +20,6 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) { - return 0; -} - #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) diff --git a/arch/x86/include/asm/hugetlb.h b/arch/x86/include/asm/hugetlb.h index f65cfb48cfdd..cc98f79074d0 100644 --- a/arch/x86/include/asm/hugetlb.h +++ b/arch/x86/include/asm/hugetlb.h @@ -7,12 +7,6 @@ #define hugepages_supported() boot_cpu_has(X86_FEATURE_PSE) -static inline int is_hugepage_only_range(struct mm_struct *mm, - unsigned long addr, - unsigned long len) { - return 0; -} - static inline void arch_clear_hugepage_flags(struct page *page) { } diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 1e897e4168ac..2342e5a8d1dd 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -536,6 +536,14 @@ static inline unsigned int blocks_per_huge_page(struct hstate *h) #include <asm/hugetlb.h> +#ifndef HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE +static inline int is_hugepage_only_range(struct mm_struct *mm, + unsigned long addr, unsigned long len) +{ + return 0; +} +#endif + #ifndef arch_make_huge_pte static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, struct page *page, int writable) -- 2.20.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-04-14 11:44 [PATCH 0/3] mm/hugetlb: Add some new arch enabling macros Anshuman Khandual 2020-04-14 11:44 ` [PATCH 1/3] arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET Anshuman Khandual 2020-04-14 11:44 ` [PATCH 2/3] mm/hugetlb: Introduce HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE Anshuman Khandual @ 2020-04-14 11:44 ` Anshuman Khandual 2020-04-26 0:55 ` Andrew Morton 2 siblings, 1 reply; 9+ messages in thread From: Anshuman Khandual @ 2020-04-14 11:44 UTC (permalink / raw) To: linux-mm Cc: Anshuman Khandual, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel There are multiple similar definitions for arch_clear_hugepage_flags() on various platforms. This introduces HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS for those platforms that need to define their own arch_clear_hugepage_flags() while also providing a generic fallback definition for others to use. This help reduce code duplication. Cc: Russell King <linux@armlinux.org.uk> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Helge Deller <deller@gmx.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: x86@kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-ia64@vger.kernel.org Cc: linux-mips@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-riscv@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: sparclinux@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-arch@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm/include/asm/hugetlb.h | 1 + arch/arm64/include/asm/hugetlb.h | 1 + arch/ia64/include/asm/hugetlb.h | 4 ---- arch/mips/include/asm/hugetlb.h | 4 ---- arch/parisc/include/asm/hugetlb.h | 4 ---- arch/powerpc/include/asm/hugetlb.h | 4 ---- arch/riscv/include/asm/hugetlb.h | 4 ---- arch/s390/include/asm/hugetlb.h | 1 + arch/sh/include/asm/hugetlb.h | 1 + arch/sparc/include/asm/hugetlb.h | 4 ---- arch/x86/include/asm/hugetlb.h | 4 ---- include/linux/hugetlb.h | 4 ++++ 12 files changed, 8 insertions(+), 28 deletions(-) diff --git a/arch/arm/include/asm/hugetlb.h b/arch/arm/include/asm/hugetlb.h index 9ecd516d1ff7..7107c1e6f020 100644 --- a/arch/arm/include/asm/hugetlb.h +++ b/arch/arm/include/asm/hugetlb.h @@ -14,6 +14,7 @@ #include <asm/hugetlb-3level.h> #include <asm-generic/hugetlb.h> +#define HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_dcache_clean, &page->flags); diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 8f58e052697a..5369cf26a05d 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -17,6 +17,7 @@ extern bool arch_hugetlb_migration_supported(struct hstate *h); #endif +#define HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_dcache_clean, &page->flags); diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index f17c1e228045..2ecff18a32e5 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -28,10 +28,6 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #include <asm-generic/hugetlb.h> #endif /* _ASM_IA64_HUGETLB_H */ diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index 8b201e281f67..10e3be870df7 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -75,10 +75,6 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, return changed; } -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #include <asm-generic/hugetlb.h> #endif /* __ASM_HUGETLB_H */ diff --git a/arch/parisc/include/asm/hugetlb.h b/arch/parisc/include/asm/hugetlb.h index 411d9d867baa..a69cf9efb0c1 100644 --- a/arch/parisc/include/asm/hugetlb.h +++ b/arch/parisc/include/asm/hugetlb.h @@ -42,10 +42,6 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty); -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #include <asm-generic/hugetlb.h> #endif /* _ASM_PARISC64_HUGETLB_H */ diff --git a/arch/powerpc/include/asm/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h index 9dd50e1e4fe5..d259e056e6cf 100644 --- a/arch/powerpc/include/asm/hugetlb.h +++ b/arch/powerpc/include/asm/hugetlb.h @@ -61,10 +61,6 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty); -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #include <asm-generic/hugetlb.h> #else /* ! CONFIG_HUGETLB_PAGE */ diff --git a/arch/riscv/include/asm/hugetlb.h b/arch/riscv/include/asm/hugetlb.h index 866f6ae6467c..a5c2ca1d1cd8 100644 --- a/arch/riscv/include/asm/hugetlb.h +++ b/arch/riscv/include/asm/hugetlb.h @@ -5,8 +5,4 @@ #include <asm-generic/hugetlb.h> #include <asm/page.h> -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #endif /* _ASM_RISCV_HUGETLB_H */ diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h index 7d27ea96ec2f..9f067a66609b 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -35,6 +35,7 @@ static inline int prepare_hugepage_range(struct file *file, return 0; } +#define HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_arch_1, &page->flags); diff --git a/arch/sh/include/asm/hugetlb.h b/arch/sh/include/asm/hugetlb.h index 536ad2cb8aa4..869b5a947f07 100644 --- a/arch/sh/include/asm/hugetlb.h +++ b/arch/sh/include/asm/hugetlb.h @@ -26,6 +26,7 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } +#define HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS static inline void arch_clear_hugepage_flags(struct page *page) { clear_bit(PG_dcache_clean, &page->flags); diff --git a/arch/sparc/include/asm/hugetlb.h b/arch/sparc/include/asm/hugetlb.h index a056fe1119f5..53838a173f62 100644 --- a/arch/sparc/include/asm/hugetlb.h +++ b/arch/sparc/include/asm/hugetlb.h @@ -47,10 +47,6 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, return changed; } -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end, unsigned long floor, diff --git a/arch/x86/include/asm/hugetlb.h b/arch/x86/include/asm/hugetlb.h index cc98f79074d0..1721b1aadeb1 100644 --- a/arch/x86/include/asm/hugetlb.h +++ b/arch/x86/include/asm/hugetlb.h @@ -7,8 +7,4 @@ #define hugepages_supported() boot_cpu_has(X86_FEATURE_PSE) -static inline void arch_clear_hugepage_flags(struct page *page) -{ -} - #endif /* _ASM_X86_HUGETLB_H */ diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 2342e5a8d1dd..359cfa1b6f54 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -544,6 +544,10 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, } #endif +#ifndef HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS +static inline void arch_clear_hugepage_flags(struct page *page) { } +#endif + #ifndef arch_make_huge_pte static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, struct page *page, int writable) -- 2.20.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-04-14 11:44 ` [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS Anshuman Khandual @ 2020-04-26 0:55 ` Andrew Morton 2020-04-26 2:43 ` Anshuman Khandual 0 siblings, 1 reply; 9+ messages in thread From: Andrew Morton @ 2020-04-26 0:55 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-mm, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel On Tue, 14 Apr 2020 17:14:30 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > There are multiple similar definitions for arch_clear_hugepage_flags() on > various platforms. This introduces HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS for those > platforms that need to define their own arch_clear_hugepage_flags() while > also providing a generic fallback definition for others to use. This help > reduce code duplication. > > ... > > --- a/include/linux/hugetlb.h > +++ b/include/linux/hugetlb.h > @@ -544,6 +544,10 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, > } > #endif > > +#ifndef HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS > +static inline void arch_clear_hugepage_flags(struct page *page) { } > +#endif > + > #ifndef arch_make_huge_pte > static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, > struct page *page, int writable) This is the rather old-school way of doing it. The Linus-suggested way is #ifndef arch_clear_hugepage_flags static inline void arch_clear_hugepage_flags(struct page *page) { } #define arch_clear_hugepage_flags arch_clear_hugepage_flags #endif And the various arch headers do static inline void arch_clear_hugepage_flags(struct page *page) { <some implementation> } #define arch_clear_hugepage_flags arch_clear_hugepage_flags It's a small difference - mainly to avoid adding two variables to the overall namespace where one would do. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-04-26 0:55 ` Andrew Morton @ 2020-04-26 2:43 ` Anshuman Khandual 2020-04-26 3:01 ` Andrew Morton 0 siblings, 1 reply; 9+ messages in thread From: Anshuman Khandual @ 2020-04-26 2:43 UTC (permalink / raw) To: Andrew Morton Cc: linux-mm, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel On 04/26/2020 06:25 AM, Andrew Morton wrote: > On Tue, 14 Apr 2020 17:14:30 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > >> There are multiple similar definitions for arch_clear_hugepage_flags() on >> various platforms. This introduces HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS for those >> platforms that need to define their own arch_clear_hugepage_flags() while >> also providing a generic fallback definition for others to use. This help >> reduce code duplication. >> >> ... >> >> --- a/include/linux/hugetlb.h >> +++ b/include/linux/hugetlb.h >> @@ -544,6 +544,10 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, >> } >> #endif >> >> +#ifndef HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS >> +static inline void arch_clear_hugepage_flags(struct page *page) { } >> +#endif >> + >> #ifndef arch_make_huge_pte >> static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, >> struct page *page, int writable) > > This is the rather old-school way of doing it. The Linus-suggested way is > > #ifndef arch_clear_hugepage_flags > static inline void arch_clear_hugepage_flags(struct page *page) > { > } > #define arch_clear_hugepage_flags arch_clear_hugepage_flags Do we need that above line here ? Is not that implicit. > #endif > > And the various arch headers do > > static inline void arch_clear_hugepage_flags(struct page *page) > { > <some implementation> > } > #define arch_clear_hugepage_flags arch_clear_hugepage_flags > > It's a small difference - mainly to avoid adding two variables to the > overall namespace where one would do. Understood, will change and resend. > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-04-26 2:43 ` Anshuman Khandual @ 2020-04-26 3:01 ` Andrew Morton 2020-05-05 2:51 ` Anshuman Khandual 0 siblings, 1 reply; 9+ messages in thread From: Andrew Morton @ 2020-04-26 3:01 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-mm, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel On Sun, 26 Apr 2020 08:13:17 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > > > On 04/26/2020 06:25 AM, Andrew Morton wrote: > > On Tue, 14 Apr 2020 17:14:30 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > > > >> There are multiple similar definitions for arch_clear_hugepage_flags() on > >> various platforms. This introduces HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS for those > >> platforms that need to define their own arch_clear_hugepage_flags() while > >> also providing a generic fallback definition for others to use. This help > >> reduce code duplication. > >> > >> ... > >> > >> --- a/include/linux/hugetlb.h > >> +++ b/include/linux/hugetlb.h > >> @@ -544,6 +544,10 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, > >> } > >> #endif > >> > >> +#ifndef HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS > >> +static inline void arch_clear_hugepage_flags(struct page *page) { } > >> +#endif > >> + > >> #ifndef arch_make_huge_pte > >> static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, > >> struct page *page, int writable) > > > > This is the rather old-school way of doing it. The Linus-suggested way is > > > > #ifndef arch_clear_hugepage_flags > > static inline void arch_clear_hugepage_flags(struct page *page) > > { > > } > > #define arch_clear_hugepage_flags arch_clear_hugepage_flags > > Do we need that above line here ? Is not that implicit. It depends if other header files want to test whether arch_clear_hugepage_flags is already defined. If the header heorarchy is well-defined and working properly, they shouldn't need to, because we're reliably indluding the relevant arch header before (or early within) include/linux/hugetlb.h. It would be nice if #define arch_clear_hugepage_flags arch_clear_hugepage_flags #define arch_clear_hugepage_flags arch_clear_hugepage_flags were to generate an compiler error but it doesn't. If it did we could detect these incorrect inclusion orders. > > #endif > > > > And the various arch headers do > > > > static inline void arch_clear_hugepage_flags(struct page *page) > > { > > <some implementation> > > } > > #define arch_clear_hugepage_flags arch_clear_hugepage_flags > > > > It's a small difference - mainly to avoid adding two variables to the > > overall namespace where one would do. > > Understood, will change and resend. That's OK - I've queued up that fix. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-04-26 3:01 ` Andrew Morton @ 2020-05-05 2:51 ` Anshuman Khandual 2020-05-05 20:12 ` Andrew Morton 0 siblings, 1 reply; 9+ messages in thread From: Anshuman Khandual @ 2020-05-05 2:51 UTC (permalink / raw) To: Andrew Morton Cc: linux-mm, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel On 04/26/2020 08:31 AM, Andrew Morton wrote: > On Sun, 26 Apr 2020 08:13:17 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > >> >> >> On 04/26/2020 06:25 AM, Andrew Morton wrote: >>> On Tue, 14 Apr 2020 17:14:30 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: >>> >>>> There are multiple similar definitions for arch_clear_hugepage_flags() on >>>> various platforms. This introduces HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS for those >>>> platforms that need to define their own arch_clear_hugepage_flags() while >>>> also providing a generic fallback definition for others to use. This help >>>> reduce code duplication. >>>> >>>> ... >>>> >>>> --- a/include/linux/hugetlb.h >>>> +++ b/include/linux/hugetlb.h >>>> @@ -544,6 +544,10 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, >>>> } >>>> #endif >>>> >>>> +#ifndef HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS >>>> +static inline void arch_clear_hugepage_flags(struct page *page) { } >>>> +#endif >>>> + >>>> #ifndef arch_make_huge_pte >>>> static inline pte_t arch_make_huge_pte(pte_t entry, struct vm_area_struct *vma, >>>> struct page *page, int writable) >>> >>> This is the rather old-school way of doing it. The Linus-suggested way is >>> >>> #ifndef arch_clear_hugepage_flags >>> static inline void arch_clear_hugepage_flags(struct page *page) >>> { >>> } >>> #define arch_clear_hugepage_flags arch_clear_hugepage_flags >> >> Do we need that above line here ? Is not that implicit. > > It depends if other header files want to test whether > arch_clear_hugepage_flags is already defined. If the header heorarchy > is well-defined and working properly, they shouldn't need to, because > we're reliably indluding the relevant arch header before (or early > within) include/linux/hugetlb.h. > > It would be nice if > > #define arch_clear_hugepage_flags arch_clear_hugepage_flags > #define arch_clear_hugepage_flags arch_clear_hugepage_flags > > were to generate an compiler error but it doesn't. If it did we could > detect these incorrect inclusion orders. > >>> #endif >>> >>> And the various arch headers do >>> >>> static inline void arch_clear_hugepage_flags(struct page *page) >>> { >>> <some implementation> >>> } >>> #define arch_clear_hugepage_flags arch_clear_hugepage_flags >>> >>> It's a small difference - mainly to avoid adding two variables to the >>> overall namespace where one would do. >> >> Understood, will change and resend. > > That's OK - I've queued up that fix. > Hello Andrew, I might not have searched all the relevant trees or might have just searched earlier than required. But I dont see these patches (or your proposed fixes) either in mmotm (2020-04-29-23-04) or in next-20200504. Wondering if you are waiting on a V2 for this series accommodating the changes you had proposed. - Anshuman ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS 2020-05-05 2:51 ` Anshuman Khandual @ 2020-05-05 20:12 ` Andrew Morton 0 siblings, 0 replies; 9+ messages in thread From: Andrew Morton @ 2020-05-05 20:12 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-mm, Russell King, Catalin Marinas, Will Deacon, Tony Luck, Fenghua Yu, Thomas Bogendoerfer, James E.J. Bottomley, Helge Deller, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Paul Walmsley, Palmer Dabbelt, Heiko Carstens, Vasily Gorbik, Christian Borntraeger, Yoshinori Sato, Rich Felker, David S. Miller, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, Mike Kravetz, x86, linux-arm-kernel, linux-ia64, linux-mips, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, linux-sh, sparclinux, linux-arch, linux-kernel On Tue, 5 May 2020 08:21:34 +0530 Anshuman Khandual <anshuman.khandual@arm.com> wrote: > >>> static inline void arch_clear_hugepage_flags(struct page *page) > >>> { > >>> <some implementation> > >>> } > >>> #define arch_clear_hugepage_flags arch_clear_hugepage_flags > >>> > >>> It's a small difference - mainly to avoid adding two variables to the > >>> overall namespace where one would do. > >> > >> Understood, will change and resend. > > > > That's OK - I've queued up that fix. > > > > Hello Andrew, > > I might not have searched all the relevant trees or might have just searched > earlier than required. But I dont see these patches (or your proposed fixes) > either in mmotm (2020-04-29-23-04) or in next-20200504. Wondering if you are > waiting on a V2 for this series accommodating the changes you had proposed. hm. I think I must have got confused and thought you were referring to a different patch. Yes please, let's have v2. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-05 20:12 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-14 11:44 [PATCH 0/3] mm/hugetlb: Add some new arch enabling macros Anshuman Khandual 2020-04-14 11:44 ` [PATCH 1/3] arm64/mm: Drop __HAVE_ARCH_HUGE_PTEP_GET Anshuman Khandual 2020-04-14 11:44 ` [PATCH 2/3] mm/hugetlb: Introduce HAVE_ARCH_IS_HUGEPAGE_ONLY_RANGE Anshuman Khandual 2020-04-14 11:44 ` [PATCH 3/3] mm/hugetlb: Introduce HAVE_ARCH_CLEAR_HUGEPAGE_FLAGS Anshuman Khandual 2020-04-26 0:55 ` Andrew Morton 2020-04-26 2:43 ` Anshuman Khandual 2020-04-26 3:01 ` Andrew Morton 2020-05-05 2:51 ` Anshuman Khandual 2020-05-05 20:12 ` Andrew Morton
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).