| From: Peter Xu <peterx@redhat.com> |
| Subject: mm: always define pxx_pgprot() |
| Date: Mon, 26 Aug 2024 16:43:42 -0400 |
| |
| There're: |
| |
| - 8 archs (arc, arm64, include, mips, powerpc, s390, sh, x86) that |
| support pte_pgprot(). |
| |
| - 2 archs (x86, sparc) that support pmd_pgprot(). |
| |
| - 1 arch (x86) that support pud_pgprot(). |
| |
| Always define them to be used in generic code, and then we don't need to |
| fiddle with "#ifdef"s when doing so. |
| |
| Link: https://lkml.kernel.org/r/20240826204353.2228736-9-peterx@redhat.com |
| Signed-off-by: Peter Xu <peterx@redhat.com> |
| Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> |
| Cc: Alexander Gordeev <agordeev@linux.ibm.com> |
| Cc: Alex Williamson <alex.williamson@redhat.com> |
| Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: David Hildenbrand <david@redhat.com> |
| Cc: Gavin Shan <gshan@redhat.com> |
| Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com> |
| Cc: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: Niklas Schnelle <schnelle@linux.ibm.com> |
| Cc: Paolo Bonzini <pbonzini@redhat.com> |
| Cc: Ryan Roberts <ryan.roberts@arm.com> |
| Cc: Sean Christopherson <seanjc@google.com> |
| Cc: Sven Schnelle <svens@linux.ibm.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Cc: Will Deacon <will@kernel.org> |
| Cc: Zi Yan <ziy@nvidia.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| arch/arm64/include/asm/pgtable.h | 1 + |
| arch/powerpc/include/asm/pgtable.h | 1 + |
| arch/s390/include/asm/pgtable.h | 1 + |
| arch/sparc/include/asm/pgtable_64.h | 1 + |
| include/linux/pgtable.h | 12 ++++++++++++ |
| 5 files changed, 16 insertions(+) |
| |
| --- a/arch/arm64/include/asm/pgtable.h~mm-always-define-pxx_pgprot |
| +++ a/arch/arm64/include/asm/pgtable.h |
| @@ -384,6 +384,7 @@ static inline void __sync_cache_and_tags |
| /* |
| * Select all bits except the pfn |
| */ |
| +#define pte_pgprot pte_pgprot |
| static inline pgprot_t pte_pgprot(pte_t pte) |
| { |
| unsigned long pfn = pte_pfn(pte); |
| --- a/arch/powerpc/include/asm/pgtable.h~mm-always-define-pxx_pgprot |
| +++ a/arch/powerpc/include/asm/pgtable.h |
| @@ -65,6 +65,7 @@ static inline unsigned long pte_pfn(pte_ |
| /* |
| * Select all bits except the pfn |
| */ |
| +#define pte_pgprot pte_pgprot |
| static inline pgprot_t pte_pgprot(pte_t pte) |
| { |
| unsigned long pte_flags; |
| --- a/arch/s390/include/asm/pgtable.h~mm-always-define-pxx_pgprot |
| +++ a/arch/s390/include/asm/pgtable.h |
| @@ -955,6 +955,7 @@ static inline int pte_unused(pte_t pte) |
| * young/old accounting is not supported, i.e _PAGE_PROTECT and _PAGE_INVALID |
| * must not be set. |
| */ |
| +#define pte_pgprot pte_pgprot |
| static inline pgprot_t pte_pgprot(pte_t pte) |
| { |
| unsigned long pte_flags = pte_val(pte) & _PAGE_CHG_MASK; |
| --- a/arch/sparc/include/asm/pgtable_64.h~mm-always-define-pxx_pgprot |
| +++ a/arch/sparc/include/asm/pgtable_64.h |
| @@ -783,6 +783,7 @@ static inline pmd_t pmd_mkwrite_novma(pm |
| return __pmd(pte_val(pte)); |
| } |
| |
| +#define pmd_pgprot pmd_pgprot |
| static inline pgprot_t pmd_pgprot(pmd_t entry) |
| { |
| unsigned long val = pmd_val(entry); |
| --- a/include/linux/pgtable.h~mm-always-define-pxx_pgprot |
| +++ a/include/linux/pgtable.h |
| @@ -1956,6 +1956,18 @@ typedef unsigned int pgtbl_mod_mask; |
| #define MAX_PTRS_PER_P4D PTRS_PER_P4D |
| #endif |
| |
| +#ifndef pte_pgprot |
| +#define pte_pgprot(x) ((pgprot_t) {0}) |
| +#endif |
| + |
| +#ifndef pmd_pgprot |
| +#define pmd_pgprot(x) ((pgprot_t) {0}) |
| +#endif |
| + |
| +#ifndef pud_pgprot |
| +#define pud_pgprot(x) ((pgprot_t) {0}) |
| +#endif |
| + |
| /* description of effects of mapping type and prot in current implementation. |
| * this is due to the limited x86 page protection hardware. The expected |
| * behavior is in parens: |
| _ |