Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
From: Qiang Ma
Date: Wed Nov 05 2025 - 03:36:02 EST
在 2025/11/5 15:53, Baoquan He 写道:
On 11/05/25 at 11:41am, Qiang Ma wrote:It's not entirely because of it.
在 2025/11/5 11:01, Baoquan He 写道:Hmm, that's not necessary with a debug printing to verify value passed
On 11/03/25 at 02:34pm, Qiang Ma wrote:I have tested it, kexec-tools is the debug message printed
The commit a85ee18c7900 ("kexec_file: print out debugging messageThere has already been a print_segments() in kexec-tools/kexec/kexec.c,
if required") has added general code printing in kexec_file_load(),
but not in kexec_load().
Especially in the RISC-V architecture, kexec_image_info() has been
removed(commit eb7622d908a0 ("kexec_file, riscv: print out debugging
message if required")). As a result, when using '-d' for the kexec_load
interface, print nothing in the kernel space. This might be helpful for
verifying the accuracy of the data passed to the kernel. Therefore,
refer to this commit a85ee18c7900 ("kexec_file: print out debugging
message if required"), debug print information has been added.
Signed-off-by: Qiang Ma <maqianga@xxxxxxxxxxxxx>
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@xxxxxxxxx/
---
kernel/kexec.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index c7a869d32f87..9b433b972cc1 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -154,7 +154,15 @@ static int do_kexec_load(unsigned long entry, unsigned long nr_segments,
if (ret)
goto out;
+ kexec_dprintk("nr_segments = %lu\n", nr_segments);
for (i = 0; i < nr_segments; i++) {
+ struct kexec_segment *ksegment;
+
+ ksegment = &image->segment[i];
+ kexec_dprintk("segment[%lu]: buf=0x%p bufsz=0x%zx mem=0x%lx memsz=0x%zx\n",
+ i, ksegment->buf, ksegment->bufsz, ksegment->mem,
+ ksegment->memsz);
you will get duplicated printing. That sounds not good. Have you tested
this?
in user space, while kexec_dprintk is printed
in kernel space.
This might be helpful for verifying the accuracy of
the data passed to the kernel.
in kernel. We should only add debug pringing when we need but lack it.
I didn't check it carefully, if you add the debug printing only for
verifying accuracy, that doesn't justify the code change.
Another reason is that for RISC-V, for kexec_file_load interface,
kexec_image_info() was deleted at that time because the content
has been printed out in generic code.
However, these contents were not printed in kexec_load because
kexec_image_info was deleted. So now it has been added.
+
ret = kimage_load_segment(image, i);
if (ret)
goto out;
@@ -166,6 +174,9 @@ static int do_kexec_load(unsigned long entry, unsigned long nr_segments,
if (ret)
goto out;
+ kexec_dprintk("kexec_load: type:%u, start:0x%lx head:0x%lx flags:0x%lx\n",
+ image->type, image->start, image->head, flags);
+
/* Install the new kernel and uninstall the old */
image = xchg(dest_image, image);
--
2.20.1