-----Original Message-----
> Before the kernel v5.7, the VMEMMAP_END does not exit.
> 
> In the patch
>    "e397e1b arm64: update the modules/vmalloc/vmemmap ranges"
> it sets -1(0xffffffffffffffffUL) for vmemmap_end for
> the kernel versions before v5.7.
> 
> But from the arch/arm64/mm/dump.c (before kernel v5.7):
>     ......................................
>       { VMEMMAP_START + VMEMMAP_SIZE, "vmemmap end" }
>     ......................................
> we can know that the vmemmap_end should always be:
>       vmemmap_end = vmemmap_vaddr + vmemmap_size;
> 
> This patch fixes this issue.
> 
> Signed-off-by: Huang Shijie <[email protected]>

This patch looks good to me.

Acked-by: Kazuhito Hagio <[email protected]>

Thanks,
Kazu

> ---
>  arm64.c | 26 +++++++++++---------------
>  1 file changed, 11 insertions(+), 15 deletions(-)
> 
> diff --git a/arm64.c b/arm64.c
> index d81c2b9..f75599e 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -285,11 +285,7 @@ arm64_init(int when)
>                               ms->vmalloc_start_addr  = r->vmalloc_start_addr;
>                               ms->vmalloc_end         = r->vmalloc_end - 1;
>                               ms->vmemmap_vaddr       = r->vmemmap_vaddr;
> -                             if (THIS_KERNEL_VERSION >= LINUX(5, 7, 0))
> -                                     ms->vmemmap_end         = 
> r->vmemmap_end - 1;
> -                             else
> -                                     ms->vmemmap_end         = -1;
> -
> +                             ms->vmemmap_end         = r->vmemmap_end - 1;
>                       } else if (ms->VA_BITS_ACTUAL) {
>                               ms->modules_vaddr = (st->_stext_vmlinux & 
> TEXT_OFFSET_MASK) -
> ARM64_MODULES_VSIZE;
>                               ms->modules_end = ms->modules_vaddr + 
> ARM64_MODULES_VSIZE -1;
> @@ -739,15 +735,15 @@ static struct kernel_range *arm64_get_range_v5_4(struct 
> machine_specific *ms)
>       vmemmap_size = (_PAGE_END(v) - PAGE_OFFSET) >> vmem_shift;
> 
>       r->vmemmap_vaddr = (-vmemmap_size - SZ_2M);
> -     if (THIS_KERNEL_VERSION >= LINUX(5, 7, 0)) {
> -             /*
> -              *  In the v5.7, the patch: "bbd6ec605c arm64/mm: Enable memory 
> hot remove"
> -              *      adds the VMEMMAP_END.
> -              */
> -             r->vmemmap_end = r->vmemmap_vaddr + vmemmap_size;
> -     } else {
> -             r->vmemmap_end = 0xffffffffffffffffUL;
> -     }
> +     /*
> +      *  In the v5.7, the patch: "bbd6ec605c arm64/mm: Enable memory hot 
> remove"
> +      *      adds the VMEMMAP_END.
> +      *
> +      *  But before the VMEMMAP_END was added to kernel, we can also see
> +      *  the following in arch/arm64/mm/dump.c:
> +      *   { VMEMMAP_START + VMEMMAP_SIZE,    "vmemmap end" },
> +      */
> +     r->vmemmap_end = r->vmemmap_vaddr + vmemmap_size;
> 
>       /* Get the VMALLOC_START ~ VMALLOC_END */
>       PUD_SIZE = arm64_get_pud_size();
> @@ -795,7 +791,7 @@ static struct kernel_range *arm64_get_range_v5_0(struct 
> machine_specific *ms)
>       vmemmap_size = (1UL << (v - machdep->pageshift - 1 + 
> arm64_get_struct_page_max_shift(ms)));
> 
>       r->vmemmap_vaddr = page_offset - vmemmap_size;
> -     r->vmemmap_end = 0xffffffffffffffffUL;  /* this kernel does not have 
> VMEMMAP_END */
> +     r->vmemmap_end = r->vmemmap_vaddr + vmemmap_size; /* See the 
> arch/arm64/mm/dump.c */
> 
>       /* Get the VMALLOC_START ~ VMALLOC_END */
>       PUD_SIZE = arm64_get_pud_size();
> --
> 2.30.2

--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to