[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