[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