Message ID | 20200715053340.576300-1-penberg@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/2] mm: pgtable: Make generic pgprot_* macros available for no-MMU | expand |
On Wed, 15 Jul 2020, Pekka Enberg wrote: > From: Pekka Enberg <penberg@kernel.org> > > 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. > > Suggested-by: Palmer Dabbelt <palmerdabbelt@google.com> > Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> > Cc: Tom Lendacky <thomas.lendacky@amd.com> > Signed-off-by: Pekka Enberg <penberg@kernel.org> Acked-by: David Rientjes <rientjes@google.com>
On Wed, 15 Jul 2020, Pekka Enberg wrote: > > From: Pekka Enberg <penberg@kernel.org> > > > > 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. > > > > Suggested-by: Palmer Dabbelt <palmerdabbelt@google.com> > > Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> > > Cc: Tom Lendacky <thomas.lendacky@amd.com> > > Signed-off-by: Pekka Enberg <penberg@kernel.org> On Wed, Jul 15, 2020 at 8:39 PM David Rientjes <rientjes@google.com> wrote: > Acked-by: David Rientjes <rientjes@google.com> Palmer, will you pick up these patches in the riscv tree, or should I ask Andrew to queue them in -mm? - Pekka
On Thu, 16 Jul 2020 23:14:10 PDT (-0700), penberg@gmail.com wrote: > On Wed, 15 Jul 2020, Pekka Enberg wrote: >> > From: Pekka Enberg <penberg@kernel.org> >> > >> > 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. >> > >> > Suggested-by: Palmer Dabbelt <palmerdabbelt@google.com> >> > Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> >> > Cc: Tom Lendacky <thomas.lendacky@amd.com> >> > Signed-off-by: Pekka Enberg <penberg@kernel.org> > > On Wed, Jul 15, 2020 at 8:39 PM David Rientjes <rientjes@google.com> wrote: >> Acked-by: David Rientjes <rientjes@google.com> > > 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!
diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h index 56c1e8eb7bb0..53e97da1e8e2 100644 --- a/include/linux/pgtable.h +++ b/include/linux/pgtable.h @@ -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