Skip to contentSkip to conversation

arm64: mm: Enhance Virtual kernel memory layout

PATCH New Kefeng Wang 4 participants 21 messages Apr 13, 2016 – May 13, 2016 arm64

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 arm64: mm: Enhance Virtual kernel memory layout

1) Show kernel excetion vector region and bss segment information.
2) Only show modules and PCI I/O with corresponding config enabled.
3) Each line with single pr_cont, or lead to anomalous print in dmesg.

---
With this patch,

[    0.000000] Virtual kernel memory layout:
[    0.000000]      vector : 0xffffff8008084800 - 0xffffff8008084f80   (     1 KB)
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
[    0.000000]     .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
[    0.000000]       .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
[    0.000000]       .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]        .bss : 0xffffff8008ba2400 - 0xffffff8008bdf738   (   245 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
[    0.000000]               0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Before,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
    .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
      .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
      .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
              0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)
 arch/arm64/mm/init.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)
arch/arm64/mm/init.c +21 -11
index ea989d8..c6bcaa7 100644
@@ -345,6 +345,9 @@ static void __init free_unused_memmap(void)
  */
 void __init mem_init(void)
 {
+	/* kernel exception vectors, 16 entries and each one with 128bytes */
+	extern char vectors[];
+
 	swiotlb_init(1);
 
 	set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
@@ -363,34 +366,41 @@ void __init mem_init(void)
 #define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)
 
 	pr_notice("Virtual kernel memory layout:\n");
+	pr_cont("     vector : 0x%p - 0x%p   (%6ld KB)\n",
+		MLK(vectors, vectors + 0x780));
 #ifdef CONFIG_KASAN
 	pr_cont("    kasan   : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(KASAN_SHADOW_START, KASAN_SHADOW_END));
 #endif
+#ifdef CONFIG_MODULES
 	pr_cont("    modules : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(MODULES_VADDR, MODULES_END));
+#endif
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
-	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
-		MLK_ROUNDUP(_text, __start_rodata),
-		MLK_ROUNDUP(__start_rodata, _etext),
-		MLK_ROUNDUP(__init_begin, __init_end),
+	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(_text, __start_rodata));
+	pr_cont("    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__start_rodata, _etext));
+	pr_cont("      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__init_begin, __init_end));
+	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
-	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n"
-		"              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
-		MLG(VMEMMAP_START,
-		    VMEMMAP_START + VMEMMAP_SIZE),
+	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
+		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
+	pr_cont("              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
 		MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()),
 		    (unsigned long)virt_to_page(high_memory)));
 #endif
 	pr_cont("    fixed   : 0x%16lx - 0x%16lx   (%6ld KB)\n",
 		MLK(FIXADDR_START, FIXADDR_TOP));
+#ifdef CONFIG_PCI
 	pr_cont("    PCI I/O : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(PCI_IO_START, PCI_IO_END));
+#endif
 	pr_cont("    memory  : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(__phys_to_virt(memblock_start_of_DRAM()),
 		    (unsigned long)high_memory));
Signature · 1 line
2.6.0.GIT
#1 lore raw

PATCH 1/1 arm64: mm: Enhance Virtual kernel memory layout

Hi,

Quoted 1 line · Kefeng Wang

1) Show kernel excetion vector region and bss segment information.

Nit: exception

Quoted 2 lines

2) Only show modules and PCI I/O with corresponding config enabled.
3) Each line with single pr_cont, or lead to anomalous print in dmesg.

This commit message is a little confusing, it doesn't mention that this is to do with the dump of the kernel memory layout during boot. I presume the motivation is the missing time stamps when built with CONFIG_PRINTK_TIME.

Why add an entry for the vectors? They live in the text section, so this memory is already covered. Adding it like this means the list is out of order.

It is probably better to put the splitting of pr_cont() into one per line in a separate patch to adding new rows.

Quoted 51 lines

---
With this patch,

[    0.000000] Virtual kernel memory layout:
[    0.000000]      vector : 0xffffff8008084800 - 0xffffff8008084f80   (     1 KB)
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
[    0.000000]     .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
[    0.000000]       .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
[    0.000000]       .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]        .bss : 0xffffff8008ba2400 - 0xffffff8008bdf738   (   245 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
[    0.000000]               0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Before,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
    .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
      .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
      .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
              0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)
 arch/arm64/mm/init.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)
arch/arm64/mm/init.c +3 -0
index ea989d8..c6bcaa7 100644
@@ -345,6 +345,9 @@ static void __init free_unused_memmap(void)
  */
 void __init mem_init(void)
 {
+	/* kernel exception vectors, 16 entries and each one with 128bytes */
+	extern char vectors[];
+
 	swiotlb_init(1);
 
 	set_max_mapnr(pfn_to_page(max_pfn) - mem_map);

arch/arm64/mm/init.c void __init mem_init(void) · line 370

Quoted 5 lines
arch/arm64/mm/init.c +2 -0
@@ -363,34 +366,41 @@ void __init mem_init(void)
 #define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)
 
 	pr_notice("Virtual kernel memory layout:\n");
+	pr_cont("     vector : 0x%p - 0x%p   (%6ld KB)\n",
+		MLK(vectors, vectors + 0x780));

0x780? Shouldn't this be 0x800, or better SZ_2K?

Quoted 38 lines
arch/arm64/mm/init.c +14 -11
 #ifdef CONFIG_KASAN
 	pr_cont("    kasan   : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(KASAN_SHADOW_START, KASAN_SHADOW_END));
 #endif
+#ifdef CONFIG_MODULES
 	pr_cont("    modules : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(MODULES_VADDR, MODULES_END));
+#endif
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
-	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
-		MLK_ROUNDUP(_text, __start_rodata),
-		MLK_ROUNDUP(__start_rodata, _etext),
-		MLK_ROUNDUP(__init_begin, __init_end),
+	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(_text, __start_rodata));
+	pr_cont("    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__start_rodata, _etext));
+	pr_cont("      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__init_begin, __init_end));
+	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
-	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n"
-		"              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
-		MLG(VMEMMAP_START,
-		    VMEMMAP_START + VMEMMAP_SIZE),
+	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
+		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
+	pr_cont("              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
 		MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()),
 		    (unsigned long)virt_to_page(high_memory)));

arch/arm64/mm/init.c void __init mem_init(void) · line 406

Quoted 10 lines
arch/arm64/mm/init.c +2 -0
 #endif
 	pr_cont("    fixed   : 0x%16lx - 0x%16lx   (%6ld KB)\n",
 		MLK(FIXADDR_START, FIXADDR_TOP));
+#ifdef CONFIG_PCI
 	pr_cont("    PCI I/O : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(PCI_IO_START, PCI_IO_END));
+#endif
 	pr_cont("    memory  : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(__phys_to_virt(memblock_start_of_DRAM()),
 		    (unsigned long)high_memory));

Thanks,

James

#2 lore raw

PATCH 1/1 arm64: mm: Enhance Virtual kernel memory layout

Quoted 8 lines · James Morse

Hi,

Quoted 1 line · Kefeng Wang

1) Show kernel excetion vector region and bss segment information.

Nit: exception

Quoted 6 lines
Quoted 2 lines

2) Only show modules and PCI I/O with corresponding config enabled.
3) Each line with single pr_cont, or lead to anomalous print in dmesg.

This commit message is a little confusing, it doesn't mention that this is to do with the dump of the kernel memory layout during boot. I presume the motivation is the missing time stamps when built with CONFIG_PRINTK_TIME.

Right, the dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

Quoted 3 lines

Why add an entry for the vectors? They live in the text section, so this memory is already covered. Adding it like this means the list is out of order.

Ok, the arm64 vectors don't have a fixed address, and it is in text section, seem like it is not needed, not like in arm.

Quoted 3 lines

It is probably better to put the splitting of pr_cont() into one per line in a separate patch to adding new rows.

OK.

Quoted 55 lines
Quoted 55 lines

---
With this patch,

[    0.000000] Virtual kernel memory layout:
[    0.000000]      vector : 0xffffff8008084800 - 0xffffff8008084f80   (     1 KB)
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
[    0.000000]     .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
[    0.000000]       .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
[    0.000000]       .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]        .bss : 0xffffff8008ba2400 - 0xffffff8008bdf738   (   245 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
[    0.000000]               0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Before,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
    .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
      .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
      .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
              0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)
 arch/arm64/mm/init.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)
arch/arm64/mm/init.c +3 -0
index ea989d8..c6bcaa7 100644
@@ -345,6 +345,9 @@ static void __init free_unused_memmap(void)
  */
 void __init mem_init(void)
 {
+	/* kernel exception vectors, 16 entries and each one with 128bytes */
+	extern char vectors[];
+
 	swiotlb_init(1);
 
 	set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
@@ -363,34 +366,41 @@ void __init mem_init(void)
 #define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)
 
Quoted 5 lines

arch/arm64/mm/init.c void __init mem_init(void) · line 370

Quoted 3 lines
arch/arm64/mm/init.c +2 -0
 	pr_notice("Virtual kernel memory layout:\n");
+	pr_cont("     vector : 0x%p - 0x%p   (%6ld KB)\n",
+		MLK(vectors, vectors + 0x780));

0x780? Shouldn't this be 0x800, or better SZ_2K?

Oh, my mistake, it should be SZ_2K.

Quoted 59 lines
Quoted 40 lines
arch/arm64/mm/init.c +14 -11
 #ifdef CONFIG_KASAN
 	pr_cont("    kasan   : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(KASAN_SHADOW_START, KASAN_SHADOW_END));
 #endif
+#ifdef CONFIG_MODULES
 	pr_cont("    modules : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(MODULES_VADDR, MODULES_END));
+#endif
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
-	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
-		MLK_ROUNDUP(_text, __start_rodata),
-		MLK_ROUNDUP(__start_rodata, _etext),
-		MLK_ROUNDUP(__init_begin, __init_end),
+	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(_text, __start_rodata));
+	pr_cont("    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__start_rodata, _etext));
+	pr_cont("      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__init_begin, __init_end));
+	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
-	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n"
-		"              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
-		MLG(VMEMMAP_START,
-		    VMEMMAP_START + VMEMMAP_SIZE),
+	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
+		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
+	pr_cont("              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
 		MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()),
 		    (unsigned long)virt_to_page(high_memory)));

arch/arm64/mm/init.c void __init mem_init(void) · line 406

Quoted 10 lines
arch/arm64/mm/init.c +2 -0
 #endif
 	pr_cont("    fixed   : 0x%16lx - 0x%16lx   (%6ld KB)\n",
 		MLK(FIXADDR_START, FIXADDR_TOP));
+#ifdef CONFIG_PCI
 	pr_cont("    PCI I/O : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(PCI_IO_START, PCI_IO_END));
+#endif
 	pr_cont("    memory  : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(__phys_to_virt(memblock_start_of_DRAM()),
 		    (unsigned long)high_memory));

Thanks,

James

.

#3 lore raw

PATCH 1/1 arm64: mm: Enhance Virtual kernel memory layout

In reply to Kefeng Wang

Hi Kefeng,

Quoted 6 lines · Kefeng Wang

1) Show kernel excetion vector region and bss segment information.
2) Only show modules and PCI I/O with corresponding config enabled.
3) Each line with single pr_cont, or lead to anomalous print in dmesg.

---

Can you post a new version of this patch addressing James's feedback, please?

Thanks,

Will

#4 lore raw

PATCH 1/1 arm64: mm: Enhance Virtual kernel memory layout

Quoted 7 lines · Will Deacon

Hi Kefeng,

Quoted 4 lines · Kefeng Wang

1) Show kernel excetion vector region and bss segment information.
2) Only show modules and PCI I/O with corresponding config enabled.
3) Each line with single pr_cont, or lead to anomalous print in dmesg.

Quoted 5 lines
Quoted 2 lines

---

Can you post a new version of this patch addressing James's feedback, please?

Sorry for the later response, will do it ASAP.

Brs,
Kefeng

Quoted 7 lines

Thanks,

Will

.

#5 lore raw

v2 cover arm64: mm: Enhance Virtual kernel memory layout

In reply to Kefeng Wang

This is a micro enhance for Virtual kernel memory layout. Show bss info, add restriction for modules and PCI I/O printing, and make each line with single pr_cont().

With this patchset,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008755000   (  6996 KB)
[    0.000000]     .rodata : 0xffffff8008755000 - 0xffffff8008a3d000   (  2976 KB)
[    0.000000]       .init : 0xffffff8008a3d000 - 0xffffff8008b09000   (   816 KB)
[    0.000000]       .data : 0xffffff8008b09000 - 0xffffff8008ba6800   (   630 KB)
[    0.000000]        .bss : 0xffffff8008ba6800 - 0xffffff8008be3738   (   244 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
[    0.000000]               0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Before,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
    .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
      .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
      .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
              0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Changes since v1:
- Drop vector info and spilt the patch, suggested by James Morse.

Kefeng Wang (3):
arm64: mm: make pr_cont() per line in Virtual kernel memory layout
arm64: mm: Show bss segment in kernel memory layout
arm64: mm: Restrictive printing for modules and PCI I/O in memory
layout

 arch/arm64/mm/init.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)
Signature · 1 line
2.6.0.GIT
#6 lore raw

PATCH v2 1/3 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

---
 arch/arm64/mm/init.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)
arch/arm64/mm/init.c +10 -11
index ea989d8..ce2e400 100644
@@ -371,19 +371,18 @@ void __init mem_init(void)
 		MLM(MODULES_VADDR, MODULES_END));
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
-	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
-		MLK_ROUNDUP(_text, __start_rodata),
-		MLK_ROUNDUP(__start_rodata, _etext),
-		MLK_ROUNDUP(__init_begin, __init_end),
+	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(_text, __start_rodata));
+	pr_cont("    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__start_rodata, _etext));
+	pr_cont("      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__init_begin, __init_end));
+	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
-	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n"
-		"              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
-		MLG(VMEMMAP_START,
-		    VMEMMAP_START + VMEMMAP_SIZE),
+	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
+		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
+	pr_cont("              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
 		MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()),
 		    (unsigned long)virt_to_page(high_memory)));
 #endif
Signature · 1 line
2.6.0.GIT
#7 lore raw

PATCH v2 1/3 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Quoted 3 lines · Kefeng Wang

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

Looks good to me, but I can't reproduce the miss-aligned output on v4.6-rc4, I get:

Quoted 4 lines
[    0.000000] .text : 0xffffff8008080000 - 0xffffff8008887000   (  8220 KB)
[    0.000000] .rodata : 0xffffff8008887000 - 0xffffff8008bdc000 (  3412 KB)
[    0.000000] .init : 0xffffff8008bdc000 - 0xffffff8008cc3000   (   924 KB)
[    0.000000] .data : 0xffffff8008cc3000 - 0xffffff8008dd7200   (  1105 KB)

without this patch, but it evidently happens for you. Do you have any special build options or kernel version? I'd like to understand if there is some kconfig/earlycon option that affects this!

Thanks,

James

#8 lore raw

PATCH v2 1/3 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Quoted 6 lines · James Morse
Quoted 3 lines · Kefeng Wang

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

Looks good to me, but I can't reproduce the miss-aligned output on v4.6-rc4, I get:

Quoted 9 lines
Quoted 4 lines
[    0.000000] .text : 0xffffff8008080000 - 0xffffff8008887000   (  8220 KB)
[    0.000000] .rodata : 0xffffff8008887000 - 0xffffff8008bdc000 (  3412 KB)
[    0.000000] .init : 0xffffff8008bdc000 - 0xffffff8008cc3000   (   924 KB)
[    0.000000] .data : 0xffffff8008cc3000 - 0xffffff8008dd7200   (  1105 KB)

without this patch, but it evidently happens for you. Do you have any special build options or kernel version? I'd like to understand if there is some kconfig/earlycon option that affects this!

Interestingly, for me it only occurs when running dmesg, and not when observing the output from the console directly.

#9 lore raw

PATCH v2 1/3 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Hi Ard,

Quoted 12 lines · Ard Biesheuvel
Quoted 11 lines · James Morse
Quoted 3 lines · Kefeng Wang

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

Looks good to me, but I can't reproduce the miss-aligned output on v4.6-rc4, I get:

Quoted 4 lines
[    0.000000] .text : 0xffffff8008080000 - 0xffffff8008887000   (  8220 KB)
[    0.000000] .rodata : 0xffffff8008887000 - 0xffffff8008bdc000 (  3412 KB)
[    0.000000] .init : 0xffffff8008bdc000 - 0xffffff8008cc3000   (   924 KB)
[    0.000000] .data : 0xffffff8008cc3000 - 0xffffff8008dd7200   (  1105 KB)
Quoted 7 lines
Quoted 4 lines

without this patch, but it evidently happens for you. Do you have any special build options or kernel version? I'd like to understand if there is some kconfig/earlycon option that affects this!

Interestingly, for me it only occurs when running dmesg, and not when observing the output from the console directly.

Hmmm, after some more digging: dmesg on Ubuntu 15.04 miss-aligns this, but Ubuntu 14.04 doesn't....

Regardless, the patch fixes it, (and it looks the same on both ubuntu versions):

Quoted 4 lines

From the comment above 'pr_cont()' in include/linux/printk.h:
* Like KERN_CONT, pr_cont() should only be used when continuing
* a line with no newline ('\n') enclosed. Otherwise it defaults
* back to KERN_DEFAULT.

arm64 is probably confusing dmesg with its use of pr_cont("...\n").

Thanks,

James

15.04: util-linux 2.25.2-4ubuntu3
14.04: util-linux 2.20.1-5.1ubuntu20

#10 lore raw

PATCH v2 1/3 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Quoted 20 lines · James Morse

Hi Ard,

Quoted 17 lines · Ard Biesheuvel
Quoted 15 lines · James Morse
Quoted 3 lines · Kefeng Wang

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

Looks good to me, but I can't reproduce the miss-aligned output on v4.6-rc4, I get:

Quoted 4 lines
[    0.000000] .text : 0xffffff8008080000 - 0xffffff8008887000   (  8220 KB)
[    0.000000] .rodata : 0xffffff8008887000 - 0xffffff8008bdc000 (  3412 KB)
[    0.000000] .init : 0xffffff8008bdc000 - 0xffffff8008cc3000   (   924 KB)
[    0.000000] .data : 0xffffff8008cc3000 - 0xffffff8008dd7200   (  1105 KB)

without this patch, but it evidently happens for you. Do you have any special build options or kernel version? I'd like to understand if there is some kconfig/earlycon option that affects this!

Quoted 9 lines
Quoted 2 lines

Interestingly, for me it only occurs when running dmesg, and not when observing the output from the console directly.

Hmmm, after some more digging: dmesg on Ubuntu 15.04 miss-aligns this, but Ubuntu 14.04 doesn't....

Regardless, the patch fixes it, (and it looks the same on both ubuntu versions):

Thanks :)

Quoted 7 lines
Quoted 5 lines

From the comment above 'pr_cont()' in include/linux/printk.h:
* Like KERN_CONT, pr_cont() should only be used when continuing
* a line with no newline ('\n') enclosed. Otherwise it defaults
* back to KERN_DEFAULT.

arm64 is probably confusing dmesg with its use of pr_cont("...\n").

After check the util-linux, find this commit(b45c3da2e1581 tags/v2.26-rc2~86)

commit b45c3da2e15814ca0c5b2ed2608de34df60af4da

Author: Ingo Br<C3><BC>ckl <[email protected]>
Date:   Wed Jan 14 19:36:55 2015 +0100

dmesg: Enable proper indent for messages containing line breaks

Messages containing line breaks somehow look broken when additional time, facility or level information is displayed, because they partly appear in time/facility/level column.

Indent them accordingly.

After with this patch, the dmesg shows below,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008755000   (  6996 KB)
                   .rodata : 0xffffff8008755000 - 0xffffff8008a3d000   (  2976 KB)
                     .init : 0xffffff8008a3d000 - 0xffffff8008b09000   (   816 KB)
                     .data : 0xffffff8008b09000 - 0xffffff8008ba6800   (   630 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
                             0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

BRs,
Kefeng

Quoted 12 lines

Thanks,

James

15.04: util-linux 2.25.2-4ubuntu3
14.04: util-linux 2.20.1-5.1ubuntu20

.

#11 lore raw

PATCH v2 2/3 arm64: mm: Show bss segment in kernel memory layout

In reply to Kefeng Wang

Show the bss segment information as with text and data in Virtual memory kernel layout.

---
 arch/arm64/mm/init.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm64/mm/init.c +2 -0
index ce2e400..c96fe51 100644
@@ -379,6 +379,8 @@ void __init mem_init(void)
 		MLK_ROUNDUP(__init_begin, __init_end));
 	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
 	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
 		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
Signature · 1 line
2.6.0.GIT
#12 lore raw

PATCH v2 2/3 arm64: mm: Show bss segment in kernel memory layout

Quoted 14 lines · Kefeng Wang

Show the bss segment information as with text and data in Virtual memory kernel layout.

---
 arch/arm64/mm/init.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm64/mm/init.c +0 -0
index ce2e400..c96fe51 100644

arch/arm64/mm/init.c void __init mem_init(void) · line 386

Quoted 8 lines
arch/arm64/mm/init.c +2 -0
@@ -379,6 +379,8 @@ void __init mem_init(void)
 		MLK_ROUNDUP(__init_begin, __init_end));
 	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
 	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
 		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));

I think this is useful,

Thanks,

James

#13 lore raw

PATCH v2 3/3 arm64: mm: Restrictive printing for modules and PCI I/O in memory layout

In reply to Kefeng Wang

The modules and PCI I/O informations in Virtual kernel memory layout are inappropriate when corresponding config is not enabled, so don't show them then.

---
 arch/arm64/mm/init.c | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/mm/init.c +4 -0
index c96fe51..e06a445 100644
@@ -367,8 +367,10 @@ void __init mem_init(void)
 	pr_cont("    kasan   : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(KASAN_SHADOW_START, KASAN_SHADOW_END));
 #endif
+#ifdef CONFIG_MODULES
 	pr_cont("    modules : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(MODULES_VADDR, MODULES_END));
+#endif
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
 	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
@@ -390,8 +392,10 @@ void __init mem_init(void)
 #endif
 	pr_cont("    fixed   : 0x%16lx - 0x%16lx   (%6ld KB)\n",
 		MLK(FIXADDR_START, FIXADDR_TOP));
+#ifdef CONFIG_PCI
 	pr_cont("    PCI I/O : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(PCI_IO_START, PCI_IO_END));
+#endif
 	pr_cont("    memory  : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(__phys_to_virt(memblock_start_of_DRAM()),
 		    (unsigned long)high_memory));
Signature · 1 line
2.6.0.GIT
#14 lore raw

PATCH v2 3/3 arm64: mm: Restrictive printing for modules and PCI I/O in memory layout

Quoted 3 lines · Kefeng Wang

The modules and PCI I/O informations in Virtual kernel memory layout are inappropriate when corresponding config is not enabled, so don't show them then.

I'm not sure about this, it looks like these areas are still reserved, so this is still useful debug information. mm/dump.c will still print any mappings in these ranges, its good to be consistent.

Thanks,

James

Quoted 31 lines
---
 arch/arm64/mm/init.c | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/mm/init.c +4 -0
index c96fe51..e06a445 100644
@@ -367,8 +367,10 @@ void __init mem_init(void)
 	pr_cont("    kasan   : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(KASAN_SHADOW_START, KASAN_SHADOW_END));
 #endif
+#ifdef CONFIG_MODULES
 	pr_cont("    modules : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(MODULES_VADDR, MODULES_END));
+#endif
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
 	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
@@ -390,8 +392,10 @@ void __init mem_init(void)
 #endif
 	pr_cont("    fixed   : 0x%16lx - 0x%16lx   (%6ld KB)\n",
 		MLK(FIXADDR_START, FIXADDR_TOP));
+#ifdef CONFIG_PCI
 	pr_cont("    PCI I/O : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(PCI_IO_START, PCI_IO_END));
+#endif
 	pr_cont("    memory  : 0x%16lx - 0x%16lx   (%6ld MB)\n",
 		MLM(__phys_to_virt(memblock_start_of_DRAM()),
 		    (unsigned long)high_memory));
#15 lore raw

PATCH v2 3/3 arm64: mm: Restrictive printing for modules and PCI I/O in memory layout

Quoted 8 lines · James Morse
Quoted 3 lines · Kefeng Wang

The modules and PCI I/O informations in Virtual kernel memory layout are inappropriate when corresponding config is not enabled, so don't show them then.

I'm not sure about this, it looks like these areas are still reserved, so this is still useful debug information. mm/dump.c will still print any mappings in these ranges, its good to be consistent.

If the CONFIG is not enabled, I think the areas will not be reserved and not mapped, correct me if I am wrong. so it looks useless, but keeping them is ok for me.

BRs,
Kefeng

Quoted 6 lines

Thanks,

James

#16 lore raw

v3 cover arm64: mm: Enhance Virtual kernel memory layout

In reply to Kefeng Wang

This is a micro enhance for Virtual kernel memory layout. Show bss info, and make each line with single pr_cont().

With this patchset,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008755000   (  6996 KB)
[    0.000000]     .rodata : 0xffffff8008755000 - 0xffffff8008a3d000   (  2976 KB)
[    0.000000]       .init : 0xffffff8008a3d000 - 0xffffff8008b09000   (   816 KB)
[    0.000000]       .data : 0xffffff8008b09000 - 0xffffff8008ba6800   (   630 KB)
[    0.000000]        .bss : 0xffffff8008ba6800 - 0xffffff8008be3738   (   244 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
[    0.000000]               0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Before,

[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbdbfff0000   (   246 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008753000   (  6988 KB)
    .rodata : 0xffffff8008753000 - 0xffffff8008a3a000   (  2972 KB)
      .init : 0xffffff8008a3a000 - 0xffffff8008b06000   (   816 KB)
      .data : 0xffffff8008b06000 - 0xffffff8008ba2400   (   625 KB)
[    0.000000]     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
              0xffffffbdc0000000 - 0xffffffbdc8000000   (   128 MB actual)
[    0.000000]     fixed   : 0xffffffbffe7fd000 - 0xffffffbffec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbffee00000 - 0xffffffbfffe00000   (    16 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc200000000   (  8192 MB)

Changes since v2:
- Add tested/ack by James Morse.
- Remove restrictive printing, keep the same as mm/dump.c.

Changes since v1:
- Drop vector info and spilt the patch, suggested by James Morse.

Kefeng Wang (2):
arm64: mm: make pr_cont() per line in Virtual kernel memory layout
arm64: mm: Show bss segment in kernel memory layout

 arch/arm64/mm/init.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)
Signature · 1 line
2.6.0.GIT
#17 lore raw

PATCH v3 1/2 arm64: mm: make pr_cont() per line in Virtual kernel memory layout

Each line with single pr_cont() in Virtual kernel memory layout, or the dump of the kernel memory layout in dmesg is not aligned when PRINTK_TIME enabled, due to the missing time stamps.

---
 arch/arm64/mm/init.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)
arch/arm64/mm/init.c +10 -11
index ea989d8..ce2e400 100644
@@ -371,19 +371,18 @@ void __init mem_init(void)
 		MLM(MODULES_VADDR, MODULES_END));
 	pr_cont("    vmalloc : 0x%16lx - 0x%16lx   (%6ld GB)\n",
 		MLG(VMALLOC_START, VMALLOC_END));
-	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n"
-		"      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
-		MLK_ROUNDUP(_text, __start_rodata),
-		MLK_ROUNDUP(__start_rodata, _etext),
-		MLK_ROUNDUP(__init_begin, __init_end),
+	pr_cont("      .text : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(_text, __start_rodata));
+	pr_cont("    .rodata : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__start_rodata, _etext));
+	pr_cont("      .init : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__init_begin, __init_end));
+	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
-	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n"
-		"              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
-		MLG(VMEMMAP_START,
-		    VMEMMAP_START + VMEMMAP_SIZE),
+	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
+		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
+	pr_cont("              0x%16lx - 0x%16lx   (%6ld MB actual)\n",
 		MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()),
 		    (unsigned long)virt_to_page(high_memory)));
 #endif
Signature · 1 line
2.6.0.GIT
#18 lore raw

PATCH v3 2/2 arm64: mm: Show bss segment in kernel memory layout

In reply to Kefeng Wang

Show the bss segment information as with text and data in Virtual memory kernel layout.

---
 arch/arm64/mm/init.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm64/mm/init.c +2 -0
index ce2e400..c96fe51 100644
@@ -379,6 +379,8 @@ void __init mem_init(void)
 		MLK_ROUNDUP(__init_begin, __init_end));
 	pr_cont("      .data : 0x%p" " - 0x%p" "   (%6ld KB)\n",
 		MLK_ROUNDUP(_sdata, _edata));
+	pr_cont("       .bss : 0x%p" " - 0x%p" "   (%6ld KB)\n",
+		MLK_ROUNDUP(__bss_start, __bss_stop));
 #ifdef CONFIG_SPARSEMEM_VMEMMAP
 	pr_cont("    vmemmap : 0x%16lx - 0x%16lx   (%6ld GB maximum)\n",
 		MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE));
Signature · 1 line
2.6.0.GIT
#19 lore raw

v3 cover arm64: mm: Enhance Virtual kernel memory layout

In reply to Kefeng Wang
Quoted 2 lines · Kefeng Wang

This is a micro enhance for Virtual kernel memory layout. Show bss info, and make each line with single pr_cont().

I already queued[1] the previous version of this after James acked it, so if you want to make further changes, please send incremental patches for review.

Will

[1]
https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git/commit/?h=for-next/core&id=9974723e31d1fa99e3c0efb2ae6cbbf089c0080c
https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git/commit/?h=for-next/core&id=d32351c8242b7067b3f3e3a6caf7a387ff43f978

#20 lore raw

v3 cover arm64: mm: Enhance Virtual kernel memory layout

Quoted 8 lines · Will Deacon
Quoted 2 lines · Kefeng Wang

This is a micro enhance for Virtual kernel memory layout. Show bss info, and make each line with single pr_cont().

I already queued[1] the previous version of this after James acked it, so if you want to make further changes, please send incremental patches for review.

I can't see them before, thanks Will.

BRs,
Kefeng

Quoted 8 lines

Will

[1]
https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git/commit/?h=for-next/core&id=9974723e31d1fa99e3c0efb2ae6cbbf089c0080c
https://git.kernel.org/cgit/linux/kernel/git/arm64/linux.git/commit/?h=for-next/core&id=d32351c8242b7067b3f3e3a6caf7a387ff43f978

.