summaryrefslogtreecommitdiff
path: root/arch/s390/mm/page-states.c
diff options
context:
space:
mode:
authorHeiko Carstens <hca@linux.ibm.com>2023-10-27 15:12:36 +0300
committerVasily Gorbik <gor@linux.ibm.com>2023-11-06 00:34:57 +0300
commit468a3bc2b7b955a7cf97d47c6022bf1ae4a538a3 (patch)
treea180e3f87155fc16e260c1527235d080b6c9fed6 /arch/s390/mm/page-states.c
parent92b519f3bc1c90e098bb3f12d8e739fc56c2d444 (diff)
downloadlinux-468a3bc2b7b955a7cf97d47c6022bf1ae4a538a3.tar.xz
s390/cmma: move parsing of cmma kernel parameter to early boot code
The "cmma=" kernel command line parameter needs to be parsed early for upcoming changes. Therefore move the parsing code. Note that EX_TABLE handling of cmma_test_essa() needs to be open-coded, since the early boot code doesn't have infrastructure for handling expected exceptions. Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'arch/s390/mm/page-states.c')
-rw-r--r--arch/s390/mm/page-states.c40
1 files changed, 1 insertions, 39 deletions
diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c
index 202dacdf17db..b68fef3d1230 100644
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
@@ -18,45 +18,7 @@
#include <asm/facility.h>
#include <asm/page-states.h>
-static int cmma_flag = 1;
-
-static int __init cmma(char *str)
-{
- bool enabled;
-
- if (!kstrtobool(str, &enabled))
- cmma_flag = enabled;
- return 1;
-}
-__setup("cmma=", cmma);
-
-static inline int cmma_test_essa(void)
-{
- unsigned long tmp = 0;
- int rc = -EOPNOTSUPP;
-
- /* test ESSA_GET_STATE */
- asm volatile(
- " .insn rrf,0xb9ab0000,%[tmp],%[tmp],%[cmd],0\n"
- "0: la %[rc],0\n"
- "1:\n"
- EX_TABLE(0b, 1b)
- : [rc] "+&d" (rc), [tmp] "+&d" (tmp)
- : [cmd] "i" (ESSA_GET_STATE));
- return rc;
-}
-
-void __init cmma_init(void)
-{
- if (!cmma_flag)
- return;
- if (cmma_test_essa()) {
- cmma_flag = 0;
- return;
- }
- if (test_facility(147))
- cmma_flag = 2;
-}
+int __bootdata_preserved(cmma_flag);
static __always_inline void essa(unsigned long paddr, unsigned char cmd)
{