mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 21:03:32 +00:00
riscv: Improve virtual kernel memory layout dump
With the arrival of sv48 and its large address space, it would be cumbersome to statically define the unit size to use to print the different portions of the virtual memory layout: instead, determine it dynamically. Signed-off-by: Alexandre Ghiti <alexandre.ghiti@canonical.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
This commit is contained in:
parent
35d33c76d6
commit
26b8f69edd
1 changed files with 51 additions and 15 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue