On Tue, Jul 14, 2020 at 01:00:50PM +0300, Pekka Enberg wrote: > From: Pekka Enberg <penberg@xxxxxxxxxx> > > 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@xxxxxxxxxx> > Cc: Mike Rapoport <rppt@xxxxxxxxxxxxx> > Cc: Tom Lendacky <thomas.lendacky@xxxxxxx> > Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> Reviewed-by: Mike Rapoport <rppt@xxxxxxxxxxxxx> > --- > include/linux/pgtable.h | 69 +++++++++++++++++++++-------------------- > 1 file changed, 35 insertions(+), 34 deletions(-) > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 56c1e8eb7bb0..ed9026ad7c31 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,41 @@ 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 > + > +#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 > + > #ifndef pgprot_encrypted > #define pgprot_encrypted(prot) (prot) > #endif > -- > 2.26.2 > -- Sincerely yours, Mike.