On 2024/03/01 16:02, Aditya Gupta wrote:
> Below error is noticed when running crash on vmcore collected from a 
> linux-next
> kernel crash (linux-next tag next-20240121):
> 
>      # crash /boot/vmlinuz-6.8.0-rc5-next-20240221 ./vmcore
>      ……
>      ……
>      For help, type “help”.
>      Type "apropos word" to search for commands related to "word"...
> 
>      crash: page excluded: kernel virtual address: c00000000219a2c0  type: 
> “vmlist"
> 
> This occured since getting the vmalloc area base address doesn't work in
> crash now, due to 'vmap_area_list' being removed in the linux kernel with
> below commit (in linux-next tree):
> 
>      commit 378eb24a0658dd922b29524e0ce35c6c43f56cba
>           mm/vmalloc: remove vmap_area_list
> 
> As an alternative, the commit introduced 'VMALLOC_START' in vmcoreinfo to
> get base address of vmalloc area, use it to return vmallow start address
> instead of depending on vmap_area_list and vmlist
> 
> Reported-by: Sachin Sant <[email protected]>
> Signed-off-by: Aditya Gupta <[email protected]>
> ---
>   memory.c | 11 ++++++++++-
>   1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/memory.c b/memory.c
> index b84e974a3325..b3027bd101cd 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -17220,11 +17220,20 @@ first_vmalloc_address(void)
>   {
>       static ulong vmalloc_start = 0;
>           ulong vm_struct, vmap_area;
> +     char *vmalloc_start_string;
>   
>       if (DUMPFILE() && vmalloc_start)
>               return vmalloc_start;
>   
> -     if (vt->flags & USE_VMAP_AREA) {
> +     /*
> +      * 'vmap_area_list' and 'vmlist' in newer kernels might be empty, prefer
> +      * `VMALLOC_START` if exported in vmcoreinfo
> +      */
> +     vmalloc_start_string = pc->read_vmcoreinfo("NUMBER(VMALLOC_START)");
> +     if (vmalloc_start_string) {
> +             vmalloc_start = stol(vmalloc_start_string, QUIET, NULL);

Thank you for the patch.  seems htol is better, changed and applied.
https://github.com/crash-utility/crash/commit/5b24e363a8980dd4f878b0494cf78d24559a7a67

Thanks,
Kazu


> +             free(vmalloc_start_string);
> +     } else if (vt->flags & USE_VMAP_AREA) {
>               get_symbol_data("vmap_area_list", sizeof(void *), &vmap_area);
>               if (!vmap_area)
>                       return 0;
--
Crash-utility mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to