brintos

brintos / linux-shallow public Read only

0
0
Text · 9.0 KiB · eabec99 Raw
137 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3=====================================4Virtual Memory Layout on RISC-V Linux5=====================================6 7:Author: Alexandre Ghiti <alex@ghiti.fr>8:Date: 12 February 20219 10This document describes the virtual memory layout used by the RISC-V Linux11Kernel.12 13RISC-V Linux Kernel 32bit14=========================15 16RISC-V Linux Kernel SV3217------------------------18 19TODO20 21RISC-V Linux Kernel 64bit22=========================23 24The RISC-V privileged architecture document states that the 64bit addresses25"must have bits 63–48 all equal to bit 47, or else a page-fault exception will26occur.": that splits the virtual address space into 2 halves separated by a very27big hole, the lower half is where the userspace resides, the upper half is where28the RISC-V Linux Kernel resides.29 30RISC-V Linux Kernel SV3931------------------------32 33::34 35  ========================================================================================================================36      Start addr    |   Offset   |     End addr     |  Size   | VM area description37  ========================================================================================================================38                    |            |                  |         |39   0000000000000000 |    0       | 0000003fffffffff |  256 GB | user-space virtual memory, different per mm40  __________________|____________|__________________|_________|___________________________________________________________41                    |            |                  |         |42   0000004000000000 | +256    GB | ffffffbfffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical43                    |            |                  |         |     virtual memory addresses up to the -256 GB44                    |            |                  |         |     starting offset of kernel mappings.45  __________________|____________|__________________|_________|___________________________________________________________46                                                              |47                                                              | Kernel-space virtual memory, shared between all processes:48  ____________________________________________________________|___________________________________________________________49                    |            |                  |         |50   ffffffc4fea00000 | -236    GB | ffffffc4feffffff |    6 MB | fixmap51   ffffffc4ff000000 | -236    GB | ffffffc4ffffffff |   16 MB | PCI io52   ffffffc500000000 | -236    GB | ffffffc5ffffffff |    4 GB | vmemmap53   ffffffc600000000 | -232    GB | ffffffd5ffffffff |   64 GB | vmalloc/ioremap space54   ffffffd600000000 | -168    GB | fffffff5ffffffff |  128 GB | direct mapping of all physical memory55                    |            |                  |         |56   fffffff700000000 |  -36    GB | fffffffeffffffff |   32 GB | kasan57  __________________|____________|__________________|_________|____________________________________________________________58                                                              |59                                                              |60  ____________________________________________________________|____________________________________________________________61                    |            |                  |         |62   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF63   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel64  __________________|____________|__________________|_________|____________________________________________________________65 66 67RISC-V Linux Kernel SV4868------------------------69 70::71 72 ========================================================================================================================73      Start addr    |   Offset   |     End addr     |  Size   | VM area description74 ========================================================================================================================75                    |            |                  |         |76   0000000000000000 |    0       | 00007fffffffffff |  128 TB | user-space virtual memory, different per mm77  __________________|____________|__________________|_________|___________________________________________________________78                    |            |                  |         |79   0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical80                    |            |                  |         | virtual memory addresses up to the -128 TB81                    |            |                  |         | starting offset of kernel mappings.82  __________________|____________|__________________|_________|___________________________________________________________83                                                              |84                                                              | Kernel-space virtual memory, shared between all processes:85  ____________________________________________________________|___________________________________________________________86                    |            |                  |         |87   ffff8d7ffea00000 |  -114.5 TB | ffff8d7ffeffffff |    6 MB | fixmap88   ffff8d7fff000000 |  -114.5 TB | ffff8d7fffffffff |   16 MB | PCI io89   ffff8d8000000000 |  -114.5 TB | ffff8f7fffffffff |    2 TB | vmemmap90   ffff8f8000000000 |  -112.5 TB | ffffaf7fffffffff |   32 TB | vmalloc/ioremap space91   ffffaf8000000000 |  -80.5  TB | ffffef7fffffffff |   64 TB | direct mapping of all physical memory92   ffffef8000000000 |  -16.5  TB | fffffffeffffffff | 16.5 TB | kasan93  __________________|____________|__________________|_________|____________________________________________________________94                                                              |95                                                              | Identical layout to the 39-bit one from here on:96  ____________________________________________________________|____________________________________________________________97                    |            |                  |         |98   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF99   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel100  __________________|____________|__________________|_________|____________________________________________________________101 102 103RISC-V Linux Kernel SV57104------------------------105 106::107 108 ========================================================================================================================109      Start addr    |   Offset   |     End addr     |  Size   | VM area description110 ========================================================================================================================111                    |            |                  |         |112   0000000000000000 |   0        | 00ffffffffffffff |   64 PB | user-space virtual memory, different per mm113  __________________|____________|__________________|_________|___________________________________________________________114                    |            |                  |         |115   0100000000000000 | +64     PB | feffffffffffffff | ~16K PB | ... huge, almost 64 bits wide hole of non-canonical116                    |            |                  |         | virtual memory addresses up to the -64 PB117                    |            |                  |         | starting offset of kernel mappings.118  __________________|____________|__________________|_________|___________________________________________________________119                                                              |120                                                              | Kernel-space virtual memory, shared between all processes:121  ____________________________________________________________|___________________________________________________________122                    |            |                  |         |123   ff1bfffffea00000 | -57     PB | ff1bfffffeffffff |    6 MB | fixmap124   ff1bffffff000000 | -57     PB | ff1bffffffffffff |   16 MB | PCI io125   ff1c000000000000 | -57     PB | ff1fffffffffffff |    1 PB | vmemmap126   ff20000000000000 | -56     PB | ff5fffffffffffff |   16 PB | vmalloc/ioremap space127   ff60000000000000 | -40     PB | ffdeffffffffffff |   32 PB | direct mapping of all physical memory128   ffdf000000000000 |  -8     PB | fffffffeffffffff |    8 PB | kasan129  __________________|____________|__________________|_________|____________________________________________________________130                                                              |131                                                              | Identical layout to the 39-bit one from here on:132  ____________________________________________________________|____________________________________________________________133                    |            |                  |         |134   ffffffff00000000 |  -4     GB | ffffffff7fffffff |    2 GB | modules, BPF135   ffffffff80000000 |  -2     GB | ffffffffffffffff |    2 GB | kernel136  __________________|____________|__________________|_________|____________________________________________________________137