[PATCH] makedumpfile/arm64: get SECTIONS_SIZE_BITS from sysfs

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Mon Jun 7 23:06:58 PDT 2021


-----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?

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