All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yanteng Si <si.yanteng@linux.dev>
To: Youling Tang <youling.tang@linux.dev>,
	Huacai Chen <chenhuacai@kernel.org>
Cc: WANG Xuerui <kernel@xen0n.name>, Baoquan He <bhe@redhat.com>,
	kexec@lists.infradead.org, loongarch@lists.linux.dev,
	linux-kernel@vger.kernel.org,
	Youling Tang <tangyouling@kylinos.cn>
Subject: Re: [PATCH 2/6] LoongArch: Add kexec_file support
Date: Wed, 13 Aug 2025 09:15:31 +0800	[thread overview]
Message-ID: <7d716798-7cfc-4564-b9a4-32d9f692f037@linux.dev> (raw)
In-Reply-To: <ef249b61-f37e-4b72-9610-7f114564988a@linux.dev>


在 8/12/25 5:32 PM, Youling Tang 写道:
> Hi, Yanteng
> On 2025/8/12 09:53, Yanteng Si wrote:
>> 在 8/12/25 9:21 AM, Youling Tang 写道:
>>> Hi, Huacai
>>> On 2025/8/11 22:07, Huacai Chen wrote:
>>>> Hi, Youling,
>>>>
>>>> On Mon, Aug 11, 2025 at 5:28 PM Youling Tang <youling.tang@linux.dev> wrote:
>>>>> From: Youling Tang <tangyouling@kylinos.cn>
>>>>>
>>>>> This patch adds support for kexec_file on LoongArch.
>>>>>
>>>>> The image_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,
>>>>> but ELF format is not supported.
>>>>>
>>>>> Signed-off-by: Youling Tang <tangyouling@kylinos.cn>
>>>>> ---
>>>>>   arch/loongarch/Kconfig                     |   8 ++
>>>>>   arch/loongarch/include/asm/image.h         |  18 ++++
>>>>>   arch/loongarch/include/asm/kexec.h         |  12 +++
>>>>>   arch/loongarch/kernel/Makefile             |   1 +
>>>>>   arch/loongarch/kernel/kexec_image.c        | 112 +++++++++++++++++++++
>>>>>   arch/loongarch/kernel/machine_kexec.c      |  33 ++++--
>>>>>   arch/loongarch/kernel/machine_kexec_file.c |  46 +++++++++
>>>>>   7 files changed, 219 insertions(+), 11 deletions(-)
>>>>>   create mode 100644 arch/loongarch/kernel/kexec_image.c
>>>>>   create mode 100644 arch/loongarch/kernel/machine_kexec_file.c
>>>>>
>>>>> diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
>>>>> index f0abc38c40ac..fd50c83f7827 100644
>>>>> --- a/arch/loongarch/Kconfig
>>>>> +++ b/arch/loongarch/Kconfig
>>>>> @@ -625,6 +625,14 @@ 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
>>>>> +
>>>>>   config ARCH_SUPPORTS_CRASH_DUMP
>>>>>          def_bool y
>>>>>
>>>>> diff --git a/arch/loongarch/include/asm/image.h b/arch/loongarch/include/asm/image.h
>>>>> index 1f090736e71d..829e1ecb1f5d 100644
>>>>> --- a/arch/loongarch/include/asm/image.h
>>>>> +++ b/arch/loongarch/include/asm/image.h
>>>>> @@ -36,5 +36,23 @@ struct loongarch_image_header {
>>>>>          uint32_t pe_header;
>>>>>   };
>>>>>
>>>>> +static const uint8_t loongarch_image_pe_sig[2] = {'M', 'Z'};
>>>>> +static const uint8_t loongarch_pe_machtype[6] = {'P', 'E', 0x0, 0x0, 0x64, 0x62};
>>>>> +
>>>>> +/**
>>>>> + * 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 */
>>>>> diff --git a/arch/loongarch/include/asm/kexec.h b/arch/loongarch/include/asm/kexec.h
>>>>> index cf95cd3eb2de..3ef8517a3670 100644
>>>>> --- a/arch/loongarch/include/asm/kexec.h
>>>>> +++ b/arch/loongarch/include/asm/kexec.h
>>>>> @@ -41,6 +41,18 @@ struct kimage_arch {
>>>>>          unsigned long systable_ptr;
>>>>>   };
>>>>>
>>>>> +#ifdef CONFIG_KEXEC_FILE
>>>>> +extern const struct kexec_file_ops kexec_image_ops;
>>>>> +
>>>>> +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);
>>>> I think the RISC-V naming "load_extra_segments" is better.
>>> This name is also fine, but I prefer it to be consistent with
>>> that in kexec-tools.
>> I have looked at the code of kexec-tools, and it seems that you referenced a great deal of ARM code when implementing the LoongArch part.
>>
>>
>>>>
>>>>> +#endif
>>>>> +
>>>>>   typedef void (*do_kexec_t)(unsigned long efi_boot,
>>>>>                             unsigned long cmdline_ptr,
>>>>>                             unsigned long systable_ptr,
>>>>> diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
>>>>> index 6f5a4574a911..bd9405ee3888 100644
>>>>> --- a/arch/loongarch/kernel/Makefile
>>>>> +++ b/arch/loongarch/kernel/Makefile
>>>>> @@ -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 kexec_image.o
>>>> We only support the efi format, so we don't need to split a
>>>> kexec_image.c like RISC-V, just put everything into
>>>> machine_kexec_file.c is OK.
>>> I hope it is separated and consistent with other architectures.
>>> For instance, arm64 only supports one type.
>> The ARM64 architecture has a long history, and we shouldn't be constrained by it.
> Support for kexec_elf.c in ELF format may be considered for
> addition in the future.

Ok, I see.


Thanks,

Yanteng

>
> Thanks,
> Youling.
>>
>>
>> Thanks,
>> Yanteng
>>>
>>> Youling.
>>>>
>>>> Huacai


  reply	other threads:[~2025-08-13  1:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-11  9:26 [PATCH 0/6] Add kexec_file support for LoongArch Youling Tang
2025-08-11  9:26 ` [PATCH 1/6] LoongArch: Add struct loongarch_image_header for kernel image Youling Tang
2025-08-11  9:26 ` [PATCH 2/6] LoongArch: Add kexec_file support Youling Tang
2025-08-11 14:07   ` Huacai Chen
2025-08-12  1:21     ` Youling Tang
2025-08-12  1:53       ` Yanteng Si
2025-08-12  9:32         ` Youling Tang
2025-08-13  1:15           ` Yanteng Si [this message]
2025-08-12  2:53       ` Huacai Chen
2025-08-11 17:06   ` Yao Zi
2025-08-12  2:39     ` Huacai Chen
2025-08-12  7:56       ` Yao Zi
2025-08-12  6:15     ` Youling Tang
2025-08-12  7:06       ` Youling Tang
2025-08-12  9:43         ` Yao Zi
2025-08-13  2:18           ` Youling Tang
2025-08-13  3:24             ` Yao Zi
2025-08-16  5:37   ` kernel test robot
2025-08-11  9:26 ` [PATCH 3/6] LoongArch/kexec_file: Add initrd loading Youling Tang
2025-08-11 14:12   ` Huacai Chen
2025-08-12  2:38     ` Youling Tang
2025-08-12  3:03       ` Huacai Chen
2025-08-11 17:58   ` Yao Zi
2025-08-12  4:05     ` Youling Tang
2025-08-12  6:25       ` Yao Zi
2025-08-11  9:26 ` [PATCH 4/6] LoongArch/kexec_file: Add crash dump support Youling Tang
2025-08-11  9:26 ` [PATCH 5/6] LoongArch/kexec_file: Add "mem" parameter to limit memory usage of kdump kernel Youling Tang
2025-08-11  9:26 ` [PATCH 6/6] LoongArch: Enable CONFIG_KEXEC_FILE Youling Tang
2025-08-11 16:20 ` [PATCH 0/6] Add kexec_file support for LoongArch Vincent Li
2025-08-12  6:21   ` Youling Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7d716798-7cfc-4564-b9a4-32d9f692f037@linux.dev \
    --to=si.yanteng@linux.dev \
    --cc=bhe@redhat.com \
    --cc=chenhuacai@kernel.org \
    --cc=kernel@xen0n.name \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loongarch@lists.linux.dev \
    --cc=tangyouling@kylinos.cn \
    --cc=youling.tang@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.