Add kexec_file support for LoongArch
Subsystems (3)
v3 cover Add kexec_file support for LoongArch
From: Youling Tang <[email protected]>
This patchset implement kexec_file_load() support on LoongArch.
This patch series enables us to load the LoongArch vmlinuz.efi(pez) or vmlinux.efi(pei) or vmlinux(elf) by specifying its file decriptor, instead of user-filled buffer via kexec_load() syscall.
To use kexec_file_load() system call, instead of kexec_load(), at kexec command, '-s' options must be specified. kexec-tools needs to apply the corresponding patches. These patches can be found in repository [1] and will be submitted to the kexec-tools community later.
The basic usage of kexec_file is:
1) Load second kernel image:
# kexec -s -l vmlinuz.efi --initrd=initrd.img --reuse-cmdline
2) Startup second kernel:
# kexec -e
For kdump:
1) Load capture kernel image:
# kexec -s -p vmlinuz.efi --initrd=initrd.img --reuse-cmdline
2) Do something to crash, like:
# echo c > /proc/sysrq-trigger
Link:
[1] https://github.com/tangyouling/kexec-tools/commits/main/
Changelog:
v3:
* The ELF format kernel loading should not use loongarch_image_header.
* Separate patch2 into an infrastructure patch and an EFI support patch.
* Adding that kexec_file cannot load non-relocation kernel comments.
* Some minor modifications.
v2:
* Merge some patches.
* Add support for ELF format images.
* Rename kexec_image.c to kexec_efi.c .
* When KEXEC_FILE is enabled, RELOCATABLE is selected by default.
* Some minor modifications.
Youling Tang (6):
LoongArch: Add struct loongarch_image_header for kernel image
LoongArch: Add preparatory infrastructure for kexec_file LoongArch/kexec_file: Support loading EFI binary file LoongArch/kexec_file: Support loading ELF binary file LoongArch/kexec_file: Add crash dump support
LoongArch: Enable CONFIG_KEXEC_FILE
arch/loongarch/Kconfig | 10 + arch/loongarch/configs/loongson3_defconfig | 1 + arch/loongarch/include/asm/image.h | 57 +++++ arch/loongarch/include/asm/kexec.h | 13 ++ arch/loongarch/kernel/Makefile | 1 + arch/loongarch/kernel/kexec_efi.c | 114 ++++++++++ arch/loongarch/kernel/kexec_elf.c | 105 +++++++++ arch/loongarch/kernel/machine_kexec.c | 37 ++-- arch/loongarch/kernel/machine_kexec_file.c | 235 +++++++++++++++++++++ 9 files changed, 560 insertions(+), 13 deletions(-) create mode 100644 arch/loongarch/include/asm/image.h create mode 100644 arch/loongarch/kernel/kexec_efi.c create mode 100644 arch/loongarch/kernel/kexec_elf.c create mode 100644 arch/loongarch/kernel/machine_kexec_file.c
Signature · 1 line
2.43.0
PATCH v3 1/6 LoongArch: Add struct loongarch_image_header for kernel image
From: Youling Tang <[email protected]>
Define a dedicated image header structure for LoongArch architecture to standardize kernel loading in bootloaders (primarily for kexec_file).
This header includes critical metadata such as PE signature, entry points, image size and load address offset, etc.
--- arch/loongarch/include/asm/image.h | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 arch/loongarch/include/asm/image.h
arch/loongarch/include/asm/image.h new file +40 -0
@@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* LoongArch binary image header. +* +* Author: Youling Tang <[email protected]> +* Copyright (C) 2025 KylinSoft Corporation. +* +* Most code is derived from LoongArch port of kexec-tools +*/ + +#ifndef __ASM_IMAGE_H +#define __ASM_IMAGE_H +#ifndef __ASSEMBLY__ + +/** +* struct loongarch_image_header +* +* @pe_sig: Optional PE format 'MZ' signature. +* @reserved_1: Reserved. +* @kernel_entry: Kernel image entry pointer. +* @image_size: An estimated size of the memory image size in LSB byte order. +* @text_offset: The image load offset in LSB byte order. +* @reserved_2: Reserved. +* @reserved_3: Reserved. +* @pe_header: Optional offset to a PE format header. +**/ + +struct loongarch_image_header { +uint8_t pe_sig[2 ]; +uint16_t reserved_1[3 ]; +uint64_t kernel_entry; +uint64_t image_size; +uint64_t text_offset; +uint64_t reserved_2[3 ]; +uint32_t reserved_3; +uint32_t pe_header; +}; + +#endif /* __ASSEMBLY__ */ +#endif /* __ASM_IMAGE_H */
Signature · 1 line
2.43.0
Huacai Chen
maintainerRe: [PATCH v3 1/6] LoongArch: Add struct loongarch_image_header for kernel image
Hi, Youling,
Quoted 24 lines · Youling Tang
From: Youling Tang <[email protected]>
Define a dedicated image header structure for LoongArch architecture to standardize kernel loading in bootloaders (primarily for
kexec_file).This header includes critical metadata such as PE signature, entry points, image size and load address offset, etc.
Signed-off-by Youling Tang <[email protected]>--- arch/loongarch/include/asm/image.h | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 arch/loongarch/include/asm/image.harch/loongarch/include/asm/image.h new file +3
-0@@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* LoongArch binary image header.
arch/loongarch/include/asm/image.h line 13
Quoted 10 lines
arch/loongarch/include/asm/image.h new file +10
-0+* +* Author: Youling Tang <[email protected]> +* Copyright (C) 2025 KylinSoft Corporation. +* +* Most code is derived from LoongArch port of kexec-tools +*/ + +#ifndef __ASM_IMAGE_H +#define __ASM_IMAGE_H +#ifndef __ASSEMBLY__
__ASSEMBLY__ is replaced by __ASSEMBLER__ now.
Quoted 6 lines
arch/loongarch/include/asm/image.h new file +6
-0+ +/** +* struct loongarch_image_header +* +* @pe_sig: Optional PE format 'MZ' signature. +* @reserved_1: Reserved.
arch/loongarch/include/asm/image.h line 29
Quoted 10 lines
arch/loongarch/include/asm/image.h new file +10
-0+* @kernel_entry: Kernel image entry pointer. +* @image_size: An estimated size of the memory image size in LSB byte order. +* @text_offset: The image load offset in LSB byte order. +* @reserved_2: Reserved. +* @reserved_3: Reserved. +* @pe_header: Optional offset to a PE format header. +**/ + +struct loongarch_image_header { +uint8_t pe_sig[2 ];
Use dos_sig is better.
arch/loongarch/include/asm/image.h line 30
Quoted 1 line
arch/loongarch/include/asm/image.h new file +1
-0+uint16_t reserved_1[3 ];
Use padding_1[3] is better.
arch/loongarch/include/asm/image.h line 32
Quoted 2 lines
arch/loongarch/include/asm/image.h new file +2
-0+uint64_t kernel_entry; +uint64_t image_size;
Use kernel_asize to keep consistency with head.S.
arch/loongarch/include/asm/image.h line 35
Quoted 3 lines
arch/loongarch/include/asm/image.h new file +3
-0+uint64_t text_offset; +uint64_t reserved_2[3 ]; +uint32_t reserved_3;
Just use uint32_t reserved_2[7] here?
Huacai
Quoted 8 lines
arch/loongarch/include/asm/image.h new file +5
-1+uint32_t pe_header; +}; + +#endif /* __ASSEMBLY__ */ +#endif /* __ASM_IMAGE_H */ --2.43.0
PATCH v3 2/6 LoongArch: Add preparatory infrastructure for kexec_file
In reply to Youling TangFrom: Youling Tang <[email protected]>
Add some preparatory infrastructure:
- Add support for loading other segments.
- Add command line processing.
- Other minor modifications.
This initrd will be passed to the second kernel via the command line 'initrd=start,size'.
--- arch/loongarch/Kconfig | 9 ++ arch/loongarch/include/asm/kexec.h | 11 ++ arch/loongarch/kernel/Makefile | 1 + arch/loongarch/kernel/machine_kexec.c | 37 ++++--- arch/loongarch/kernel/machine_kexec_file.c | 116 +++++++++++++++++++++ 5 files changed, 161 insertions(+), 13 deletions(-) create mode 100644 arch/loongarch/kernel/machine_kexec_file.c
arch/loongarch/Kconfig +9 -0
@@ -625,6 +625,15 @@ config CPU_HAS_PREFETCH config ARCH_SUPPORTS_KEXEC def_bool y +config ARCH_SUPPORTS_KEXEC_FILE + def_bool 64BIT + +config ARCH_SELECTS_KEXEC_FILE + def_bool y + depends on KEXEC_FILE + select HAVE_IMA_KEXEC if IMA + select RELOCATABLE + config ARCH_SUPPORTS_CRASH_DUMP def_bool y
arch/loongarch/include/asm/kexec.h +11 -0
@@ -41,6 +41,17 @@ struct kimage_arch {unsigned long systable_ptr; }; +#ifdef CONFIG_KEXEC_FILE + +int arch_kimage_file_post_load_cleanup (struct kimage *image); +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup + +extern int load_other_segments (struct kimage *image, +unsigned long kernel_load_addr,unsigned long kernel_size, +char *initrd,unsigned long initrd_len, +char *cmdline,unsigned long cmdline_len); +#endif + typedef void (*do_kexec_t)(unsigned long efi_boot, unsigned long cmdline_ptr, unsigned long systable_ptr,
arch/loongarch/kernel/Makefile +1 -0
@@ -62,6 +62,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_RELOCATABLE) += relocate.o obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o +obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
arch/loongarch/kernel/machine_kexec.c +24 -13
@@ -70,18 +70,28 @@ int machine_kexec_prepare(struct kimage *kimage) kimage->arch.efi_boot = fw_arg0; kimage->arch.systable_ptr = fw_arg2; -/* Find the command line */ -for (i =0 ; i < kimage->nr_segments; i++) { -if (!strncmp (bootloader, (char __user *)kimage->segment[i].buf,strlen (bootloader))) { -if (!copy_from_user (cmdline_ptr, kimage->segment[i].buf,COMMAND_LINE_SIZE )) - kimage->arch.cmdline_ptr = (unsigned long )cmdline_ptr; -break ; +if (kimage->file_mode ==1 ) { +/* +* kimage->cmdline_buf will be released in kexec_file_load, so copy to +* the KEXEC_CMDLINE_ADDR safe area. +*/ +memcpy ((void *)KEXEC_CMDLINE_ADDR , (void *)kimage->arch.cmdline_ptr, +strlen ((char *)kimage->arch.cmdline_ptr) +1 ); + kimage->arch.cmdline_ptr = (unsigned long )KEXEC_CMDLINE_ADDR ; + }else { +/* Find the command line */ +for (i =0 ; i < kimage->nr_segments; i++) { +if (!strncmp (bootloader, (char __user *)kimage->segment[i].buf,strlen (bootloader))) { +if (!copy_from_user (cmdline_ptr, kimage->segment[i].buf,COMMAND_LINE_SIZE )) + kimage->arch.cmdline_ptr = (unsigned long )cmdline_ptr; +break ; + } } - } -if (!kimage->arch.cmdline_ptr) { -pr_err ("Command line not included in the provided image\n" ); -return -EINVAL ; +if (!kimage->arch.cmdline_ptr) { +pr_err ("Command line not included in the provided image\n" ); +return -EINVAL ; + } }/* kexec/kdump need a safe page to save reboot_code_buffer */
@@ -287,9 +297,10 @@ void machine_kexec(struct kimage *image)/* We do not want to be bothered. */ local_irq_disable (); -pr_notice ("EFI boot flag 0x%lx\n" , efi_boot); -pr_notice ("Command line at 0x%lx\n" , cmdline_ptr); -pr_notice ("System table at 0x%lx\n" , systable_ptr); +pr_notice ("EFI boot flag: 0x%lx\n" , efi_boot); +pr_notice ("Command line addr: 0x%lx\n" , cmdline_ptr); +pr_notice ("Command line string: %s\n" , (char *)cmdline_ptr); +pr_notice ("System table addr: 0x%lx\n" , systable_ptr);pr_notice ("We will call new kernel at 0x%lx\n" , start_addr);pr_notice ("Bye ...\n" );
arch/loongarch/kernel/machine_kexec_file.c new file +116 -0
116 lines not on this page · raw message
Signature · 1 line
2.43.0
PATCH v3 3/6 LoongArch/kexec_file: Support loading EFI binary file
In reply to Youling TangFrom: Youling Tang <[email protected]>
This patch creates kexec_efi_ops to load EFI binary file for kexec_file_load() syscall.
The efi_kexec_load() as two parts:
- the first part loads the kernel image (vmlinuz.efi or vmlinux.efi)
- the second part loads other segments (eg: initrd, cmdline)
Currently, pez(vmlinuz.efi) and pei(vmlinux.efi) format images are supported.
--- arch/loongarch/include/asm/image.h | 17 +++ arch/loongarch/include/asm/kexec.h | 1 + arch/loongarch/kernel/Makefile | 2 +- arch/loongarch/kernel/kexec_efi.c | 114 +++++++++++++++++++++ arch/loongarch/kernel/machine_kexec_file.c | 1 + 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 arch/loongarch/kernel/kexec_efi.c
arch/loongarch/include/asm/image.h +17 -0
@@ -36,5 +36,22 @@ struct loongarch_image_header {uint32_t pe_header; }; +static const uint8_t loongarch_image_pe_sig[2 ] = {'M' ,'Z' }; + +/** +* loongarch_header_check_pe_sig - Helper to check the loongarch image header. +* +* Returns non-zero if 'MZ' signature is found. +*/ + +static inline int loongarch_header_check_pe_sig (const struct loongarch_image_header *h) +{ +if (!h) +return 0 ; + +return (h->pe_sig[0 ] == loongarch_image_pe_sig[0 ] + && h->pe_sig[1 ] == loongarch_image_pe_sig[1 ]); +} +#endif /* __ASSEMBLY__ */ #endif /* __ASM_IMAGE_H */
arch/loongarch/include/asm/kexec.h +1 -0
@@ -42,6 +42,7 @@ struct kimage_arch { };#ifdef CONFIG_KEXEC_FILE +extern const struct kexec_file_ops kexec_efi_ops;int arch_kimage_file_post_load_cleanup (struct kimage *image);#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
arch/loongarch/kernel/Makefile +1 -1
@@ -62,7 +62,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_RELOCATABLE) += relocate.o obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o -obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o +obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_efi.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
arch/loongarch/kernel/kexec_efi.c new file +114 -0
114 lines not on this page · raw message
arch/loongarch/kernel/machine_kexec_file.c +1 -0
@@ -21,6 +21,7 @@#include <asm/bootinfo.h> const struct kexec_file_ops *const kexec_file_loaders[] = { + &kexec_efi_ops,NULL };
Signature · 1 line
2.43.0
PATCH v3 4/6 LoongArch/kexec_file: Support loading ELF binary file
In reply to Youling TangFrom: Youling Tang <[email protected]>
This patch creates kexec_elf_ops to load ELF binary file for kexec_file_load() syscall.
However, for kbuf->memsz and kbuf->buf_min, special handling is required, and the generic kexec_elf_load() cannot be used directly.
$ readelf -l vmlinux
...
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000010000 0x9000000000200000 0x9000000000200000
0x0000000002747a00 0x000000000287a0d8 RWE 0x10000
NOTE 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 R 0x8phdr->p_paddr should have been a physical address, but it is a virtual address on the current LoongArch. This will cause kexec_file to fail when loading the kernel and need to be converted to a physical address.
From the above MemSiz, it can be seen that 0x287a0d8 has not been aligned. Although kexec_add_buffer() will perform PAGE_SIZE alignment on kbuf->memsz, there is still a stampeding in the loaded kernel space and initrd space. The initrd resolution failed when starting the second kernel.
It can be known from the link script vmlinux.lds.S that,
BSS_SECTION(0, SZ_64K, 8)
. = ALIGN(PECOFF_SEGMENT_ALIGN);It needs to be aligned according to the SZ_64K size, so that after alignment, its size is consistent with _kernel_asize.
--- arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/kexec.h | 1 + arch/loongarch/kernel/Makefile | 2 +- arch/loongarch/kernel/kexec_elf.c | 105 +++++++++++++++++++++ arch/loongarch/kernel/machine_kexec_file.c | 1 + 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 arch/loongarch/kernel/kexec_elf.c
arch/loongarch/Kconfig +1 -0
@@ -632,6 +632,7 @@ config ARCH_SELECTS_KEXEC_FILE def_bool y depends on KEXEC_FILE select HAVE_IMA_KEXEC if IMA + select KEXEC_ELF select RELOCATABLE config ARCH_SUPPORTS_CRASH_DUMP
arch/loongarch/include/asm/kexec.h +1 -0
@@ -43,6 +43,7 @@ struct kimage_arch {#ifdef CONFIG_KEXEC_FILE extern const struct kexec_file_ops kexec_efi_ops; +extern const struct kexec_file_ops kexec_elf_ops;int arch_kimage_file_post_load_cleanup (struct kimage *image);#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
arch/loongarch/kernel/Makefile +1 -1
@@ -62,7 +62,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o 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 +obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_efi.o kexec_elf.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
arch/loongarch/kernel/kexec_elf.c new file +105 -0
105 lines not on this page · raw message
arch/loongarch/kernel/machine_kexec_file.c +1 -0
@@ -22,6 +22,7 @@const struct kexec_file_ops *const kexec_file_loaders[] = { &kexec_efi_ops, + &kexec_elf_ops,NULL };
Signature · 1 line
2.43.0
PATCH v3 5/6 LoongArch/kexec_file: Add crash dump support
In reply to Youling TangFrom: Youling Tang <[email protected]>
Enabling crash dump (kdump) includes:
- Prepare contents of ELF header of a core dump file, /proc/vmcore, using crash_prepare_elf64_headers().
- Add "elfcorehdr=size@start" to cmdline.
- Add the "mem=size@start" parameter to the command line and pass it to the capture kernel. Limit the runtime memory area of the captured kernel to avoid disrupting the production kernel's runtime state.
--- arch/loongarch/kernel/machine_kexec_file.c | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+)
arch/loongarch/kernel/machine_kexec_file.c +117 -0
@@ -35,6 +35,83 @@ int arch_kimage_file_post_load_cleanup(struct kimage *image)return kexec_image_post_load_cleanup_default (image); } +#ifdef CONFIG_CRASH_DUMP + +static int prepare_elf_headers (void **addr,unsigned long *sz) +{ +struct crash_mem *cmem; +unsigned int nr_ranges; +int ret; +u64 i; +phys_addr_t start, end; + + nr_ranges =2 ;/* for exclusion of crashkernel region */ +for_each_mem_range (i, &start, &end) + nr_ranges++; + + cmem =kmalloc (struct_size (cmem, ranges, nr_ranges),GFP_KERNEL ); +if (!cmem) +return -ENOMEM ; + + cmem->max_nr_ranges = nr_ranges; + cmem->nr_ranges =0 ; +for_each_mem_range (i, &start, &end) { + cmem->ranges[cmem->nr_ranges].start = start; + cmem->ranges[cmem->nr_ranges].end = end -1 ; + cmem->nr_ranges++; + } + +/* Exclude crashkernel region */ + ret =crash_exclude_mem_range (cmem, crashk_res.start, crashk_res.end); +if (ret) + goto out; + +if (crashk_low_res.end) { + ret =crash_exclude_mem_range (cmem, crashk_low_res.start, crashk_low_res.end); +if (ret) + goto out; + } + + ret =crash_prepare_elf64_headers (cmem, true, addr, sz); + +out: +kfree (cmem); +return ret; +} + +/* Adds the "elfcorehdr=size@start" command line parameter to command line. */ +static void cmdline_add_elfcorehdr (struct kimage *image,unsigned long *cmdline_tmplen, +char *modified_cmdline,unsigned long elfcorehdr_sz) +{ +int elfcorehdr_strlen =0 ; + + elfcorehdr_strlen =sprintf (modified_cmdline + (*cmdline_tmplen),"elfcorehdr=0x%lx@0x%lx " , + elfcorehdr_sz, image->elf_load_addr); + *cmdline_tmplen += elfcorehdr_strlen; +} + +/* +* Adds the "mem=size@start" command line parameter to command line, indicating the +* memory region the new kernel can use to boot into. +*/ +static void cmdline_add_mem (struct kimage *image,unsigned long *cmdline_tmplen, +char *modified_cmdline) +{ +int mem_strlen =0 ; + + mem_strlen =sprintf (modified_cmdline + (*cmdline_tmplen),"mem=0x%llx@0x%llx " , + crashk_res.end - crashk_res.start +1 , crashk_res.start); + *cmdline_tmplen += mem_strlen; + +if (crashk_low_res.end) { + mem_strlen =sprintf (modified_cmdline + (*cmdline_tmplen),"mem=0x%llx@0x%llx " , + crashk_low_res.end - crashk_low_res.start +1 , crashk_low_res.start); + *cmdline_tmplen += mem_strlen; + } +} + +#endif +/* Adds the "initrd=start,size" command line parameter to command line. */ static void cmdline_add_initrd (struct kimage *image,unsigned long *cmdline_tmplen,char *modified_cmdline,unsigned long initrd)
@@ -76,6 +153,46 @@ int load_other_segments(struct kimage *image,/* Ensure it's nul terminated */ modified_cmdline[COMMAND_LINE_SIZE -1 ] ='\0' ; +#ifdef CONFIG_CRASH_DUMP +/* load elf core header */ +void *headers; +unsigned long headers_sz; + +if (image->type ==KEXEC_TYPE_CRASH ) { + ret =prepare_elf_headers (&headers, &headers_sz); +if (ret) { +pr_err ("Preparing elf core header failed\n" ); + goto out_err; + } + + kbuf.buffer = headers; + kbuf.bufsz = headers_sz; + kbuf.mem =KEXEC_BUF_MEM_UNKNOWN ; + kbuf.memsz = headers_sz; + kbuf.buf_align =SZ_64K ;/* largest supported page size */ + kbuf.buf_max =ULONG_MAX ; + kbuf.top_down = true; + + ret =kexec_add_buffer (&kbuf); +if (ret) { +vfree (headers); + goto out_err; + } + image->elf_headers = headers; + image->elf_load_addr = kbuf.mem; + image->elf_headers_sz = headers_sz; + +kexec_dprintk ("Loaded elf core header at 0x%lx bufsz=0x%lx memsz=0x%lx\n" , + image->elf_load_addr, kbuf.bufsz, kbuf.memsz); + +/* Add the elfcorehdr=size@start parameter to the command line */ +cmdline_add_elfcorehdr (image, &cmdline_tmplen, modified_cmdline, headers_sz); + +/* Add the mem=size@start parameter to the command line */ +cmdline_add_mem (image, &cmdline_tmplen, modified_cmdline); + } +#endif +/* load initrd */ if (initrd) { kbuf.buffer = initrd;
Signature · 1 line
2.43.0
PATCH v3 6/6 LoongArch: Enable CONFIG_KEXEC_FILE
In reply to Youling TangFrom: Youling Tang <[email protected]>
This patch enables config KEXEC_FILE by default in the loongson3_defconfig, so that user-space tools like kexec-tools can use the same as the default interface for kexec/kdump on LoongArch.
--- arch/loongarch/configs/loongson3_defconfig | 1 + 1 file changed, 1 insertion(+)
arch/loongarch/configs/loongson3_defconfig +1 -0
@@ -45,6 +45,7 @@ CONFIG_EXPERT=y CONFIG_KALLSYMS_ALL=y CONFIG_PERF_EVENTS=y CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y CONFIG_CRASH_DUMP=y CONFIG_LOONGARCH=y CONFIG_64BIT=y
Signature · 1 line
2.43.0