mm: pgtable: Make generic pgprot_* macros available for no-MMU
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> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Pekka Enberg <penberg@kernel.org> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
3e7b669c6c
commit
63bb76de4a
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user