aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-12-20 12:07:42 -0500
committerIngo Molnar <mingo@kernel.org>2017-12-22 14:13:00 -0500
commit146122e24bdf208015d629babba673e28d090709 (patch)
tree3f9251b93a20325bf8a4617d9aeb298f9e5ef71a
parentc05344947b37f7cda726e802457370bc6eac4d26 (diff)
x86/mm/dump_pagetables: Make the address hints correct and readable
The address hints are a trainwreck. The array entry numbers have to kept magically in sync with the actual hints, which is doomed as some of the array members are initialized at runtime via the entry numbers. Designated initializers have been around before this code was implemented.... Use the entry numbers to populate the address hints array and add the missing bits and pieces. Split 32 and 64 bit for readability sake. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/mm/dump_pagetables.c90
1 files changed, 53 insertions, 37 deletions
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index 1014cfb21c2c..fdf09d8f98da 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -44,10 +44,12 @@ struct addr_marker {
44 unsigned long max_lines; 44 unsigned long max_lines;
45}; 45};
46 46
47/* indices for address_markers; keep sync'd w/ address_markers below */ 47/* Address space markers hints */
48
49#ifdef CONFIG_X86_64
50
48enum address_markers_idx { 51enum address_markers_idx {
49 USER_SPACE_NR = 0, 52 USER_SPACE_NR = 0,
50#ifdef CONFIG_X86_64
51 KERNEL_SPACE_NR, 53 KERNEL_SPACE_NR,
52 LOW_KERNEL_NR, 54 LOW_KERNEL_NR,
53 VMALLOC_START_NR, 55 VMALLOC_START_NR,
@@ -56,56 +58,70 @@ enum address_markers_idx {
56 KASAN_SHADOW_START_NR, 58 KASAN_SHADOW_START_NR,
57 KASAN_SHADOW_END_NR, 59 KASAN_SHADOW_END_NR,
58#endif 60#endif
59# ifdef CONFIG_X86_ESPFIX64 61#ifdef CONFIG_X86_ESPFIX64
60 ESPFIX_START_NR, 62 ESPFIX_START_NR,
61# endif 63#endif
64#ifdef CONFIG_EFI
65 EFI_END_NR,
66#endif
62 HIGH_KERNEL_NR, 67 HIGH_KERNEL_NR,
63 MODULES_VADDR_NR, 68 MODULES_VADDR_NR,
64 MODULES_END_NR, 69 MODULES_END_NR,
65#else 70 FIXADDR_START_NR,
71 END_OF_SPACE_NR,
72};
73
74static struct addr_marker address_markers[] = {
75 [USER_SPACE_NR] = { 0, "User Space" },
76 [KERNEL_SPACE_NR] = { (1UL << 63), "Kernel Space" },
77 [LOW_KERNEL_NR] = { 0UL, "Low Kernel Mapping" },
78 [VMALLOC_START_NR] = { 0UL, "vmalloc() Area" },
79 [VMEMMAP_START_NR] = { 0UL, "Vmemmap" },
80#ifdef CONFIG_KASAN
81 [KASAN_SHADOW_START_NR] = { KASAN_SHADOW_START, "KASAN shadow" },
82 [KASAN_SHADOW_END_NR] = { KASAN_SHADOW_END, "KASAN shadow end" },
83#endif
84#ifdef CONFIG_X86_ESPFIX64
85 [ESPFIX_START_NR] = { ESPFIX_BASE_ADDR, "ESPfix Area", 16 },
86#endif
87#ifdef CONFIG_EFI
88 [EFI_END_NR] = { EFI_VA_END, "EFI Runtime Services" },
89#endif
90 [HIGH_KERNEL_NR] = { __START_KERNEL_map, "High Kernel Mapping" },
91 [MODULES_VADDR_NR] = { MODULES_VADDR, "Modules" },
92 [MODULES_END_NR] = { MODULES_END, "End Modules" },
93 [FIXADDR_START_NR] = { FIXADDR_START, "Fixmap Area" },
94 [END_OF_SPACE_NR] = { -1, NULL }
95};
96
97#else /* CONFIG_X86_64 */
98
99enum address_markers_idx {
100 USER_SPACE_NR = 0,
66 KERNEL_SPACE_NR, 101 KERNEL_SPACE_NR,
67 VMALLOC_START_NR, 102 VMALLOC_START_NR,
68 VMALLOC_END_NR, 103 VMALLOC_END_NR,
69# ifdef CONFIG_HIGHMEM 104#ifdef CONFIG_HIGHMEM
70 PKMAP_BASE_NR, 105 PKMAP_BASE_NR,
71# endif
72 FIXADDR_START_NR,
73#endif 106#endif
107 FIXADDR_START_NR,
108 END_OF_SPACE_NR,
74}; 109};
75 110
76/* Address space markers hints */
77static struct addr_marker address_markers[] = { 111static struct addr_marker address_markers[] = {
78 { 0, "User Space" }, 112 [USER_SPACE_NR] = { 0, "User Space" },
79#ifdef CONFIG_X86_64 113 [KERNEL_SPACE_NR] = { PAGE_OFFSET, "Kernel Mapping" },
80 { 0x8000000000000000UL, "Kernel Space" }, 114 [VMALLOC_START_NR] = { 0UL, "vmalloc() Area" },
81 { 0/* PAGE_OFFSET */, "Low Kernel Mapping" }, 115 [VMALLOC_END_NR] = { 0UL, "vmalloc() End" },
82 { 0/* VMALLOC_START */, "vmalloc() Area" }, 116#ifdef CONFIG_HIGHMEM
83 { 0/* VMEMMAP_START */, "Vmemmap" }, 117 [PKMAP_BASE_NR] = { 0UL, "Persistent kmap() Area" },
84#ifdef CONFIG_KASAN
85 { KASAN_SHADOW_START, "KASAN shadow" },
86 { KASAN_SHADOW_END, "KASAN shadow end" },
87#endif 118#endif
88# ifdef CONFIG_X86_ESPFIX64 119 [FIXADDR_START_NR] = { 0UL, "Fixmap area" },
89 { ESPFIX_BASE_ADDR, "ESPfix Area", 16 }, 120 [END_OF_SPACE_NR] = { -1, NULL }
90# endif
91# ifdef CONFIG_EFI
92 { EFI_VA_END, "EFI Runtime Services" },
93# endif
94 { __START_KERNEL_map, "High Kernel Mapping" },
95 { MODULES_VADDR, "Modules" },
96 { MODULES_END, "End Modules" },
97#else
98 { PAGE_OFFSET, "Kernel Mapping" },
99 { 0/* VMALLOC_START */, "vmalloc() Area" },
100 { 0/*VMALLOC_END*/, "vmalloc() End" },
101# ifdef CONFIG_HIGHMEM
102 { 0/*PKMAP_BASE*/, "Persistent kmap() Area" },
103# endif
104 { 0/*FIXADDR_START*/, "Fixmap Area" },
105#endif
106 { -1, NULL } /* End of list */
107}; 121};
108 122
123#endif /* !CONFIG_X86_64 */
124
109/* Multipliers for offsets within the PTEs */ 125/* Multipliers for offsets within the PTEs */
110#define PTE_LEVEL_MULT (PAGE_SIZE) 126#define PTE_LEVEL_MULT (PAGE_SIZE)
111#define PMD_LEVEL_MULT (PTRS_PER_PTE * PTE_LEVEL_MULT) 127#define PMD_LEVEL_MULT (PTRS_PER_PTE * PTE_LEVEL_MULT)