xref: /linux/Documentation/arch/s390/mm.rst (revision d65e1a0f305ba3e7aabf6261a37bb871790d9f93)
1.. SPDX-License-Identifier: GPL-2.0
2
3=================
4Memory Management
5=================
6
7Virtual memory layout
8=====================
9
10.. note::
11
12 - Some aspects of the virtual memory layout setup are not
13   clarified (number of page levels, alignment, DMA memory).
14
15 - Unused gaps in the virtual memory layout could be present
16   or not - depending on how partucular system is configured.
17   No page tables are created for the unused gaps.
18
19 - The virtual memory regions are tracked or untracked by KASAN
20   instrumentation, as well as the KASAN shadow memory itself is
21   created only when CONFIG_KASAN configuration option is enabled.
22
23::
24
25  =============================================================================
26  |    Physical      |	  Virtual	| VM area description
27  =============================================================================
28  +- 0 --------------+- 0 --------------+
29  |		     | S390_lowcore	| Low-address memory
30  |		     +- 8 KB -----------+
31  |		     |			|
32  |		     |			|
33  |		     | ... unused gap	| KASAN untracked
34  |		     |			|
35  +- AMODE31_START --+- AMODE31_START --+ .amode31 rand. phys/virt start
36  |.amode31 text/data|.amode31 text/data| KASAN untracked
37  +- AMODE31_END ----+- AMODE31_END ----+ .amode31 rand. phys/virt end (<2GB)
38  |		     |			|
39  |		     |			|
40  +- __kaslr_offset_phys		| kernel rand. phys start
41  |		     |			|
42  | kernel text/data |			|
43  |		     |			|
44  +------------------+			| kernel phys end
45  |		     |			|
46  |		     |			|
47  |		     |			|
48  |		     |			|
49  +- ident_map_size -+			|
50		     |			|
51		     |	... unused gap	| KASAN untracked
52		     |			|
53		     +- __identity_base + identity mapping start (>= 2GB)
54		     |			|
55		     | identity		| phys == virt - __identity_base
56		     | mapping		| virt == phys + __identity_base
57		     |			|
58		     |			| KASAN tracked
59		     |			|
60		     |			|
61		     |			|
62		     |			|
63		     |			|
64		     |			|
65		     |			|
66		     |			|
67		     |			|
68		     |			|
69		     |			|
70		     |			|
71		     |			|
72		     |			|
73		     |			|
74		     +---- vmemmap -----+ 'struct page' array start
75		     |			|
76		     | virtually mapped |
77		     | memory map	| KASAN untracked
78		     |			|
79		     +- __abs_lowcore --+
80		     |			|
81		     | Absolute Lowcore | KASAN untracked
82		     |			|
83		     +- __memcpy_real_area
84		     |			|
85		     |	Real Memory Copy| KASAN untracked
86		     |			|
87		     +- VMALLOC_START --+ vmalloc area start
88		     |			| KASAN untracked or
89		     |	vmalloc area	| KASAN shallowly populated in case
90		     |			|	CONFIG_KASAN_VMALLOC=y
91		     +- MODULES_VADDR --+ modules area start
92		     |			| KASAN allocated per module or
93		     |	modules area	| KASAN shallowly populated in case
94		     |			|	CONFIG_KASAN_VMALLOC=y
95		     +- __kaslr_offset -+ kernel rand. virt start
96		     |			| KASAN tracked
97		     | kernel text/data | phys == (kvirt - __kaslr_offset) +
98		     |			|	  __kaslr_offset_phys
99		     +- kernel .bss end + kernel rand. virt end
100		     |			|
101		     |	... unused gap	| KASAN untracked
102		     |			|
103		     +------------------+ UltraVisor Secure Storage limit
104		     |			|
105		     |	... unused gap	| KASAN untracked
106		     |			|
107		     +KASAN_SHADOW_START+ KASAN shadow memory start
108		     |			|
109		     |	 KASAN shadow	| KASAN untracked
110		     |			|
111		     +------------------+ ASCE limit
112