riscv: Prepare ptdump for vm layout dynamic addresses
This is a preparatory patch for sv48 support that will introduce dynamic PAGE_OFFSET. Dynamic PAGE_OFFSET implies that all zones (vmalloc, vmemmap, fixaddr...) whose addresses depend on PAGE_OFFSET become dynamic and can't be used to statically initialize the array used by ptdump to identify the different zones of the vm layout. Signed-off-by: Alexandre Ghiti <alex@ghiti.fr> Reviewed-by: Anup Patel <anup@brainfault.org> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
2a433cf8f3
commit
0df68ce4c2
@ -58,29 +58,56 @@ struct ptd_mm_info {
|
||||
unsigned long end;
|
||||
};
|
||||
|
||||
enum address_markers_idx {
|
||||
#ifdef CONFIG_KASAN
|
||||
KASAN_SHADOW_START_NR,
|
||||
KASAN_SHADOW_END_NR,
|
||||
#endif
|
||||
FIXMAP_START_NR,
|
||||
FIXMAP_END_NR,
|
||||
PCI_IO_START_NR,
|
||||
PCI_IO_END_NR,
|
||||
#ifdef CONFIG_SPARSEMEM_VMEMMAP
|
||||
VMEMMAP_START_NR,
|
||||
VMEMMAP_END_NR,
|
||||
#endif
|
||||
VMALLOC_START_NR,
|
||||
VMALLOC_END_NR,
|
||||
PAGE_OFFSET_NR,
|
||||
#ifdef CONFIG_64BIT
|
||||
MODULES_MAPPING_NR,
|
||||
#endif
|
||||
KERNEL_MAPPING_NR,
|
||||
END_OF_SPACE_NR
|
||||
};
|
||||
|
||||
static struct addr_marker address_markers[] = {
|
||||
#ifdef CONFIG_KASAN
|
||||
{KASAN_SHADOW_START, "Kasan shadow start"},
|
||||
{KASAN_SHADOW_END, "Kasan shadow end"},
|
||||
{0, "Kasan shadow start"},
|
||||
{0, "Kasan shadow end"},
|
||||
#endif
|
||||
{FIXADDR_START, "Fixmap start"},
|
||||
{FIXADDR_TOP, "Fixmap end"},
|
||||
{PCI_IO_START, "PCI I/O start"},
|
||||
{PCI_IO_END, "PCI I/O end"},
|
||||
{0, "Fixmap start"},
|
||||
{0, "Fixmap end"},
|
||||
{0, "PCI I/O start"},
|
||||
{0, "PCI I/O end"},
|
||||
#ifdef CONFIG_SPARSEMEM_VMEMMAP
|
||||
{VMEMMAP_START, "vmemmap start"},
|
||||
{VMEMMAP_END, "vmemmap end"},
|
||||
{0, "vmemmap start"},
|
||||
{0, "vmemmap end"},
|
||||
#endif
|
||||
{VMALLOC_START, "vmalloc() area"},
|
||||
{VMALLOC_END, "vmalloc() end"},
|
||||
{PAGE_OFFSET, "Linear mapping"},
|
||||
{0, "vmalloc() area"},
|
||||
{0, "vmalloc() end"},
|
||||
{0, "Linear mapping"},
|
||||
#ifdef CONFIG_64BIT
|
||||
{0, "Modules mapping"},
|
||||
#endif
|
||||
{0, "Kernel mapping (kernel, BPF)"},
|
||||
{-1, NULL},
|
||||
};
|
||||
|
||||
static struct ptd_mm_info kernel_ptd_info = {
|
||||
.mm = &init_mm,
|
||||
.markers = address_markers,
|
||||
.base_addr = KERN_VIRT_START,
|
||||
.base_addr = 0,
|
||||
.end = ULONG_MAX,
|
||||
};
|
||||
|
||||
@ -335,6 +362,28 @@ static int ptdump_init(void)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
address_markers[KASAN_SHADOW_START_NR].start_address = KASAN_SHADOW_START;
|
||||
address_markers[KASAN_SHADOW_END_NR].start_address = KASAN_SHADOW_END;
|
||||
#endif
|
||||
address_markers[FIXMAP_START_NR].start_address = FIXADDR_START;
|
||||
address_markers[FIXMAP_END_NR].start_address = FIXADDR_TOP;
|
||||
address_markers[PCI_IO_START_NR].start_address = PCI_IO_START;
|
||||
address_markers[PCI_IO_END_NR].start_address = PCI_IO_END;
|
||||
#ifdef CONFIG_SPARSEMEM_VMEMMAP
|
||||
address_markers[VMEMMAP_START_NR].start_address = VMEMMAP_START;
|
||||
address_markers[VMEMMAP_END_NR].start_address = VMEMMAP_END;
|
||||
#endif
|
||||
address_markers[VMALLOC_START_NR].start_address = VMALLOC_START;
|
||||
address_markers[VMALLOC_END_NR].start_address = VMALLOC_END;
|
||||
address_markers[PAGE_OFFSET_NR].start_address = PAGE_OFFSET;
|
||||
#ifdef CONFIG_64BIT
|
||||
address_markers[MODULES_MAPPING_NR].start_address = MODULES_VADDR;
|
||||
#endif
|
||||
address_markers[KERNEL_MAPPING_NR].start_address = kernel_virt_addr;
|
||||
|
||||
kernel_ptd_info.base_addr = KERN_VIRT_START;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pg_level); i++)
|
||||
for (j = 0; j < ARRAY_SIZE(pte_bits); j++)
|
||||
pg_level[i].mask |= pte_bits[j].mask;
|
||||
|
Loading…
Reference in New Issue
Block a user