|
@@ -52,67 +52,60 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
|
|
|
#endif
|
|
|
#define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd))
|
|
|
|
|
|
-/*
|
|
|
- * The pgprot_* and protection_map entries will be fixed up at runtime to
|
|
|
- * include the cachable and bufferable bits based on memory policy, as well as
|
|
|
- * any architecture dependent bits like global/ASID and SMP shared mapping
|
|
|
- * bits.
|
|
|
- */
|
|
|
-#define _PAGE_DEFAULT PTE_TYPE_PAGE | PTE_AF
|
|
|
+#ifdef CONFIG_SMP
|
|
|
+#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
|
|
|
+#define PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S)
|
|
|
+#else
|
|
|
+#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF)
|
|
|
+#define PROT_SECT_DEFAULT (PMD_TYPE_SECT | PMD_SECT_AF)
|
|
|
+#endif
|
|
|
|
|
|
-extern pgprot_t pgprot_default;
|
|
|
+#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
|
|
+#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_NORMAL_NC))
|
|
|
+#define PROT_NORMAL (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_NORMAL))
|
|
|
|
|
|
-#define __pgprot_modify(prot,mask,bits) \
|
|
|
- __pgprot((pgprot_val(prot) & ~(mask)) | (bits))
|
|
|
+#define PROT_SECT_DEVICE_nGnRE (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_DEVICE_nGnRE))
|
|
|
+#define PROT_SECT_NORMAL (PROT_SECT_DEFAULT | PMD_SECT_PXN | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))
|
|
|
+#define PROT_SECT_NORMAL_EXEC (PROT_SECT_DEFAULT | PMD_SECT_UXN | PMD_ATTRINDX(MT_NORMAL))
|
|
|
|
|
|
-#define _MOD_PROT(p, b) __pgprot_modify(p, 0, b)
|
|
|
+#define _PAGE_DEFAULT (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
|
|
|
|
|
-#define PAGE_NONE __pgprot_modify(pgprot_default, PTE_TYPE_MASK, PTE_PROT_NONE | PTE_PXN | PTE_UXN)
|
|
|
-#define PAGE_SHARED _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
|
|
-#define PAGE_SHARED_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_WRITE)
|
|
|
-#define PAGE_COPY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
-#define PAGE_COPY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN)
|
|
|
-#define PAGE_READONLY _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
-#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_default, PTE_USER | PTE_NG | PTE_PXN)
|
|
|
-#define PAGE_KERNEL _MOD_PROT(pgprot_default, PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE)
|
|
|
-#define PAGE_KERNEL_EXEC _MOD_PROT(pgprot_default, PTE_UXN | PTE_DIRTY | PTE_WRITE)
|
|
|
+#define PAGE_KERNEL __pgprot(_PAGE_DEFAULT | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE)
|
|
|
+#define PAGE_KERNEL_EXEC __pgprot(_PAGE_DEFAULT | PTE_UXN | PTE_DIRTY | PTE_WRITE)
|
|
|
|
|
|
-#define PAGE_HYP _MOD_PROT(pgprot_default, PTE_HYP)
|
|
|
+#define PAGE_HYP __pgprot(_PAGE_DEFAULT | PTE_HYP)
|
|
|
#define PAGE_HYP_DEVICE __pgprot(PROT_DEVICE_nGnRE | PTE_HYP)
|
|
|
|
|
|
-#define PAGE_S2 __pgprot_modify(pgprot_default, PTE_S2_MEMATTR_MASK, PTE_S2_MEMATTR(MT_S2_NORMAL) | PTE_S2_RDONLY)
|
|
|
+#define PAGE_S2 __pgprot(PROT_DEFAULT | PTE_S2_MEMATTR(MT_S2_NORMAL) | PTE_S2_RDONLY)
|
|
|
#define PAGE_S2_DEVICE __pgprot(PROT_DEFAULT | PTE_S2_MEMATTR(MT_S2_DEVICE_nGnRE) | PTE_S2_RDWR | PTE_UXN)
|
|
|
|
|
|
-#define __PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_TYPE_MASK) | PTE_PROT_NONE | PTE_PXN | PTE_UXN)
|
|
|
-#define __PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
|
|
-#define __PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_WRITE)
|
|
|
-#define __PAGE_COPY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
-#define __PAGE_COPY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN)
|
|
|
-#define __PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
-#define __PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN)
|
|
|
-#define __PAGE_EXECONLY __pgprot(_PAGE_DEFAULT | PTE_NG | PTE_PXN)
|
|
|
-
|
|
|
-#endif /* __ASSEMBLY__ */
|
|
|
-
|
|
|
-#define __P000 __PAGE_NONE
|
|
|
-#define __P001 __PAGE_READONLY
|
|
|
-#define __P010 __PAGE_COPY
|
|
|
-#define __P011 __PAGE_COPY
|
|
|
-#define __P100 __PAGE_EXECONLY
|
|
|
-#define __P101 __PAGE_READONLY_EXEC
|
|
|
-#define __P110 __PAGE_COPY_EXEC
|
|
|
-#define __P111 __PAGE_COPY_EXEC
|
|
|
-
|
|
|
-#define __S000 __PAGE_NONE
|
|
|
-#define __S001 __PAGE_READONLY
|
|
|
-#define __S010 __PAGE_SHARED
|
|
|
-#define __S011 __PAGE_SHARED
|
|
|
-#define __S100 __PAGE_EXECONLY
|
|
|
-#define __S101 __PAGE_READONLY_EXEC
|
|
|
-#define __S110 __PAGE_SHARED_EXEC
|
|
|
-#define __S111 __PAGE_SHARED_EXEC
|
|
|
+#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_TYPE_MASK) | PTE_PROT_NONE | PTE_PXN | PTE_UXN)
|
|
|
+#define PAGE_SHARED __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
|
|
+#define PAGE_SHARED_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_WRITE)
|
|
|
+#define PAGE_COPY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
+#define PAGE_COPY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN)
|
|
|
+#define PAGE_READONLY __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN | PTE_UXN)
|
|
|
+#define PAGE_READONLY_EXEC __pgprot(_PAGE_DEFAULT | PTE_USER | PTE_NG | PTE_PXN)
|
|
|
+#define PAGE_EXECONLY __pgprot(_PAGE_DEFAULT | PTE_NG | PTE_PXN)
|
|
|
+
|
|
|
+#define __P000 PAGE_NONE
|
|
|
+#define __P001 PAGE_READONLY
|
|
|
+#define __P010 PAGE_COPY
|
|
|
+#define __P011 PAGE_COPY
|
|
|
+#define __P100 PAGE_EXECONLY
|
|
|
+#define __P101 PAGE_READONLY_EXEC
|
|
|
+#define __P110 PAGE_COPY_EXEC
|
|
|
+#define __P111 PAGE_COPY_EXEC
|
|
|
+
|
|
|
+#define __S000 PAGE_NONE
|
|
|
+#define __S001 PAGE_READONLY
|
|
|
+#define __S010 PAGE_SHARED
|
|
|
+#define __S011 PAGE_SHARED
|
|
|
+#define __S100 PAGE_EXECONLY
|
|
|
+#define __S101 PAGE_READONLY_EXEC
|
|
|
+#define __S110 PAGE_SHARED_EXEC
|
|
|
+#define __S111 PAGE_SHARED_EXEC
|
|
|
|
|
|
-#ifndef __ASSEMBLY__
|
|
|
/*
|
|
|
* ZERO_PAGE is a global shared page that is always zero: used
|
|
|
* for zero-mapped memory areas etc..
|
|
@@ -274,6 +267,9 @@ static inline int has_transparent_hugepage(void)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+#define __pgprot_modify(prot,mask,bits) \
|
|
|
+ __pgprot((pgprot_val(prot) & ~(mask)) | (bits))
|
|
|
+
|
|
|
/*
|
|
|
* Mark the prot value as uncacheable and unbufferable.
|
|
|
*/
|