riscv: Introduce structure that group all variables regarding kernel mapping
[linux-2.6-microblaze.git] / arch / riscv / mm / ptdump.c
index ace74de..ee4e5c1 100644 (file)
@@ -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,
+       KERNEL_MAPPING_NR,
+#endif
+       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
+       {0, "vmalloc() area"},
+       {0, "vmalloc() end"},
+       {0, "Linear mapping"},
+#ifdef CONFIG_64BIT
+       {0, "Modules mapping"},
+       {0, "Kernel mapping (kernel, BPF)"},
 #endif
-       {VMALLOC_START,         "vmalloc() area"},
-       {VMALLOC_END,           "vmalloc() end"},
-       {PAGE_OFFSET,           "Linear mapping"},
        {-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,
 };
 
@@ -331,10 +358,32 @@ static int ptdump_show(struct seq_file *m, void *v)
 
 DEFINE_SHOW_ATTRIBUTE(ptdump);
 
-static int ptdump_init(void)
+static int __init 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;
+       address_markers[KERNEL_MAPPING_NR].start_address = kernel_map.virt_addr;
+#endif
+
+       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;