mm: pgtable: Make generic pgprot_* macros available for no-MMU
Subsystems (3)
PATCH v2 1/2 mm: pgtable: Make generic pgprot_* macros available for no-MMU
From: Pekka Enberg <[email protected]>
The <linux/pgtable.h> header defines some generic pgprot_* implementations, but they are only available when CONFIG_MMU is enabled. The RISC-V architecture, for example, therefore defines some of these pgprot_* macros for !NOMMU.
Let's make the pgprot_* generic available even for !NOMMU so we can remove the RISC-V specific definitions.
Compile-tested with x86 defconfig, and riscv defconfig and !MMU defconfig.
---
v1 -> v2: Wrap pgprot_modify() -- which is specific to mmap -- with
CONFIG_MMU to fix a build issue on ARM reported by kernel test robot <[email protected]>.
include/linux/pgtable.h | 71 +++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 34 deletions(-)
include/linux/pgtable.h +37 -34
@@ -647,40 +647,6 @@ static inline int arch_unmap_one(struct mm_struct *mm,#define flush_tlb_fix_spurious_fault (vma, address) flush_tlb_page(vma, address)#endif -#ifndef pgprot_nx -#define pgprot_nx (prot) (prot) -#endif - -#ifndef pgprot_noncached -#define pgprot_noncached (prot) (prot) -#endif - -#ifndef pgprot_writecombine -#define pgprot_writecombine pgprot_noncached -#endif - -#ifndef pgprot_writethrough -#define pgprot_writethrough pgprot_noncached -#endif - -#ifndef pgprot_device -#define pgprot_device pgprot_noncached -#endif - -#ifndef pgprot_modify -#define pgprot_modify pgprot_modify -static inline pgprot_t pgprot_modify (pgprot_t oldprot,pgprot_t newprot) -{ -if (pgprot_val (oldprot) ==pgprot_val (pgprot_noncached (oldprot))) - newprot =pgprot_noncached (newprot); -if (pgprot_val (oldprot) ==pgprot_val (pgprot_writecombine (oldprot))) - newprot =pgprot_writecombine (newprot); -if (pgprot_val (oldprot) ==pgprot_val (pgprot_device (oldprot))) - newprot =pgprot_device (newprot); -return newprot; -} -#endif -/* * When walking page tables, get the address of the next boundary, * or the end address of the range if that comes earlier. Although no
@@ -840,6 +806,43 @@ static inline void ptep_modify_prot_commit(struct vm_area_struct *vma,* No-op macros that just return the current protection value. Defined here * because these macros can be used used even if CONFIG_MMU is not defined. */ + +#ifndef pgprot_nx +#define pgprot_nx (prot) (prot) +#endif + +#ifndef pgprot_noncached +#define pgprot_noncached (prot) (prot) +#endif + +#ifndef pgprot_writecombine +#define pgprot_writecombine pgprot_noncached +#endif + +#ifndef pgprot_writethrough +#define pgprot_writethrough pgprot_noncached +#endif + +#ifndef pgprot_device +#define pgprot_device pgprot_noncached +#endif + +#ifdef CONFIG_MMU +#ifndef pgprot_modify +#define pgprot_modify pgprot_modify +static inline pgprot_t pgprot_modify (pgprot_t oldprot,pgprot_t newprot) +{ +if (pgprot_val (oldprot) ==pgprot_val (pgprot_noncached (oldprot))) + newprot =pgprot_noncached (newprot); +if (pgprot_val (oldprot) ==pgprot_val (pgprot_writecombine (oldprot))) + newprot =pgprot_writecombine (newprot); +if (pgprot_val (oldprot) ==pgprot_val (pgprot_device (oldprot))) + newprot =pgprot_device (newprot); +return newprot; +} +#endif +#endif /* CONFIG_MMU */ +#ifndef pgprot_encrypted#define pgprot_encrypted (prot) (prot)#endif
Signature · 1 line
2.26.2
PATCH v2 2/2 riscv: Use generic pgprot_* macros from <linux/pgtable.h>
From: Pekka Enberg <[email protected]>
The <linux/pgtable.h> header now defines generic pgprot_ macros also for the no-MMU configuration, so let's use them.
--- arch/riscv/include/asm/mmio.h | 6 ------ 1 file changed, 6 deletions(-)
arch/riscv/include/asm/mmio.h +0 -6
@@ -14,12 +14,6 @@#include <linux/types.h> #include <asm/mmiowb.h> -#ifndef CONFIG_MMU -#define pgprot_noncached (x) (x) -#define pgprot_writecombine (x) (x) -#define pgprot_device (x) (x) -#endif /* CONFIG_MMU */ -/* Generic IO read/write. These perform native-endian accesses. */ #define __raw_writeb __raw_writebstatic inline void __raw_writeb (u8 val,volatile void __iomem *addr)
Signature · 1 line
2.26.2
Quoted 10 lines · Pekka Enberg
From: Pekka Enberg <[email protected]>
The <
linux/pgtable.h> header defines some generic pgprot_* implementations, but they are only available whenCONFIG_MMUis enabled. The RISC-V architecture, for example, therefore defines some of these pgprot_* macros for !NOMMU.Let's make the pgprot_* generic available even for !NOMMU so we can remove the RISC-V specific definitions.
Quoted 6 lines
Compile-tested with x86 defconfig, and riscv defconfig and !MMU defconfig.
Suggested-by Palmer Dabbelt <[email protected]>Reviewed-by Mike Rapoport <[email protected]>Cc Tom Lendacky <[email protected]>Signed-off-by Pekka Enberg <[email protected]>
Quoted 16 lines · Pekka Enberg
Quoted 16 lines
From: Pekka Enberg <[email protected]>
The <
linux/pgtable.h> header defines some generic pgprot_* implementations, but they are only available whenCONFIG_MMUis enabled. The RISC-V architecture, for example, therefore defines some of these pgprot_* macros for !NOMMU.Let's make the pgprot_* generic available even for !NOMMU so we can remove the RISC-V specific definitions.
Compile-tested with x86 defconfig, and riscv defconfig and !MMU defconfig.
Suggested-by Palmer Dabbelt <[email protected]>Reviewed-by Mike Rapoport <[email protected]>Cc Tom Lendacky <[email protected]>Signed-off-by Pekka Enberg <[email protected]>
Quoted 1 line · David Rientjes
Acked-by David Rientjes <[email protected]>
Palmer, will you pick up these patches in the riscv tree, or should I ask Andrew to queue them in -mm?
- Pekka
_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv
Quoted 18 lines · On Thu, 16 Jul 2020 23:14:10 PDT (-0700), [email protected] wrote:
Quoted 10 lines · Pekka Enberg
Quoted 10 lines
From: Pekka Enberg <[email protected]>
The <
linux/pgtable.h> header defines some generic pgprot_* implementations, but they are only available whenCONFIG_MMUis enabled. The RISC-V architecture, for example, therefore defines some of these pgprot_* macros for !NOMMU.Let's make the pgprot_* generic available even for !NOMMU so we can remove the RISC-V specific definitions.
Quoted 6 lines
Quoted 6 lines
Compile-tested with x86 defconfig, and riscv defconfig and !MMU defconfig.
Suggested-by Palmer Dabbelt <[email protected]>Reviewed-by Mike Rapoport <[email protected]>Cc Tom Lendacky <[email protected]>Signed-off-by Pekka Enberg <[email protected]>
Quoted 5 lines
Quoted 1 line · David Rientjes
Acked-by David Rientjes <[email protected]>Palmer, will you pick up these patches in the riscv tree, or should I ask Andrew to queue them in -mm?
I just put them on for-next. Thanks!
_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv