[PATCH v2 3/4] kexec: print out debugging message if required for kexec_load

Qiang Ma posted 4 patches 3 months, 1 week ago
There is a newer version of this series
[PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months, 1 week ago
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 <maqianga@uniontech.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
---
 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);
+
 		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
Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Baoquan He 3 months ago
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 <maqianga@uniontech.com>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
> ---
>  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?

> +
>  		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
>
Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months ago
在 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 <maqianga@uniontech.com>
>> Reported-by: kernel test robot <lkp@intel.com>
>> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
>> ---
>>   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.
>> +
>>   		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
>>
>

Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Baoquan He 3 months ago
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 <maqianga@uniontech.com>
> > > Reported-by: kernel test robot <lkp@intel.com>
> > > Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
> > > ---
> > >   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.

> > > +
> > >   		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
> > > 
> > 
> 

Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months ago
在 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 <maqianga@uniontech.com>
>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
>>>> ---
>>>>    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.
>
Also, adding these prints here is helpful for debugging the 
kimage_load_segment().
>>>> +
>>>>    		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
>>>>
>

Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months ago
在 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 <maqianga@uniontech.com>
>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
>>>> ---
>>>>    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
>>>>
>
Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Baoquan He 3 months ago
On 11/05/25 at 04:35pm, Qiang Ma wrote:
> 
> 在 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 <maqianga@uniontech.com>
> > > > > Reported-by: kernel test robot <lkp@intel.com>
> > > > > Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
> > > > > ---
> > > > >    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.

print_segments() in kexec-tools/kexec/kexec.c is a generic function,
shouldn't you make it called in kexec-tools for risc-v? I am confused by
the purpose of this patchset.

> > > > > +
> > > > >    		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
> > > > > 
> > 
> 

Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months ago
在 2025/11/5 16:55, Baoquan He 写道:
> On 11/05/25 at 04:35pm, Qiang Ma wrote:
>> 在 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 <maqianga@uniontech.com>
>>>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>>>> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
>>>>>> ---
>>>>>>     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.
> print_segments() in kexec-tools/kexec/kexec.c is a generic function,
> shouldn't you make it called in kexec-tools for risc-v? I am confused by
> the purpose of this patchset.
There is a problem with what I expressed.
I don't want to add print_segments to riscv.
I want to add some debugging message(ksegment,kimage,flag) for kexec_load.

Although ksegment debugging message has been printed in kexec-tools,
it is still helpful for debugging the kernel space function.
>
>>>>>> +
>>>>>>     		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
>>>>>>
>
Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Baoquan He 3 months ago
On 11/05/25 at 07:28pm, Qiang Ma wrote:
> 
> 在 2025/11/5 16:55, Baoquan He 写道:
> > On 11/05/25 at 04:35pm, Qiang Ma wrote:
> > > 在 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 <maqianga@uniontech.com>
> > > > > > > Reported-by: kernel test robot <lkp@intel.com>
> > > > > > > Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
> > > > > > > ---
> > > > > > >     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.
> > print_segments() in kexec-tools/kexec/kexec.c is a generic function,
> > shouldn't you make it called in kexec-tools for risc-v? I am confused by
> > the purpose of this patchset.
> There is a problem with what I expressed.
> I don't want to add print_segments to riscv.
> I want to add some debugging message(ksegment,kimage,flag) for kexec_load.
> 
> Although ksegment debugging message has been printed in kexec-tools,
> it is still helpful for debugging the kernel space function.

Sorry, I can't support that. We all prepare the loading segments for the
future jumping in kexec_tools if it's kexec_load interface. And calling
print_segments() to print those loading information is natural. Why do we
need print them two times for verifying if the printing is accuracy?
Could you explain why risc-v is special?

> > 
> > > > > > > +
> > > > > > >     		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
> > > > > > > 
> > 
> 

Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
Posted by Qiang Ma 3 months ago
On 2025/11/5 下午9:01, Baoquan He wrote:
> On 11/05/25 at 07:28pm, Qiang Ma wrote:
>> 在 2025/11/5 16:55, Baoquan He 写道:
>>> On 11/05/25 at 04:35pm, Qiang Ma wrote:
>>>> 在 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 <maqianga@uniontech.com>
>>>>>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>>>>>> Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@intel.com/
>>>>>>>> ---
>>>>>>>>      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.
>>> print_segments() in kexec-tools/kexec/kexec.c is a generic function,
>>> shouldn't you make it called in kexec-tools for risc-v? I am confused by
>>> the purpose of this patchset.
>> There is a problem with what I expressed.
>> I don't want to add print_segments to riscv.
>> I want to add some debugging message(ksegment,kimage,flag) for kexec_load.
>>
>> Although ksegment debugging message has been printed in kexec-tools,
>> it is still helpful for debugging the kernel space function.
> Sorry, I can't support that. We all prepare the loading segments for the
> future jumping in kexec_tools if it's kexec_load interface. And calling
> print_segments() to print those loading information is natural. Why do we
> need print them two times for verifying if the printing is accuracy?
Is it necessary to verify the user-space data after it is passed to the 
kernel space?

> Could you explain why risc-v is special?
At first, when I saw that in the RISC-V architecture,
after kexec_image_info was removed from this commit eb7622d908a0
("kexec_file, riscv: print out debugging message if required"),
I thought only kexec_file_load was taken into consideration.
However, without considering that kexec_load would call
kexec_image_info to print segment and other debugging message,
I think that since it has been deleted.

Then, I referred to kexec_file_load and added these debugging message
to the general code of kexec_load. In this way, all architectures can
print these general debugging message.

Then I can add these debugging message to the general code,
so that all architectures can print these general debugging message.
>>>>>>>> +
>>>>>>>>      		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
>>>>>>>>
>