diff options
author | Greg Ungerer <gerg@uclinux.org> | 2011-10-13 02:59:55 -0400 |
---|---|---|
committer | Greg Ungerer <gerg@uclinux.org> | 2011-12-24 06:47:57 -0500 |
commit | e87c09a899d38d1b6858e010c22a1200fb77965d (patch) | |
tree | 4d6fb0c19423589d218e0d9e7161e2758608b5f2 | |
parent | 361a541dc2373e57cfa7a63e95fbe448ff5675d4 (diff) |
m68k: print memory layout info in boot log
Output a table of the kernel memory regions at boot time.
This is taken directly from the ARM architecture code that does this.
The table looks like this:
Virtual kernel memory layout:
vector : 0x00000000 - 0x00000400 ( 0 KiB)
kmap : 0xd0000000 - 0xe0000000 ( 256 MiB)
vmalloc : 0xc0000000 - 0xcfffffff ( 255 MiB)
lowmem : 0x00000000 - 0x02000000 ( 32 MiB)
.init : 0x00128000 - 0x00134000 ( 48 KiB)
.text : 0x00020000 - 0x00118d54 ( 996 KiB)
.data : 0x00118d60 - 0x00126000 ( 53 KiB)
.bss : 0x00134000 - 0x001413e0 ( 53 KiB)
This has been very useful while debugging the ColdFire virtual memory
support code. But in general I think it is nice to know extacly where
the kernel has layed everything out on boot.
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
-rw-r--r-- | arch/m68k/include/asm/traps.h | 1 | ||||
-rw-r--r-- | arch/m68k/kernel/vmlinux-std.lds | 2 | ||||
-rw-r--r-- | arch/m68k/kernel/vmlinux-sun3.lds | 2 | ||||
-rw-r--r-- | arch/m68k/mm/init_mm.c | 34 |
4 files changed, 39 insertions, 0 deletions
diff --git a/arch/m68k/include/asm/traps.h b/arch/m68k/include/asm/traps.h index 151068f64f44..4aff3358fbaf 100644 --- a/arch/m68k/include/asm/traps.h +++ b/arch/m68k/include/asm/traps.h | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | typedef void (*e_vector)(void); | 19 | typedef void (*e_vector)(void); |
20 | extern e_vector vectors[]; | 20 | extern e_vector vectors[]; |
21 | extern e_vector *_ramvec; | ||
21 | 22 | ||
22 | asmlinkage void auto_inthandler(void); | 23 | asmlinkage void auto_inthandler(void); |
23 | asmlinkage void user_inthandler(void); | 24 | asmlinkage void user_inthandler(void); |
diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds index d0993594f558..63407c836826 100644 --- a/arch/m68k/kernel/vmlinux-std.lds +++ b/arch/m68k/kernel/vmlinux-std.lds | |||
@@ -31,7 +31,9 @@ SECTIONS | |||
31 | 31 | ||
32 | RW_DATA_SECTION(16, PAGE_SIZE, THREAD_SIZE) | 32 | RW_DATA_SECTION(16, PAGE_SIZE, THREAD_SIZE) |
33 | 33 | ||
34 | _sbss = .; | ||
34 | BSS_SECTION(0, 0, 0) | 35 | BSS_SECTION(0, 0, 0) |
36 | _ebss = .; | ||
35 | 37 | ||
36 | _edata = .; /* End of data section */ | 38 | _edata = .; /* End of data section */ |
37 | 39 | ||
diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds index 8080469ee6c1..ad0f46d64c0b 100644 --- a/arch/m68k/kernel/vmlinux-sun3.lds +++ b/arch/m68k/kernel/vmlinux-sun3.lds | |||
@@ -44,7 +44,9 @@ __init_begin = .; | |||
44 | . = ALIGN(PAGE_SIZE); | 44 | . = ALIGN(PAGE_SIZE); |
45 | __init_end = .; | 45 | __init_end = .; |
46 | 46 | ||
47 | _sbss = .; | ||
47 | BSS_SECTION(0, 0, 0) | 48 | BSS_SECTION(0, 0, 0) |
49 | _ebss = .; | ||
48 | 50 | ||
49 | _end = . ; | 51 | _end = . ; |
50 | 52 | ||
diff --git a/arch/m68k/mm/init_mm.c b/arch/m68k/mm/init_mm.c index bbe525434ccb..85c5f0eee9ff 100644 --- a/arch/m68k/mm/init_mm.c +++ b/arch/m68k/mm/init_mm.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/page.h> | 24 | #include <asm/page.h> |
25 | #include <asm/pgalloc.h> | 25 | #include <asm/pgalloc.h> |
26 | #include <asm/system.h> | 26 | #include <asm/system.h> |
27 | #include <asm/traps.h> | ||
27 | #include <asm/machdep.h> | 28 | #include <asm/machdep.h> |
28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
29 | #ifdef CONFIG_ATARI | 30 | #ifdef CONFIG_ATARI |
@@ -75,6 +76,38 @@ extern void init_pointer_table(unsigned long ptable); | |||
75 | 76 | ||
76 | extern pmd_t *zero_pgtable; | 77 | extern pmd_t *zero_pgtable; |
77 | 78 | ||
79 | #if defined(CONFIG_MMU) && !defined(CONFIG_COLDFIRE) | ||
80 | #define VECTORS &vectors[0] | ||
81 | #else | ||
82 | #define VECTORS _ramvec | ||
83 | #endif | ||
84 | |||
85 | void __init print_memmap(void) | ||
86 | { | ||
87 | #define UL(x) ((unsigned long) (x)) | ||
88 | #define MLK(b, t) UL(b), UL(t), (UL(t) - UL(b)) >> 10 | ||
89 | #define MLM(b, t) UL(b), UL(t), (UL(t) - UL(b)) >> 20 | ||
90 | #define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), 1024) | ||
91 | |||
92 | pr_notice("Virtual kernel memory layout:\n" | ||
93 | " vector : 0x%08lx - 0x%08lx (%4ld KiB)\n" | ||
94 | " kmap : 0x%08lx - 0x%08lx (%4ld MiB)\n" | ||
95 | " vmalloc : 0x%08lx - 0x%08lx (%4ld MiB)\n" | ||
96 | " lowmem : 0x%08lx - 0x%08lx (%4ld MiB)\n" | ||
97 | " .init : 0x%p" " - 0x%p" " (%4d KiB)\n" | ||
98 | " .text : 0x%p" " - 0x%p" " (%4d KiB)\n" | ||
99 | " .data : 0x%p" " - 0x%p" " (%4d KiB)\n" | ||
100 | " .bss : 0x%p" " - 0x%p" " (%4d KiB)\n", | ||
101 | MLK(VECTORS, VECTORS + 256), | ||
102 | MLM(KMAP_START, KMAP_END), | ||
103 | MLM(VMALLOC_START, VMALLOC_END), | ||
104 | MLM(PAGE_OFFSET, (unsigned long)high_memory), | ||
105 | MLK_ROUNDUP(__init_begin, __init_end), | ||
106 | MLK_ROUNDUP(_stext, _etext), | ||
107 | MLK_ROUNDUP(_sdata, _edata), | ||
108 | MLK_ROUNDUP(_sbss, _ebss)); | ||
109 | } | ||
110 | |||
78 | void __init mem_init(void) | 111 | void __init mem_init(void) |
79 | { | 112 | { |
80 | pg_data_t *pgdat; | 113 | pg_data_t *pgdat; |
@@ -125,6 +158,7 @@ void __init mem_init(void) | |||
125 | codepages << (PAGE_SHIFT-10), | 158 | codepages << (PAGE_SHIFT-10), |
126 | datapages << (PAGE_SHIFT-10), | 159 | datapages << (PAGE_SHIFT-10), |
127 | initpages << (PAGE_SHIFT-10)); | 160 | initpages << (PAGE_SHIFT-10)); |
161 | print_memmap(); | ||
128 | } | 162 | } |
129 | 163 | ||
130 | #ifdef CONFIG_BLK_DEV_INITRD | 164 | #ifdef CONFIG_BLK_DEV_INITRD |