xref: /linux/Documentation/arch/riscv/vm-layout.rst (revision 1a371190a375f98c9b106f758ea41558c3f92556)
1ed843ae9SCosta Shulyupin.. SPDX-License-Identifier: GPL-2.0
2ed843ae9SCosta Shulyupin
3ed843ae9SCosta Shulyupin=====================================
4ed843ae9SCosta ShulyupinVirtual Memory Layout on RISC-V Linux
5ed843ae9SCosta Shulyupin=====================================
6ed843ae9SCosta Shulyupin
7ed843ae9SCosta Shulyupin:Author: Alexandre Ghiti <alex@ghiti.fr>
8ed843ae9SCosta Shulyupin:Date: 12 February 2021
9ed843ae9SCosta Shulyupin
10ed843ae9SCosta ShulyupinThis document describes the virtual memory layout used by the RISC-V Linux
11ed843ae9SCosta ShulyupinKernel.
12ed843ae9SCosta Shulyupin
13ed843ae9SCosta ShulyupinRISC-V Linux Kernel 32bit
14ed843ae9SCosta Shulyupin=========================
15ed843ae9SCosta Shulyupin
16ed843ae9SCosta ShulyupinRISC-V Linux Kernel SV32
17ed843ae9SCosta Shulyupin------------------------
18ed843ae9SCosta Shulyupin
19ed843ae9SCosta ShulyupinTODO
20ed843ae9SCosta Shulyupin
21ed843ae9SCosta ShulyupinRISC-V Linux Kernel 64bit
22ed843ae9SCosta Shulyupin=========================
23ed843ae9SCosta Shulyupin
24ed843ae9SCosta ShulyupinThe RISC-V privileged architecture document states that the 64bit addresses
25ed843ae9SCosta Shulyupin"must have bits 63–48 all equal to bit 47, or else a page-fault exception will
26ed843ae9SCosta Shulyupinoccur.": that splits the virtual address space into 2 halves separated by a very
27ed843ae9SCosta Shulyupinbig hole, the lower half is where the userspace resides, the upper half is where
28ed843ae9SCosta Shulyupinthe RISC-V Linux Kernel resides.
29ed843ae9SCosta Shulyupin
30ed843ae9SCosta ShulyupinRISC-V Linux Kernel SV39
31ed843ae9SCosta Shulyupin------------------------
32ed843ae9SCosta Shulyupin
33ed843ae9SCosta Shulyupin::
34ed843ae9SCosta Shulyupin
35ed843ae9SCosta Shulyupin  ========================================================================================================================
36ed843ae9SCosta Shulyupin      Start addr    |   Offset   |     End addr     |  Size   | VM area description
37ed843ae9SCosta Shulyupin  ========================================================================================================================
38ed843ae9SCosta Shulyupin                    |            |                  |         |
39ed843ae9SCosta Shulyupin   0000000000000000 |    0       | 0000003fffffffff |  256 GB | user-space virtual memory, different per mm
40ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
41ed843ae9SCosta Shulyupin                    |            |                  |         |
42ed843ae9SCosta Shulyupin   0000004000000000 | +256    GB | ffffffbfffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical
43ed843ae9SCosta Shulyupin                    |            |                  |         |     virtual memory addresses up to the -256 GB
44ed843ae9SCosta Shulyupin                    |            |                  |         |     starting offset of kernel mappings.
45ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
46ed843ae9SCosta Shulyupin                                                              |
47ed843ae9SCosta Shulyupin                                                              | Kernel-space virtual memory, shared between all processes:
48ed843ae9SCosta Shulyupin  ____________________________________________________________|___________________________________________________________
49ed843ae9SCosta Shulyupin                    |            |                  |         |
50*5c8405d7SStuart Menefy   ffffffc4fea00000 | -236    GB | ffffffc4feffffff |    6 MB | fixmap
51*5c8405d7SStuart Menefy   ffffffc4ff000000 | -236    GB | ffffffc4ffffffff |   16 MB | PCI io
52*5c8405d7SStuart Menefy   ffffffc500000000 | -236    GB | ffffffc5ffffffff |    4 GB | vmemmap
53*5c8405d7SStuart Menefy   ffffffc600000000 | -232    GB | ffffffd5ffffffff |   64 GB | vmalloc/ioremap space
54*5c8405d7SStuart Menefy   ffffffd600000000 | -168    GB | fffffff5ffffffff |  128 GB | direct mapping of all physical memory
55*5c8405d7SStuart Menefy                    |            |                  |         |
56ed843ae9SCosta Shulyupin   fffffff700000000 |  -36    GB | fffffffeffffffff |   32 GB | kasan
57ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
58ed843ae9SCosta Shulyupin                                                              |
59ed843ae9SCosta Shulyupin                                                              |
60ed843ae9SCosta Shulyupin  ____________________________________________________________|____________________________________________________________
61ed843ae9SCosta Shulyupin                    |            |                  |         |
62ed843ae9SCosta Shulyupin   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
63ed843ae9SCosta Shulyupin   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
64ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
65ed843ae9SCosta Shulyupin
66ed843ae9SCosta Shulyupin
67ed843ae9SCosta ShulyupinRISC-V Linux Kernel SV48
68ed843ae9SCosta Shulyupin------------------------
69ed843ae9SCosta Shulyupin
70ed843ae9SCosta Shulyupin::
71ed843ae9SCosta Shulyupin
72ed843ae9SCosta Shulyupin ========================================================================================================================
73ed843ae9SCosta Shulyupin      Start addr    |   Offset   |     End addr     |  Size   | VM area description
74ed843ae9SCosta Shulyupin ========================================================================================================================
75ed843ae9SCosta Shulyupin                    |            |                  |         |
76ed843ae9SCosta Shulyupin   0000000000000000 |    0       | 00007fffffffffff |  128 TB | user-space virtual memory, different per mm
77ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
78ed843ae9SCosta Shulyupin                    |            |                  |         |
79ed843ae9SCosta Shulyupin   0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical
80ed843ae9SCosta Shulyupin                    |            |                  |         | virtual memory addresses up to the -128 TB
81ed843ae9SCosta Shulyupin                    |            |                  |         | starting offset of kernel mappings.
82ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
83ed843ae9SCosta Shulyupin                                                              |
84ed843ae9SCosta Shulyupin                                                              | Kernel-space virtual memory, shared between all processes:
85ed843ae9SCosta Shulyupin  ____________________________________________________________|___________________________________________________________
86ed843ae9SCosta Shulyupin                    |            |                  |         |
87ed843ae9SCosta Shulyupin   ffff8d7ffea00000 |  -114.5 TB | ffff8d7ffeffffff |    6 MB | fixmap
88ed843ae9SCosta Shulyupin   ffff8d7fff000000 |  -114.5 TB | ffff8d7fffffffff |   16 MB | PCI io
89ed843ae9SCosta Shulyupin   ffff8d8000000000 |  -114.5 TB | ffff8f7fffffffff |    2 TB | vmemmap
90ed843ae9SCosta Shulyupin   ffff8f8000000000 |  -112.5 TB | ffffaf7fffffffff |   32 TB | vmalloc/ioremap space
91ed843ae9SCosta Shulyupin   ffffaf8000000000 |  -80.5  TB | ffffef7fffffffff |   64 TB | direct mapping of all physical memory
92ed843ae9SCosta Shulyupin   ffffef8000000000 |  -16.5  TB | fffffffeffffffff | 16.5 TB | kasan
93ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
94ed843ae9SCosta Shulyupin                                                              |
95ed843ae9SCosta Shulyupin                                                              | Identical layout to the 39-bit one from here on:
96ed843ae9SCosta Shulyupin  ____________________________________________________________|____________________________________________________________
97ed843ae9SCosta Shulyupin                    |            |                  |         |
98ed843ae9SCosta Shulyupin   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
99ed843ae9SCosta Shulyupin   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
100ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
101ed843ae9SCosta Shulyupin
102ed843ae9SCosta Shulyupin
103ed843ae9SCosta ShulyupinRISC-V Linux Kernel SV57
104ed843ae9SCosta Shulyupin------------------------
105ed843ae9SCosta Shulyupin
106ed843ae9SCosta Shulyupin::
107ed843ae9SCosta Shulyupin
108ed843ae9SCosta Shulyupin ========================================================================================================================
109ed843ae9SCosta Shulyupin      Start addr    |   Offset   |     End addr     |  Size   | VM area description
110ed843ae9SCosta Shulyupin ========================================================================================================================
111ed843ae9SCosta Shulyupin                    |            |                  |         |
112ed843ae9SCosta Shulyupin   0000000000000000 |   0        | 00ffffffffffffff |   64 PB | user-space virtual memory, different per mm
113ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
114ed843ae9SCosta Shulyupin                    |            |                  |         |
115ed843ae9SCosta Shulyupin   0100000000000000 | +64     PB | feffffffffffffff | ~16K PB | ... huge, almost 64 bits wide hole of non-canonical
116ed843ae9SCosta Shulyupin                    |            |                  |         | virtual memory addresses up to the -64 PB
117ed843ae9SCosta Shulyupin                    |            |                  |         | starting offset of kernel mappings.
118ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|___________________________________________________________
119ed843ae9SCosta Shulyupin                                                              |
120ed843ae9SCosta Shulyupin                                                              | Kernel-space virtual memory, shared between all processes:
121ed843ae9SCosta Shulyupin  ____________________________________________________________|___________________________________________________________
122ed843ae9SCosta Shulyupin                    |            |                  |         |
123ed843ae9SCosta Shulyupin   ff1bfffffea00000 | -57     PB | ff1bfffffeffffff |    6 MB | fixmap
124ed843ae9SCosta Shulyupin   ff1bffffff000000 | -57     PB | ff1bffffffffffff |   16 MB | PCI io
125ed843ae9SCosta Shulyupin   ff1c000000000000 | -57     PB | ff1fffffffffffff |    1 PB | vmemmap
126ed843ae9SCosta Shulyupin   ff20000000000000 | -56     PB | ff5fffffffffffff |   16 PB | vmalloc/ioremap space
127ed843ae9SCosta Shulyupin   ff60000000000000 | -40     PB | ffdeffffffffffff |   32 PB | direct mapping of all physical memory
128ed843ae9SCosta Shulyupin   ffdf000000000000 |  -8     PB | fffffffeffffffff |    8 PB | kasan
129ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
130ed843ae9SCosta Shulyupin                                                              |
131ed843ae9SCosta Shulyupin                                                              | Identical layout to the 39-bit one from here on:
132ed843ae9SCosta Shulyupin  ____________________________________________________________|____________________________________________________________
133ed843ae9SCosta Shulyupin                    |            |                  |         |
134ed843ae9SCosta Shulyupin   ffffffff00000000 |  -4     GB | ffffffff7fffffff |    2 GB | modules, BPF
135ed843ae9SCosta Shulyupin   ffffffff80000000 |  -2     GB | ffffffffffffffff |    2 GB | kernel
136ed843ae9SCosta Shulyupin  __________________|____________|__________________|_________|____________________________________________________________
137