[PATCH] makedumpfile/arm64: get SECTIONS_SIZE_BITS from sysfs

Pingfan Liu piliu at redhat.com
Mon Jun 7 23:36:39 PDT 2021


On Tue, Jun 8, 2021 at 2:07 PM HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab at nec.com> wrote:
>
> -----Original Message-----
> > On arm64, memory section size changes due to the kernel commit
> > f0b13ee23241 ("arm64/sparsemem: reduce SECTION_SIZE_BITS")
> >
> > To tackle the compatibility, it is safe to read this info from sysfs
> > "/sys/devices/system/memory/block_size_bytes"
>
> Thanks for the patch, but the place where we should put/get such
> necessary information first is vmcoreinfo, which exists for that.
> Can we add an entry for the SECTIONS_SIZE_BITS there?
>
OK, I will send a patch to kernel for it.

Thanks,
Pingfan

> If we use information from a runtime environment, makedumpfile cannot
> process vmcores/dumpfiles generated from other kernels than one that
> makedumpfile is running.
>
> Thanks,
> Kazu
>
> >
> > Signed-off-by: Pingfan Liu <piliu at redhat.com>
> > Cc: Kazuhito Hagio <k-hagio-ab at nec.com>
> > To: kexec at lists.infradead.org
> > ---
> >  arch/arm64.c | 21 ++++++++++++++++++++-
> >  1 file changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64.c b/arch/arm64.c
> > index 1072178..2f6f5cf 100644
> > --- a/arch/arm64.c
> > +++ b/arch/arm64.c
> > @@ -424,6 +424,11 @@ get_page_offset_arm64(void)
> >  int
> >  get_machdep_info_arm64(void)
> >  {
> > +     const char sys_path_section_sz[] = "/sys/devices/system/memory/block_size_bytes";
> > +     char memsection_sz_str[64] = { 0 };
> > +     unsigned long memsection_sz = 0;
> > +     FILE *fp;
> > +
> >       /* Check if va_bits is still not initialized. If still 0, call
> >        * get_versiondep_info() to initialize the same.
> >        */
> > @@ -451,7 +456,21 @@ get_machdep_info_arm64(void)
> >       }
> >
> >       kimage_voffset = NUMBER(kimage_voffset);
> > -     info->section_size_bits = SECTIONS_SIZE_BITS;
> > +
> > +     fp = fopen(sys_path_section_sz, "r");
> > +     if (fp) {
> > +             int i;
> > +
> > +             fread(&memsection_sz_str, 64, 1, fp);
> > +             fclose(fp);
> > +             memsection_sz = strtol(memsection_sz_str, NULL, 16);
> > +             for (i = -1; memsection_sz != 0; i++)
> > +                     memsection_sz >>= 1;
> > +             info->section_size_bits = i;
> > +     }
> > +     else {
> > +             info->section_size_bits = SECTIONS_SIZE_BITS;
> > +     }
> >
> >       DEBUG_MSG("kimage_voffset   : %lx\n", kimage_voffset);
> >       DEBUG_MSG("section_size_bits: %ld\n", info->section_size_bits);
> > --
> > 2.29.2
>




More information about the kexec mailing list