Files
openloongarch-linux-6.12/arch
Youling Tang 436084e6bd LoongArch: Add ELF binary support for kexec_file
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      0x8

phdr->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 isn't page 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 SZ_64K, so that after alignment, its
size is consistent with _kernel_asize.

The basic usage (vmlinux):

1) Load second kernel image:
 # kexec -s -l vmlinux --initrd=initrd.img --reuse-cmdline

2) Startup second kernel:
 # kexec -e

Signed-off-by: Youling Tang <tangyouling@kylinos.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: maoxiaochuan <maoxiaochuan@loongson.cn>
2025-11-03 11:15:44 +08:00
..
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00
2025-02-13 14:11:16 +08:00