[Crash-utility] [External Mail][????] Re: ramdump support for va_bits_actual

Dave Anderson anderson at redhat.com
Sat Apr 18 17:03:57 UTC 2020



----- Original Message -----
> Hi
> I made almost the same patch to fix the problem with arm64 in version 5.4...
> 
> One very small change can merged together,vmemmap_start has a little error:
> [arch/arm64/include/asm/memory.h]
>  56 #define VMEMMAP_START           (-VMEMMAP_SIZE - SZ_2M)
> in crash arm64.c
> -               vmemmap_start = (-vmemmap_size);
> +               vmemmap_start = (-vmemmap_size - MEGABYTES(2));

Can't we just read the value of "vmemmap"?  If not, what is the difference
between the calculated value above and the value of vmemmap?

> 
> 
> BTW,in arm64_VTOP,it's easier to use the physvirt_offset directly
> @@ -1148,8 +1155,7 @@ arm64_VTOP(ulong addr)
>
>                 }
> 
>                 if (addr >= machdep->machspec->page_offset)
> -                       return machdep->machspec->phys_offset
> -                               + (addr - machdep->machspec->page_offset);
> +                       return (addr + machdep->machspec->physvirt_offset);

Unfortunately that's not possible, because there is at least one arm64_VTOP()
call *before* the new machdep->machspec->physvirt_offset gets initialized,
which I presume is why Vinayak's patch checks whether it's non-zero first.

Dave



> ________________________________________
> From: crash-utility-bounces at redhat.com <crash-utility-bounces at redhat.com> on
> behalf of Dave Anderson <anderson at redhat.com>
> Sent: Saturday, April 18, 2020 0:32
> To: Discussion list for crash utility usage,    maintenance and development
> Subject: [External Mail][????] Re: [Crash-utility] ramdump support for
> va_bits_actual
> 
> ----- Original Message -----
> > Hi Dave,
> >
> > Noticed that raw ramdumps of 5.4 kernel aren't working with crash tip.
> > With the patches attached, I could get it working. Please take a look.
> >
> > Thanks,
> > Vinayak
> >
> 
> Hi Vinayak,
> 
> A couple quick questions come to mind...
> 
> First, I haven't checked all possible READMEM plugins, but for example, if
> this
> function is run on a live system, the -1 file descriptor would cause the
> READMEM()
> call to fail:
> 
>  static void
> +arm64_calc_physvirt_offset(void)
> +{
> +       struct machine_specific *ms = machdep->machspec;
> +       ulong physvirt_offset;
> +       struct syment *sp;
> +
> +       ms->physvirt_offset = ms->phys_offset - ms->page_offset;
> +
> +       if ((sp = kernel_symbol_search("physvirt_offset")) &&
> +                       machdep->machspec->kimage_voffset) {
> +               if (READMEM(-1, &physvirt_offset, sizeof(physvirt_offset),
> +                       sp->value, sp->value -
> +                       machdep->machspec->kimage_voffset) > 0) {
> +                               ms->physvirt_offset = physvirt_offset;
> +               }
> +       }
> +
> +       if (CRASHDEBUG(1))
> +               fprintf(fp, "using %lx as physvirt_offset\n",
> ms->physvirt_offset);
> +}
> 
> And here -- are you missing some brackets?  (run "make warn")
> 
> But regardless of that, why are you setting it back to 48 if it's greater
> than 48?
> 
> diff --git a/arm64.c b/arm64.c
> index 31d6e90..04efc13 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -4011,6 +4011,7 @@ arm64_calc_virtual_memory_ranges(void)
>         struct machine_specific *ms = machdep->machspec;
>         ulong value, vmemmap_start, vmemmap_end, vmemmap_size, vmalloc_end;
>         char *string;
> +       int ret;
>         ulong PUD_SIZE = UNINITIALIZED;
> 
>         if (!machdep->machspec->CONFIG_ARM64_VA_BITS) {
> @@ -4018,6 +4019,12 @@ arm64_calc_virtual_memory_ranges(void)
>                         value = atol(string);
>                         free(string);
>                         machdep->machspec->CONFIG_ARM64_VA_BITS = value;
> +               } else if (kt->ikconfig_flags & IKCONFIG_AVAIL) {
> +                       if ((ret = get_kernel_config("CONFIG_ARM64_VA_BITS",
> +                                       &string)) == IKCONFIG_STR)
> +                               machdep->machspec->CONFIG_ARM64_VA_BITS =
> atol(string);
> +                               if (machdep->machspec->CONFIG_ARM64_VA_BITS >
> 48)
> +
> machdep->machspec->CONFIG_ARM64_VA_BITS
> = 48;
>                 }
>         }
> 
> Thanks,
>   Dave
> 
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
> 
> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
> This e-mail and its attachments contain confidential information from
> XIAOMI, which is intended only for the person or entity whose address is
> listed above. Any use of the information contained herein in any way
> (including, but not limited to, total or partial disclosure, reproduction,
> or dissemination) by persons other than the intended recipient(s) is
> prohibited. If you receive this e-mail in error, please notify the sender by
> phone or email immediately and delete it!******/#
> 
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility




More information about the Crash-utility mailing list