diff options
author | Heiko Carstens <hca@linux.ibm.com> | 2023-10-27 14:12:39 +0200 |
---|---|---|
committer | Vasily Gorbik <gor@linux.ibm.com> | 2023-11-05 22:34:58 +0100 |
commit | a51324c430db3fcf3e7d77c265491322c251a396 (patch) | |
tree | 8287b8d7b681c66ba708982b3c96cd8b26eb5279 /arch/s390/include/asm | |
parent | 65d37f163add1c6ead3a63788acb2f9590159f94 (diff) | |
download | linux-stable-a51324c430db3fcf3e7d77c265491322c251a396.tar.gz linux-stable-a51324c430db3fcf3e7d77c265491322c251a396.tar.bz2 linux-stable-a51324c430db3fcf3e7d77c265491322c251a396.zip |
s390/cmma: rework no-dat handling
Rework the way physical pages are set no-dat / dat:
The old way is:
- Rely on that all pages are initially marked "dat"
- Allocate page tables for the kernel mapping
- Enable dat
- Walk the whole kernel mapping and set PG_arch_1 bit in all struct pages
that belong to pages of kernel page tables
- Walk all struct pages and test and clear the PG_arch_1 bit. If the bit is
not set, set the page state to no-dat
- For all subsequent page table allocations, set the page state to dat
(remove the no-dat state) on allocation time
Change this rather complex logic to a simpler approach:
- Set the whole physical memory (all pages) to "no-dat"
- Explicitly set those page table pages to "dat" which are part of the
kernel image (e.g. swapper_pg_dir)
- For all subsequent page table allocations, set the page state to dat
(remove the no-dat state) on allocation time
In result the code is simpler, and this also allows to get rid of one
odd usage of the PG_arch_1 bit.
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/include/asm')
-rw-r--r-- | arch/s390/include/asm/setup.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h index ad6641245658..df316436d2e1 100644 --- a/arch/s390/include/asm/setup.h +++ b/arch/s390/include/asm/setup.h @@ -125,8 +125,6 @@ static inline void vmcp_cma_reserve(void) { } void report_user_fault(struct pt_regs *regs, long signr, int is_mm_fault); -void cmma_init_nodat(void); - extern void (*_machine_restart)(char *command); extern void (*_machine_halt)(void); extern void (*_machine_power_off)(void); |