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