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

Alexandre ghiti alex at ghiti.fr
Thu Dec 9 01:09:15 PST 2021


On 12/9/21 05:18, 潘庆霖 wrote:
> 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?


I will rebase my patchset on top of v5.16-rc4 shortly, I will fix that, 
this file changed in the meantime.

Thanks,

Alex


>
> 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__ */
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv



More information about the linux-riscv mailing list