powerpc: Refactor permission masks used for __P/__S table and kernel memory flags
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 25 Sep 2023 18:31:39 +0000 (20:31 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 Oct 2023 06:12:46 +0000 (17:12 +1100)
Prepare a common version of the permission masks that will be based
on _PAGE_NA, _PAGE_RO, _PAGE_ROX, _PAGE_RW, _PAGE_RWX that will be
defined in platform specific headers in later patches.

Put them in a new header pgtable-masks.h which will be included by
platforms.

And prepare a common version of flags used for mapping kernel memory
that will be based on _PAGE_RO, _PAGE_ROX, _PAGE_RW, _PAGE_RWX that
will be defined in platform specific headers.

Put them in unless _PAGE_KERNEL_RO is already defined so that platform
specific definitions can be dismantled one by one.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/d31b59efcdb38e675479563307af891aeadf6ec9.1695659959.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/pgtable-masks.h [new file with mode: 0644]

diff --git a/arch/powerpc/include/asm/pgtable-masks.h b/arch/powerpc/include/asm/pgtable-masks.h
new file mode 100644 (file)
index 0000000..808a3b9
--- /dev/null
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_POWERPC_PGTABLE_MASKS_H
+#define _ASM_POWERPC_PGTABLE_MASKS_H
+
+#ifndef _PAGE_NA
+#define _PAGE_NA       0
+#define _PAGE_RO       _PAGE_READ
+#define _PAGE_ROX      (_PAGE_READ | _PAGE_EXEC)
+#define _PAGE_RW       (_PAGE_READ | _PAGE_WRITE)
+#define _PAGE_RWX      (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC)
+#endif
+
+/* Permission flags for kernel mappings */
+#ifndef _PAGE_KERNEL_RO
+#define _PAGE_KERNEL_RO                _PAGE_RO
+#define _PAGE_KERNEL_ROX       _PAGE_ROX
+#define _PAGE_KERNEL_RW                (_PAGE_RW | _PAGE_DIRTY)
+#define _PAGE_KERNEL_RWX       (_PAGE_RWX | _PAGE_DIRTY)
+#endif
+
+/* Permission masks used to generate the __P and __S table */
+#define PAGE_NONE      __pgprot(_PAGE_BASE | _PAGE_NA)
+#define PAGE_SHARED    __pgprot(_PAGE_BASE | _PAGE_RW)
+#define PAGE_SHARED_X  __pgprot(_PAGE_BASE | _PAGE_RWX)
+#define PAGE_COPY      __pgprot(_PAGE_BASE | _PAGE_RO)
+#define PAGE_COPY_X    __pgprot(_PAGE_BASE | _PAGE_ROX)
+#define PAGE_READONLY  __pgprot(_PAGE_BASE | _PAGE_RO)
+#define PAGE_READONLY_X        __pgprot(_PAGE_BASE | _PAGE_ROX)
+
+#endif /* _ASM_POWERPC_PGTABLE_MASKS_H */