linux/arch/s390/mm
Sven Schnelle edc1e4b6e2 s390/vmem: split pages when debug pagealloc is enabled
Since commit bb1520d581 ("s390/mm: start kernel with DAT enabled")
the kernel crashes early during boot when debug pagealloc is enabled:

mem auto-init: stack:off, heap alloc:off, heap free:off
addressing exception: 0005 ilc:2 [#1] SMP DEBUG_PAGEALLOC
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 6.5.0-rc3-09759-gc5666c912155 #630
[..]
Krnl Code: 00000000001325f6: ec5600248064 cgrj %r5,%r6,8,000000000013263e
           00000000001325fc: eb880002000c srlg %r8,%r8,2
          #0000000000132602: b2210051     ipte %r5,%r1,%r0,0
          >0000000000132606: b90400d1     lgr %r13,%r1
           000000000013260a: 41605008     la %r6,8(%r5)
           000000000013260e: a7db1000     aghi %r13,4096
           0000000000132612: b221006d     ipte %r6,%r13,%r0,0
           0000000000132616: e3d0d0000171 lay %r13,4096(%r13)

Call Trace:
 __kernel_map_pages+0x14e/0x320
 __free_pages_ok+0x23a/0x5a8)
 free_low_memory_core_early+0x214/0x2c8
 memblock_free_all+0x28/0x58
 mem_init+0xb6/0x228
 mm_core_init+0xb6/0x3b0
 start_kernel+0x1d2/0x5a8
 startup_continue+0x36/0x40
Kernel panic - not syncing: Fatal exception: panic_on_oops

This is caused by using large mappings on machines with EDAT1/EDAT2. Add
the code to split the mappings into 4k pages if debug pagealloc is enabled
by CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT or the debug_pagealloc kernel
command line option.

Fixes: bb1520d581 ("s390/mm: start kernel with DAT enabled")
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
2023-07-27 13:10:56 +02:00
..
cmm.c s390: simplify one level sysctl registration for cmm_table 2023-03-20 10:56:49 +01:00
dump_pagetables.c s390/mm,ptdump: avoid Kasan vs Memcpy Real markers swapping 2023-01-31 18:56:36 +01:00
extable.c s390/extable: add EX_TABLE_UA_LOAD_REGPAIR() macro 2022-11-21 13:36:15 +01:00
extmem.c Revert "s390/mm: get rid of VMEM_MAX_PHYS macro" 2023-07-04 07:46:26 +02:00
fault.c s390/mm: fix per vma lock fault handling 2023-07-18 15:34:51 +02:00
gmap.c KVM: s390: pv: fix index value of replaced ASCE 2023-07-18 11:21:51 +02:00
hugetlbpage.c mm: move 'mmap_min_addr' logic from callers into vm_unmapped_area() 2023-04-21 14:52:05 -07:00
init.c s390/mm: use set_memory_*() helpers instead of open coding 2023-04-13 17:36:26 +02:00
maccess.c s390: include linux/io.h instead of asm/io.h 2023-07-03 11:19:40 +02:00
Makefile s390/kasan: move shadow mapping to decompressor 2023-03-20 11:02:51 +01:00
mmap.c mm: move 'mmap_min_addr' logic from callers into vm_unmapped_area() 2023-04-21 14:52:05 -07:00
page-states.c s390/mm: remove unused get_page_state() function 2022-11-23 16:24:07 +01:00
pageattr.c procfs: consolidate arch_report_meminfo declaration 2023-05-17 09:24:49 +02:00
pgalloc.c s390/mm: make use of atomic_fetch_xor() 2023-03-20 11:12:49 +01:00
pgtable.c s390: allow pte_offset_map_lock() to fail 2023-06-19 16:19:09 -07:00
vmem.c s390/vmem: split pages when debug pagealloc is enabled 2023-07-27 13:10:56 +02:00