riscv: Improve virtual kernel memory layout dump
[linux-2.6-microblaze.git] / arch / riscv / mm / init.c
index eed6135..7d8da61 100644 (file)
@@ -76,38 +76,74 @@ static void __init zone_sizes_init(void)
 }
 
 #if defined(CONFIG_MMU) && defined(CONFIG_DEBUG_VM)
+
+#define LOG2_SZ_1K  ilog2(SZ_1K)
+#define LOG2_SZ_1M  ilog2(SZ_1M)
+#define LOG2_SZ_1G  ilog2(SZ_1G)
+#define LOG2_SZ_1T  ilog2(SZ_1T)
+
 static inline void print_mlk(char *name, unsigned long b, unsigned long t)
 {
        pr_notice("%12s : 0x%08lx - 0x%08lx   (%4ld kB)\n", name, b, t,
-                 (((t) - (b)) >> 10));
+                 (((t) - (b)) >> LOG2_SZ_1K));
 }
 
 static inline void print_mlm(char *name, unsigned long b, unsigned long t)
 {
        pr_notice("%12s : 0x%08lx - 0x%08lx   (%4ld MB)\n", name, b, t,
-                 (((t) - (b)) >> 20));
+                 (((t) - (b)) >> LOG2_SZ_1M));
+}
+
+static inline void print_mlg(char *name, unsigned long b, unsigned long t)
+{
+       pr_notice("%12s : 0x%08lx - 0x%08lx   (%4ld GB)\n", name, b, t,
+                  (((t) - (b)) >> LOG2_SZ_1G));
+}
+
+#ifdef CONFIG_64BIT
+static inline void print_mlt(char *name, unsigned long b, unsigned long t)
+{
+       pr_notice("%12s : 0x%08lx - 0x%08lx   (%4ld TB)\n", name, b, t,
+                  (((t) - (b)) >> LOG2_SZ_1T));
+}
+#else
+#define print_mlt(n, b, t) do {} while (0)
+#endif
+
+static inline void print_ml(char *name, unsigned long b, unsigned long t)
+{
+       unsigned long diff = t - b;
+
+       if (IS_ENABLED(CONFIG_64BIT) && (diff >> LOG2_SZ_1T) >= 10)
+               print_mlt(name, b, t);
+       else if ((diff >> LOG2_SZ_1G) >= 10)
+               print_mlg(name, b, t);
+       else if ((diff >> LOG2_SZ_1M) >= 10)
+               print_mlm(name, b, t);
+       else
+               print_mlk(name, b, t);
 }
 
 static void __init print_vm_layout(void)
 {
        pr_notice("Virtual kernel memory layout:\n");
-       print_mlk("fixmap", (unsigned long)FIXADDR_START,
-                 (unsigned long)FIXADDR_TOP);
-       print_mlm("pci io", (unsigned long)PCI_IO_START,
-                 (unsigned long)PCI_IO_END);
-       print_mlm("vmemmap", (unsigned long)VMEMMAP_START,
-                 (unsigned long)VMEMMAP_END);
-       print_mlm("vmalloc", (unsigned long)VMALLOC_START,
-                 (unsigned long)VMALLOC_END);
-       print_mlm("lowmem", (unsigned long)PAGE_OFFSET,
-                 (unsigned long)high_memory);
+       print_ml("fixmap", (unsigned long)FIXADDR_START,
+               (unsigned long)FIXADDR_TOP);
+       print_ml("pci io", (unsigned long)PCI_IO_START,
+               (unsigned long)PCI_IO_END);
+       print_ml("vmemmap", (unsigned long)VMEMMAP_START,
+               (unsigned long)VMEMMAP_END);
+       print_ml("vmalloc", (unsigned long)VMALLOC_START,
+               (unsigned long)VMALLOC_END);
+       print_ml("lowmem", (unsigned long)PAGE_OFFSET,
+               (unsigned long)high_memory);
        if (IS_ENABLED(CONFIG_64BIT)) {
 #ifdef CONFIG_KASAN
-               print_mlm("kasan", KASAN_SHADOW_START, KASAN_SHADOW_END);
+               print_ml("kasan", KASAN_SHADOW_START, KASAN_SHADOW_END);
 #endif
 
-               print_mlm("kernel", (unsigned long)KERNEL_LINK_ADDR,
-                         (unsigned long)ADDRESS_SPACE_END);
+               print_ml("kernel", (unsigned long)KERNEL_LINK_ADDR,
+                        (unsigned long)ADDRESS_SPACE_END);
        }
 }
 #else