[PATCH v3 10/13] riscv: Improve virtual kernel memory layout dump

潘庆霖 panqinglin2020 at iscas.ac.cn
Wed Dec 8 20:18:57 PST 2021


Hi Alex,


On 2021/12/6 18:46, Alexandre Ghiti wrote:
 > 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 at canonical.com>
 > ---
 >  arch/riscv/mm/init.c               | 67 +++++++++++++++++++++++-------
 >  drivers/pci/controller/pci-xgene.c |  2 +-
 >  include/linux/sizes.h              |  1 +
 >  3 files changed, 54 insertions(+), 16 deletions(-)
 >
 > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
 > index 6a19a1b1caf8..28de6ea0a720 100644
 > --- a/arch/riscv/mm/init.c
 > +++ b/arch/riscv/mm/init.c
 > @@ -79,37 +79,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));
 > +}
 > +#endif
 > +
 > +static inline void print_ml(char *name, unsigned long b, unsigned 
long t)
 > +{
 > +    unsigned long diff = t - b;
 > +
 > +#ifdef CONFIG_64BIT
 > +    if ((diff >> LOG2_SZ_1T) >= 10)
 > +        print_mlt(name, b, t);
 > +    else
 > +#endif
 > +    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);
 >  #ifdef 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);
 >  #endif
 >  }
 >  #else
 > diff --git a/drivers/pci/controller/pci-xgene.c 
b/drivers/pci/controller/pci-xgene.c
 > index e64536047b65..187dcf8a9694 100644
 > --- a/drivers/pci/controller/pci-xgene.c
 > +++ b/drivers/pci/controller/pci-xgene.c
 > @@ -21,6 +21,7 @@
 >  #include <linux/pci-ecam.h>
 >  #include <linux/platform_device.h>
 >  #include <linux/slab.h>
 > +#include <linux/sizes.h>
 >
 >  #include "../pci.h"
 >
 > @@ -50,7 +51,6 @@
 >  #define OB_LO_IO            0x00000002
 >  #define XGENE_PCIE_VENDORID        0x10E8
 >  #define XGENE_PCIE_DEVICEID        0xE004
 > -#define SZ_1T                (SZ_1G*1024ULL)

I am trying to apply your patchset on upstream's master or for-next 
branch. The git repo is

git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git

and I get a failure. The commit which I apply on is 
fa55b7dcdc43c1aa1ba12bca9d2dd4318c2a0dbf

I found the code here on that commit is:

#define OB_LO_IO            0x00000002
#define XGENE_PCIE_DEVICEID        0xE004
#define SZ_1T                    (SZ_1G*1024ULL)
#define PIPE_PHY_RATE_RD(src)        ((0xc000 & (u32)(src)) >> 0xe)

I think it may be the reason why the apply is failed. May I get your 
help to determine the reason?

Thanks,
Qinglin


 >
 >  #define PIPE_PHY_RATE_RD(src)        ((0xc000 & (u32)(src)) >> 0xe)
 >
 >  #define XGENE_V1_PCI_EXP_CAP        0x40
 > diff --git a/include/linux/sizes.h b/include/linux/sizes.h
 > index 1ac79bcee2bb..0bc6cf394b08 100644
 > --- a/include/linux/sizes.h
 > +++ b/include/linux/sizes.h
 > @@ -47,6 +47,7 @@
 >  #define SZ_8G                _AC(0x200000000, ULL)
 >  #define SZ_16G                _AC(0x400000000, ULL)
 >  #define SZ_32G                _AC(0x800000000, ULL)
 > +#define SZ_1T                _AC(0x10000000000, ULL)
 >  #define SZ_64T                _AC(0x400000000000, ULL)
 >
 >  #endif /* __LINUX_SIZES_H__ */




More information about the linux-riscv mailing list