On Wed, Mar 23, 2022 at 8:00 PM <[email protected]> wrote:

> Date: Wed, 23 Mar 2022 18:25:48 +0000
> From: Huang Shijie <[email protected]>
> To: [email protected]
> Cc: [email protected], [email protected],
>         [email protected], [email protected],
>         [email protected], Huang Shijie <[email protected]>
> Subject: [Crash-utility] [PATCH v2] arm64: fix the "pud page" crash
>         for live system
> Message-ID: <[email protected]>
> Content-Type: text/plain
>
> 1.) When I tested live system with "crash vmlinux /proc/kcore" in kernel
> v5.7,
>     I met the following crash issue:
>        ........................................
>        crash: seek error: kernel virtual address: ffff75e9fffff000  type:
> "pud page"
>        ........................................
>
> 2.) The root cause is the PTOV does not work correctly for some kernel,
>     and then arm64_vtop_4level_4k() does not work correctly too.
>
>     Why PTOV does not work?
>
>     Because the physvirt_offset does not get the correct value.
>
> 3.) This patch uses symbol_value_from_proc_kallsyms() to get the
>     virtual address of "physvirt_offset", and then uses
>     READMEM(,..,KCORE_USE_VADDR) to get the correct value of
>     "physvirt_offset".
>
>     And also updates the ms->phys_offset which is initialized with
>     a wrong value in kernel version [5.4, 5.10).
>
>     Also add more comments for arm64_calc_physvirt_offset().
>
> Signed-off-by: Huang Shijie <[email protected]>
> ---
> v1 --> v2:
>         v1 tried to get the correct value for phys_offset,
>         and then get the physvirt_offset correctly.
>
>         v2 tried to get the physvirt_offset correctly,
>         and them update phys_offset correctly.
>
>         Tested this patch with kernel 5.7.
>

Thank you for the update, Shijie.

Applied(with Kazu's fix) and I also modified the patch log:
https://github.com/crash-utility/crash/commit/8827424f2b05587b8aaaeb7aae0ce8bcc017999f

Thanks.
Lianbo

---
>  arm64.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/arm64.c b/arm64.c
> index b843032..60ae644 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -1399,15 +1399,43 @@ arm64_calc_kimage_voffset(void)
>                 ms->kimage_voffset += (kt->relocate * -1);
>  }
>
> +/*
> + * The physvirt_offset only exits in kernel [5.4, 5.10)
> + *
> + *   1) In kernel v5.4, the patch:
> + *        "5383cc6efed137 arm64: mm: Introduce vabits_actual"
> + *
> + *      introduced the physvirt_offset.
> + *
> + *   2) In kernel v5.10, the patch:
> + *          "7bc1a0f9e17658 arm64: mm: use single quantity
> + *                           to represent the PA to VA translation"
> + *      removed the physvirt_offset.
> + */
>  static void
>  arm64_calc_physvirt_offset(void)
>  {
>         struct machine_specific *ms = machdep->machspec;
>         ulong physvirt_offset;
>         struct syment *sp;
> +       ulong value;
>
>         if ((sp = kernel_symbol_search("physvirt_offset")) &&
>                         machdep->machspec->kimage_voffset) {
> +               if (pc->flags & PROC_KCORE) {
> +                       value =
> symbol_value_from_proc_kallsyms("physvirt_offset");
> +                       if ((value != BADVAL) &&
> +                               (READMEM(pc->mfd, &physvirt_offset,
> sizeof(ulong),
> +                                          value, KCORE_USE_VADDR) > 0)) {
> +                               machdep->flags |= HAS_PHYSVIRT_OFFSET;
> +                               ms->physvirt_offset = physvirt_offset;
> +
> +                               /* Update the ms->phys_offset which is
> wrong */
> +                               ms->phys_offset = ms->physvirt_offset +
> ms->page_offset;
> +                               return;
> +                       }
> +               }
> +
>                 if (READMEM(pc->mfd, &physvirt_offset,
> sizeof(physvirt_offset),
>                         sp->value, sp->value -
>                         machdep->machspec->kimage_voffset) > 0) {
> --
> 2.30.2
>
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> --
> Crash-utility mailing list
> [email protected]
> https://listman.redhat.com/mailman/listinfo/crash-utility
>
>
> ------------------------------
>
> End of Crash-utility Digest, Vol 198, Issue 27
> **********************************************
>
>
--
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