在 2025/11/5 15:53, Baoquan He 写道:
On 11/05/25 at 11:41am, Qiang Ma wrote:
在 2025/11/5 11:01, Baoquan He 写道:
On 11/03/25 at 02:34pm, Qiang Ma wrote:
The commit a85ee18c7900 ("kexec_file: print out debugging message
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 <[email protected]>
Reported-by: kernel test robot <[email protected]>
Closes: 
https://lore.kernel.org/oe-kbuild-all/[email protected]/
---
   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);
There has already been a print_segments() in kexec-tools/kexec/kexec.c,
you will get duplicated printing. That sounds not good. Have you tested
this?
I have tested it, kexec-tools is the debug message printed
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.
Hmm, that's not necessary with a debug printing to verify value passed
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.
It's not entirely because of it.

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



Reply via email to