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:

committed by
Palmer Dabbelt

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)
|
#define flush_tlb_fix_spurious_fault(vma, address) flush_tlb_page(vma, address)
|
||||||
#endif
|
#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,
|
* When walking page tables, get the address of the next boundary,
|
||||||
* or the end address of the range if that comes earlier. Although no
|
* 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
|
* 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.
|
* 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
|
#ifndef pgprot_encrypted
|
||||||
#define pgprot_encrypted(prot) (prot)
|
#define pgprot_encrypted(prot) (prot)
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user