在 2025/10/31 16:14, Baoquan He 写道:
On 10/31/25 at 10:40am, Qiang Ma wrote:
在 2025/10/30 21:58, Baoquan He 写道:
On 10/30/25 at 07:41pm, Qiang Ma wrote:
在 2025/10/30 17:42, Baoquan He 写道:
On 10/30/25 at 03:33pm, 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.
kexec_file_dbg_print setting when CONFIG_KEXEC_FILE is set. I doubt it
doesn't work when you unset CONFIG_KEXEC_FILE.
Yes, I just actually tested it and it really doesn't work when unset
CONFIG_KEXEC_FILE.

In the next version, I can add a KEXEC_DEBUG for the kernel and kexec-tools.
Hold on please, it may not need that highweight change. I will reply to
you tomorrow if I have other idea.
Ok. My current idea is to refer to kexec_file, define a kexec_dbg_print,
initialize it in the kimage_alloc_init(), modify KEXEC_FLAGS and
kexec_dprintk,
and add the judgment of kexec_debug.
Maybe we can unify it because kexec_file_dbg_print is declared and
defined in CONFIG_KEXEC_CORE scope. Rename it to kexec_core_dbg_print
and initialize it in do_kimage_alloc_init() for both, or in
kimage_alloc_init() for kexec, and kimage_file_alloc_init() for
kexec_file. It needs a new flag for kexec. What do you think?
I think it's okay.

I had also considered unifying a flag before, but I thought there was a possibility that kexec_load and kexec_file_load could be executed simultaneously, so I gave up. Later, after looking at the kexec-tools code, I found that kexec_file_load would be executed first.
So, it would be better to unify them into one flag.

Please feel free to take it as reference, or you can go in other ways
you have better one.
OK.

diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index ff7e231b0485..df33a0dd5780 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -525,10 +525,10 @@ static inline int arch_kexec_post_alloc_pages(void 
*vaddr, unsigned int pages, g
  static inline void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages) 
{ }
  #endif
-extern bool kexec_file_dbg_print;
+extern bool kexec_core_dbg_print;
#define kexec_dprintk(fmt, arg...) \
-        do { if (kexec_file_dbg_print) pr_info(fmt, ##arg); } while (0)
+        do { if (kexec_core_dbg_print) pr_info(fmt, ##arg); } while (0)
extern void *kimage_map_segment(struct kimage *image, unsigned long addr, unsigned long size);
  extern void kimage_unmap_segment(void *buffer);
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 28008e3d462e..570adb845662 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -42,6 +42,7 @@ static int kimage_alloc_init(struct kimage **rimage, unsigned 
long entry,
        if (!image)
                return -ENOMEM;
+ kexec_core_dbg_print = !!(flags & KEXEC_DEBUG);
        image->start = entry;
        image->nr_segments = nr_segments;
        memcpy(image->segment, segments, nr_segments * sizeof(*segments));
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index fa00b239c5d9..3af3ba77a3bd 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -619,6 +619,7 @@ void kimage_free(struct kimage *image)
        if (image->file_mode)
                kimage_file_post_load_cleanup(image);
+ kexec_core_dbg_print = false;
        kfree(image);
  }
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index eb62a9794242..4a24aadbad02 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -138,8 +138,6 @@ void kimage_file_post_load_cleanup(struct kimage *image)
         */
        kfree(image->image_loader_data);
        image->image_loader_data = NULL;
-
-       kexec_file_dbg_print = false;
  }
#ifdef CONFIG_KEXEC_SIG
@@ -314,7 +312,7 @@ kimage_file_alloc_init(struct kimage **rimage, int 
kernel_fd,
        if (!image)
                return -ENOMEM;
- kexec_file_dbg_print = !!(flags & KEXEC_FILE_DEBUG);
+       kexec_core_dbg_print = !!(flags & KEXEC_FILE_DEBUG);
        image->file_mode = 1;
#ifdef CONFIG_CRASH_DUMP



Reply via email to