Re: [PATCH v2] LoongArch: kdump: add arch_crash_save_vmcoreinfo() support
From: Huacai Chen
Date: Sat Oct 03 2026 - 05:13:13 EST
On Sat, Oct 3, 2026 at 4:25 PM Dave Young <yangrr.2009@xxxxxxxxxxxxxxx> wrote:
>
>
>
> On 9/28/26 10:28 PM, Huacai Chen wrote:
> > Hi, Yangyang,
> >
> > On Thu, Sep 24, 2026 at 3:58 PM Yangyang Lian <lianyangyang@xxxxxxxxxx> wrote:
> >>
> >> Since commit 23c85094fe18 ("proc/kcore: add vmcoreinfo note to
> >> /proc/kcore") the kernel has exported the vmcoreinfo PT_NOTE on
> >> /proc/kcore as wellas /proc/vmcore.
> >>
> >> LoongArch does not provide arch_crash_save_vmcoreinfo(), so the
> >> arch-specific values are missing from the vmcoreinfo PT_NOTE. The
> >> generic exporter in kernel/vmcore_info.c already provides
> >> NUMBER(VMALLOC_START), but tools like crash cannot derive the module
> >> and vmemmap ranges, VA_BITS, or the KASLR offset of a LoongArch dump.
>
> current crash can get the kaslr offset from the _stext differ, so it just works, but maybe makedumpfile still need the vmcoreinfo export.
>
> >>
> >> Since commit 18210a104bb9 ("LoongArch: Expand module virtual address
> >> space to 2GB") the vmalloc and module boundaries are no longer stable
> >> across kernel versions either, so vmcoreinfo is the only reliable
> >> source for them.
> >>
> >> Provide this function in a separate file that is built at the same time
> >> as its caller in kernel/vmcore_info.c, and add a LOONGARCH64 section to
> >> Documentation/admin-guide/kdump/vmcoreinfo.rst.
> >>
> >> Reported-by: Haoran Jiang <jianghaoran@xxxxxxxxxx>
> >> Suggested-by: Haoran Jiang <jianghaoran@xxxxxxxxxx>
> >> Tested-by: Tao Cui <cuitao@xxxxxxxxxx>
> >> Co-developed-by: George Guo <guodongtai@xxxxxxxxxx>
> >> Signed-off-by: George Guo <guodongtai@xxxxxxxxxx>
> >> Signed-off-by: Yangyang Lian <lianyangyang@xxxxxxxxxx>
> >> ---
> >> V2 -> V1: Export VMEMMAP_END + 1 to make it an exclusive bound, matching
> >> what tools like makedumpfile expect.
> >> Add Tested-by tag from Tao Cui.
> >>
> >> .../admin-guide/kdump/vmcoreinfo.rst | 29 +++++++++++++++++++
> >> arch/loongarch/kernel/Makefile | 1 +
> >> arch/loongarch/kernel/vmcore_info.c | 21 ++++++++++++++
> >> 3 files changed, 51 insertions(+)
> >> create mode 100644 arch/loongarch/kernel/vmcore_info.c
> >>
> >> diff --git a/Documentation/admin-guide/kdump/vmcoreinfo.rst b/Documentation/admin-guide/kdump/vmcoreinfo.rst
> >> index 7663c610fe90..2ff921232616 100644
> >> --- a/Documentation/admin-guide/kdump/vmcoreinfo.rst
> >> +++ b/Documentation/admin-guide/kdump/vmcoreinfo.rst
> >> @@ -594,3 +594,32 @@ va_kernel_pa_offset
> >>
> >> Indicates the offset between the kernel virtual and physical mappings.
> >> Used to translate virtual to physical addresses.
> >> +
> >> +LOONGARCH64
> >> +===========
> >> +
> >> +VA_BITS
> >> +-------
> >> +
> >> +The maximum number of bits for virtual addresses. Used to compute the
> >> +virtual memory ranges.
> >> +
> >> +PHYS_OFFSET
> >> +-----------
> >> +
> >> +Indicates the physical address of the start of memory. Used to translate
> >> +virtual to physical addresses.
> >> +
> >> +KERNELOFFSET
> >> +------------
> >> +
> >> +The kernel randomization offset. Used to locate the kernel text in
> >> +virtual memory. If KASLR is disabled, this value is zero.
> >> +
> >> +MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END
> >> +-----------------------------------------------------------------------------
> >> +
> >> +Used to get the correct ranges:
> >> + MODULES_VADDR ~ MODULES_END-1 : Kernel module space.
> >> + VMALLOC_START ~ VMALLOC_END-1 : vmalloc() / ioremap() space.
> >> + VMEMMAP_START ~ VMEMMAP_END-1 : vmemmap region, used for struct page array.
> >> diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
> >> index 001924877772..6260c15adaba 100644
> >> --- a/arch/loongarch/kernel/Makefile
> >> +++ b/arch/loongarch/kernel/Makefile
> >> @@ -64,6 +64,7 @@ obj-$(CONFIG_RELOCATABLE) += relocate.o
> >> obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
> >> obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_efi.o kexec_elf.o
> >> obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
> >> +obj-$(CONFIG_VMCORE_INFO) += vmcore_info.o
> >>
> >> obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
> >> obj-$(CONFIG_UNWINDER_PROLOGUE) += unwind_prologue.o
> >> diff --git a/arch/loongarch/kernel/vmcore_info.c b/arch/loongarch/kernel/vmcore_info.c
> >> new file mode 100644
> >> index 000000000000..fb703b716253
> >> --- /dev/null
> >> +++ b/arch/loongarch/kernel/vmcore_info.c
> >> @@ -0,0 +1,21 @@
> >> +// SPDX-License-Identifier: GPL-2.0
> >> +
> >> +#include <linux/vmcore_info.h>
> >> +#include <asm/addrspace.h>
> >> +#include <asm/pgtable.h>
> >> +#include <asm/setup.h>
> >> +
> >> +void arch_crash_save_vmcoreinfo(void)
> >> +{
> >> + VMCOREINFO_NUMBER(VA_BITS);
> >> + /* NUMBER(VMALLOC_START) is exported by the generic code */
> >> + vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END);
> >> +#ifdef CONFIG_64BIT
> >> + vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR);
> >> + vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END);
> >> + vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", (unsigned long)vmemmap);
> >> + vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END + 1);
> >> +#endif
> >> + vmcoreinfo_append_str("NUMBER(PHYS_OFFSET)=0x%lx\n", PHYS_OFFSET);
> > I think it is also useful to export PAGE_OFFSET here.
>
> Hi Huacai, if it is a fixed value or it can be derived from other known values I'd suggest not to export.
Hi, Dave. It is not completely a fixed value, and I found that RISC-V
also exports PAGE_OFFSET.
Huacai
>
> >
> > Huacai
> >> + vmcoreinfo_append_str("KERNELOFFSET=%lx\n", kaslr_offset());
> >> +}
> >> --
> >> 2.25.1
> >>
> >>
> >
> >
> >
>
>