* [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2024-03-12 9:58 ` kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing] Jiri Slaby
2023-12-13 5:57 ` [PATCH v4 2/7] kexec_file: print out debugging message if required Baoquan He
` (6 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
When specifying 'kexec -c -d', kexec_load interface will print loading
information, e.g the regions where kernel/initrd/purgatory/cmdline
are put, the memmap passed to 2nd kernel taken as system RAM ranges,
and printing all contents of struct kexec_segment, etc. These are
very helpful for analyzing or positioning what's happening when
kexec/kdump itself failed. The debugging printing for kexec_load
interface is made in user space utility kexec-tools.
Whereas, with kexec_file_load interface, 'kexec -s -d' print nothing.
Because kexec_file code is mostly implemented in kernel space, and the
debugging printing functionality is missed. It's not convenient when
debugging kexec/kdump loading and jumping with kexec_file_load
interface.
Now add KEXEC_FILE_DEBUG to kexec_file flag to control the debugging
message printing. And add global variable kexec_file_dbg_print and
macro kexec_dprintk() to facilitate the printing.
This is a preparation, later kexec_dprintk() will be used to replace the
existing pr_debug(). Once 'kexec -s -d' is specified, it will print out
kexec/kdump loading information. If '-d' is not specified, it regresses
to pr_debug().
Signed-off-by: Baoquan He <bhe@redhat.com>
---
include/linux/kexec.h | 9 ++++++++-
include/uapi/linux/kexec.h | 1 +
kernel/kexec_core.c | 2 ++
kernel/kexec_file.c | 3 +++
4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index 8227455192b7..400cb6c02176 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -403,7 +403,7 @@ bool kexec_load_permitted(int kexec_image_type);
/* List of defined/legal kexec file flags */
#define KEXEC_FILE_FLAGS (KEXEC_FILE_UNLOAD | KEXEC_FILE_ON_CRASH | \
- KEXEC_FILE_NO_INITRAMFS)
+ KEXEC_FILE_NO_INITRAMFS | KEXEC_FILE_DEBUG)
/* flag to track if kexec reboot is in progress */
extern bool kexec_in_progress;
@@ -500,6 +500,13 @@ static inline int crash_hotplug_memory_support(void) { return 0; }
static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
#endif
+extern bool kexec_file_dbg_print;
+
+#define kexec_dprintk(fmt, ...) \
+ printk("%s" fmt, \
+ kexec_file_dbg_print ? KERN_INFO : KERN_DEBUG, \
+ ##__VA_ARGS__)
+
#else /* !CONFIG_KEXEC_CORE */
struct pt_regs;
struct task_struct;
diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h
index 01766dd839b0..c17bb096ea68 100644
--- a/include/uapi/linux/kexec.h
+++ b/include/uapi/linux/kexec.h
@@ -25,6 +25,7 @@
#define KEXEC_FILE_UNLOAD 0x00000001
#define KEXEC_FILE_ON_CRASH 0x00000002
#define KEXEC_FILE_NO_INITRAMFS 0x00000004
+#define KEXEC_FILE_DEBUG 0x00000008
/* These values match the ELF architecture values.
* Unless there is a good reason that should continue to be the case.
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index be5642a4ec49..f70bf3a7885c 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -52,6 +52,8 @@ atomic_t __kexec_lock = ATOMIC_INIT(0);
/* Flag to indicate we are going to kexec a new kernel */
bool kexec_in_progress = false;
+bool kexec_file_dbg_print;
+
int kexec_should_crash(struct task_struct *p)
{
/*
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index f9a419cd22d4..aca5dac74044 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -123,6 +123,8 @@ 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
@@ -278,6 +280,7 @@ kimage_file_alloc_init(struct kimage **rimage, int kernel_fd,
if (!image)
return -ENOMEM;
+ kexec_file_dbg_print = !!(flags & KEXEC_FILE_DEBUG);
image->file_mode = 1;
if (kexec_on_panic) {
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing]
2023-12-13 5:57 ` [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing Baoquan He
@ 2024-03-12 9:58 ` Jiri Slaby
2024-03-13 0:48 ` Baoquan He
0 siblings, 1 reply; 17+ messages in thread
From: Jiri Slaby @ 2024-03-12 9:58 UTC (permalink / raw)
To: Baoquan He, linux-kernel
Cc: linux-parisc, x86, kexec, conor, nathan, joe, linux-riscv,
linuxppc-dev, akpm, linux-arm-kernel
On 13. 12. 23, 6:57, Baoquan He wrote:
> When specifying 'kexec -c -d', kexec_load interface will print loading
> information, e.g the regions where kernel/initrd/purgatory/cmdline
> are put, the memmap passed to 2nd kernel taken as system RAM ranges,
> and printing all contents of struct kexec_segment, etc. These are
> very helpful for analyzing or positioning what's happening when
> kexec/kdump itself failed. The debugging printing for kexec_load
> interface is made in user space utility kexec-tools.
>
> Whereas, with kexec_file_load interface, 'kexec -s -d' print nothing.
> Because kexec_file code is mostly implemented in kernel space, and the
> debugging printing functionality is missed. It's not convenient when
> debugging kexec/kdump loading and jumping with kexec_file_load
> interface.
>
> Now add KEXEC_FILE_DEBUG to kexec_file flag to control the debugging
> message printing. And add global variable kexec_file_dbg_print and
> macro kexec_dprintk() to facilitate the printing.
>
> This is a preparation, later kexec_dprintk() will be used to replace the
> existing pr_debug(). Once 'kexec -s -d' is specified, it will print out
> kexec/kdump loading information. If '-d' is not specified, it regresses
> to pr_debug().
>
> Signed-off-by: Baoquan He <bhe@redhat.com>
...
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
...
> @@ -500,6 +500,13 @@ static inline int crash_hotplug_memory_support(void) { return 0; }
> static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
> #endif
>
> +extern bool kexec_file_dbg_print;
> +
> +#define kexec_dprintk(fmt, ...) \
> + printk("%s" fmt, \
> + kexec_file_dbg_print ? KERN_INFO : KERN_DEBUG, \
> + ##__VA_ARGS__)
This means you dump it _always_. Only with different levels.
And without any prefix whatsoever, so people see bloat like this in
their log now:
[ +0.000001] 0000000000001000-000000000009ffff (1)
[ +0.000002] 000000007f96d000-000000007f97efff (3)
[ +0.000002] 0000000000800000-0000000000807fff (4)
[ +0.000001] 000000000080b000-000000000080bfff (4)
[ +0.000002] 0000000000810000-00000000008fffff (4)
[ +0.000001] 000000007f97f000-000000007f9fefff (4)
[ +0.000001] 000000007ff00000-000000007fffffff (4)
[ +0.000002] 0000000000000000-0000000000000fff (2)
without actually knowing what that is.
There should be nothing logged if that is not asked for and especially
if kexec load went fine, right?
Can this be redesigned, please?
Actually what was wrong on the pr_debug()s? Can you simply turn them on
from the kernel when -d is passed to kexec instead of all this?
...
> --- a/kernel/kexec_core.c
> +++ b/kernel/kexec_core.c
> @@ -52,6 +52,8 @@ atomic_t __kexec_lock = ATOMIC_INIT(0);
> /* Flag to indicate we are going to kexec a new kernel */
> bool kexec_in_progress = false;
>
> +bool kexec_file_dbg_print;
Ugh, and a global flag for this?
thanks,
--
js
suse labs
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing]
2024-03-12 9:58 ` kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing] Jiri Slaby
@ 2024-03-13 0:48 ` Baoquan He
2024-03-13 5:58 ` Jiri Slaby
0 siblings, 1 reply; 17+ messages in thread
From: Baoquan He @ 2024-03-13 0:48 UTC (permalink / raw)
To: Jiri Slaby
Cc: linux-parisc, x86, kexec, linux-kernel, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Hi Jiri,
On 03/12/24 at 10:58am, Jiri Slaby wrote:
> On 13. 12. 23, 6:57, Baoquan He wrote:
... snip...
> > --- a/include/linux/kexec.h
> > +++ b/include/linux/kexec.h
> ...
> > @@ -500,6 +500,13 @@ static inline int crash_hotplug_memory_support(void) { return 0; }
> > static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
> > #endif
> > +extern bool kexec_file_dbg_print;
> > +
> > +#define kexec_dprintk(fmt, ...) \
> > + printk("%s" fmt, \
> > + kexec_file_dbg_print ? KERN_INFO : KERN_DEBUG, \
> > + ##__VA_ARGS__)
>
> This means you dump it _always_. Only with different levels.
It dumped always too with pr_debug() before, I just add a switch to
control it's pr_info() or pr_debug().
>
> And without any prefix whatsoever, so people see bloat like this in their
> log now:
> [ +0.000001] 0000000000001000-000000000009ffff (1)
> [ +0.000002] 000000007f96d000-000000007f97efff (3)
> [ +0.000002] 0000000000800000-0000000000807fff (4)
> [ +0.000001] 000000000080b000-000000000080bfff (4)
> [ +0.000002] 0000000000810000-00000000008fffff (4)
> [ +0.000001] 000000007f97f000-000000007f9fefff (4)
> [ +0.000001] 000000007ff00000-000000007fffffff (4)
> [ +0.000002] 0000000000000000-0000000000000fff (2)
On which arch are you seeing this? There should be one line above these
range printing to tell what they are, like:
E820 memmap:
0000000000000000-000000000009a3ff (1)
000000000009a400-000000000009ffff (2)
00000000000e0000-00000000000fffff (2)
0000000000100000-000000006ff83fff (1)
000000006ff84000-000000007ac50fff (2)
>
> without actually knowing what that is.
>
> There should be nothing logged if that is not asked for and especially if
> kexec load went fine, right?
Right. Before this patch, those pr_debug() were already there. You need
enable them to print out like add '#define DEBUG' in *.c file, or enable
the dynamic debugging of the file or function. With this patch applied,
you only need specify '-d' when you execute kexec command with
kexec_file load interface, like:
kexec -s -l -d /boot/vmlinuz-xxxx.img --initrd xxx.img --reuse-cmdline
For kexec_file load, it is not logging if not specifying '-d', unless
you take way to make pr_debug() work in that file.
>
> Can this be redesigned, please?
Sure, after making clear what's going on with this, I will try.
>
> Actually what was wrong on the pr_debug()s? Can you simply turn them on from
> the kernel when -d is passed to kexec instead of all this?
Joe suggested this during v1 reviewing:
https://lore.kernel.org/all/1e7863ec4e4ab10b84fd0e64f30f8464d2e484a3.camel@perches.com/T/#u
>
> ...
> > --- a/kernel/kexec_core.c
> > +++ b/kernel/kexec_core.c
> > @@ -52,6 +52,8 @@ atomic_t __kexec_lock = ATOMIC_INIT(0);
> > /* Flag to indicate we are going to kexec a new kernel */
> > bool kexec_in_progress = false;
> > +bool kexec_file_dbg_print;
>
> Ugh, and a global flag for this?
Yeah, kexec_file_dbg_print records if '-d' is specified when 'kexec'
command executed. Anything wrong with the global flag?
Thanks
Baoquan
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing]
2024-03-13 0:48 ` Baoquan He
@ 2024-03-13 5:58 ` Jiri Slaby
2024-03-13 7:10 ` Baoquan He
0 siblings, 1 reply; 17+ messages in thread
From: Jiri Slaby @ 2024-03-13 5:58 UTC (permalink / raw)
To: Baoquan He
Cc: linux-parisc, x86, kexec, linux-kernel, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Hi,
On 13. 03. 24, 1:48, Baoquan He wrote:
> Hi Jiri,
>
> On 03/12/24 at 10:58am, Jiri Slaby wrote:
>> On 13. 12. 23, 6:57, Baoquan He wrote:
> ... snip...
>>> --- a/include/linux/kexec.h
>>> +++ b/include/linux/kexec.h
>> ...
>>> @@ -500,6 +500,13 @@ static inline int crash_hotplug_memory_support(void) { return 0; }
>>> static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
>>> #endif
>>> +extern bool kexec_file_dbg_print;
>>> +
>>> +#define kexec_dprintk(fmt, ...) \
>>> + printk("%s" fmt, \
>>> + kexec_file_dbg_print ? KERN_INFO : KERN_DEBUG, \
>>> + ##__VA_ARGS__)
>>
>> This means you dump it _always_. Only with different levels.
>
> It dumped always too with pr_debug() before, I just add a switch to
> control it's pr_info() or pr_debug().
Not really, see below.
>>
>> And without any prefix whatsoever, so people see bloat like this in their
>> log now:
>> [ +0.000001] 0000000000001000-000000000009ffff (1)
>> [ +0.000002] 000000007f96d000-000000007f97efff (3)
>> [ +0.000002] 0000000000800000-0000000000807fff (4)
>> [ +0.000001] 000000000080b000-000000000080bfff (4)
>> [ +0.000002] 0000000000810000-00000000008fffff (4)
>> [ +0.000001] 000000007f97f000-000000007f9fefff (4)
>> [ +0.000001] 000000007ff00000-000000007fffffff (4)
>> [ +0.000002] 0000000000000000-0000000000000fff (2)
>
> On which arch are you seeing this? There should be one line above these
> range printing to tell what they are, like:
>
> E820 memmap:
Ah this is there too. It's a lot of output, so I took it out of context,
apparently.
> 0000000000000000-000000000009a3ff (1)
> 000000000009a400-000000000009ffff (2)
> 00000000000e0000-00000000000fffff (2)
> 0000000000100000-000000006ff83fff (1)
> 000000006ff84000-000000007ac50fff (2)
It should all be prefixed like kdump: or kexec: in any way.
>> without actually knowing what that is.
>>
>> There should be nothing logged if that is not asked for and especially if
>> kexec load went fine, right?
>
> Right. Before this patch, those pr_debug() were already there. You need
> enable them to print out like add '#define DEBUG' in *.c file, or enable
> the dynamic debugging of the file or function.
I think it's perfectly fine for DEBUG builds to print this out. And many
(all major?) distros use dyndbg, so it used to print nothing by default.
> With this patch applied,
> you only need specify '-d' when you execute kexec command with
> kexec_file load interface, like:
>
> kexec -s -l -d /boot/vmlinuz-xxxx.img --initrd xxx.img --reuse-cmdline
Perhaps our (SUSE) tooling passes -d? But I am seeing this every time I
boot.
No, it does not seem so:
load.sh[915]: Starting kdump kernel load; kexec cmdline: /sbin/kexec -p
/var/lib/kdump/kernel --append=" loglevel=7 console=tty0 console=ttyS0
video=1920x1080,1024x768,800x600 oops=panic
lsm=lockdown,capability,integrity,selinux sysrq=yes reset_devices
acpi_no_memhotplug cgroup_disable=memory nokaslr numa=off irqpoll
nr_cpus=1 root=kdump rootflags=bind rd.udev.children-max=8
disable_cpu_apicid=0 panic=1" --initrd=/var/lib/kdump/initrd -a
> For kexec_file load, it is not logging if not specifying '-d', unless
> you take way to make pr_debug() work in that file.
So is -d detection malfunctioning under some circumstances?
>> Can this be redesigned, please?
>
> Sure, after making clear what's going on with this, I will try.
>
>>
>> Actually what was wrong on the pr_debug()s? Can you simply turn them on from
>> the kernel when -d is passed to kexec instead of all this?
>
> Joe suggested this during v1 reviewing:
> https://lore.kernel.org/all/1e7863ec4e4ab10b84fd0e64f30f8464d2e484a3.camel@perches.com/T/#u
>
>>
>> ...
>>> --- a/kernel/kexec_core.c
>>> +++ b/kernel/kexec_core.c
>>> @@ -52,6 +52,8 @@ atomic_t __kexec_lock = ATOMIC_INIT(0);
>>> /* Flag to indicate we are going to kexec a new kernel */
>>> bool kexec_in_progress = false;
>>> +bool kexec_file_dbg_print;
>>
>> Ugh, and a global flag for this?
>
> Yeah, kexec_file_dbg_print records if '-d' is specified when 'kexec'
> command executed. Anything wrong with the global flag?
Global variables are frowned upon. To cite coding style: unless you
**really** need them. Here, it looks like you do not.
thanks,
--
js
suse labs
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: kexec verbose dumps with 6.8 [was: [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing]
2024-03-13 5:58 ` Jiri Slaby
@ 2024-03-13 7:10 ` Baoquan He
0 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2024-03-13 7:10 UTC (permalink / raw)
To: Jiri Slaby
Cc: linux-parisc, x86, kexec, linux-kernel, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
On 03/13/24 at 06:58am, Jiri Slaby wrote:
> Hi,
>
>
> On 13. 03. 24, 1:48, Baoquan He wrote:
> > Hi Jiri,
> >
> > On 03/12/24 at 10:58am, Jiri Slaby wrote:
> > > On 13. 12. 23, 6:57, Baoquan He wrote:
> > ... snip...
> > > > --- a/include/linux/kexec.h
> > > > +++ b/include/linux/kexec.h
> > > ...
> > > > @@ -500,6 +500,13 @@ static inline int crash_hotplug_memory_support(void) { return 0; }
> > > > static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }
> > > > #endif
> > > > +extern bool kexec_file_dbg_print;
> > > > +
> > > > +#define kexec_dprintk(fmt, ...) \
> > > > + printk("%s" fmt, \
> > > > + kexec_file_dbg_print ? KERN_INFO : KERN_DEBUG, \
> > > > + ##__VA_ARGS__)
> > >
> > > This means you dump it _always_. Only with different levels.
> >
> > It dumped always too with pr_debug() before, I just add a switch to
> > control it's pr_info() or pr_debug().
>
> Not really, see below.
>
> > >
> > > And without any prefix whatsoever, so people see bloat like this in their
> > > log now:
> > > [ +0.000001] 0000000000001000-000000000009ffff (1)
> > > [ +0.000002] 000000007f96d000-000000007f97efff (3)
> > > [ +0.000002] 0000000000800000-0000000000807fff (4)
> > > [ +0.000001] 000000000080b000-000000000080bfff (4)
> > > [ +0.000002] 0000000000810000-00000000008fffff (4)
> > > [ +0.000001] 000000007f97f000-000000007f9fefff (4)
> > > [ +0.000001] 000000007ff00000-000000007fffffff (4)
> > > [ +0.000002] 0000000000000000-0000000000000fff (2)
> >
> > On which arch are you seeing this? There should be one line above these
> > range printing to tell what they are, like:
> >
> > E820 memmap:
>
> Ah this is there too. It's a lot of output, so I took it out of context,
> apparently.
>
> > 0000000000000000-000000000009a3ff (1)
> > 000000000009a400-000000000009ffff (2)
> > 00000000000e0000-00000000000fffff (2)
> > 0000000000100000-000000006ff83fff (1)
> > 000000006ff84000-000000007ac50fff (2)
>
> It should all be prefixed like kdump: or kexec: in any way.
I can reproduce it now on fedora. OK, I will add kexec or something
similar to prefix. Thanks.
>
> > > without actually knowing what that is.
> > >
> > > There should be nothing logged if that is not asked for and especially if
> > > kexec load went fine, right?
> >
> > Right. Before this patch, those pr_debug() were already there. You need
> > enable them to print out like add '#define DEBUG' in *.c file, or enable
> > the dynamic debugging of the file or function.
>
> I think it's perfectly fine for DEBUG builds to print this out. And many
> (all major?) distros use dyndbg, so it used to print nothing by default.
>
> > With this patch applied,
> > you only need specify '-d' when you execute kexec command with
> > kexec_file load interface, like:
> >
> > kexec -s -l -d /boot/vmlinuz-xxxx.img --initrd xxx.img --reuse-cmdline
>
> Perhaps our (SUSE) tooling passes -d? But I am seeing this every time I
> boot.
>
> No, it does not seem so:
> load.sh[915]: Starting kdump kernel load; kexec cmdline: /sbin/kexec -p
> /var/lib/kdump/kernel --append=" loglevel=7 console=tty0 console=ttyS0
> video=1920x1080,1024x768,800x600 oops=panic
> lsm=lockdown,capability,integrity,selinux sysrq=yes reset_devices
> acpi_no_memhotplug cgroup_disable=memory nokaslr numa=off irqpoll nr_cpus=1
> root=kdump rootflags=bind rd.udev.children-max=8 disable_cpu_apicid=0
> panic=1" --initrd=/var/lib/kdump/initrd -a
>
> > For kexec_file load, it is not logging if not specifying '-d', unless
> > you take way to make pr_debug() work in that file.
>
> So is -d detection malfunctioning under some circumstances?
>
> > > Can this be redesigned, please?
> >
> > Sure, after making clear what's going on with this, I will try.
> >
> > >
> > > Actually what was wrong on the pr_debug()s? Can you simply turn them on from
> > > the kernel when -d is passed to kexec instead of all this?
> >
> > Joe suggested this during v1 reviewing:
> > https://lore.kernel.org/all/1e7863ec4e4ab10b84fd0e64f30f8464d2e484a3.camel@perches.com/T/#u
> >
> > >
> > > ...
> > > > --- a/kernel/kexec_core.c
> > > > +++ b/kernel/kexec_core.c
> > > > @@ -52,6 +52,8 @@ atomic_t __kexec_lock = ATOMIC_INIT(0);
> > > > /* Flag to indicate we are going to kexec a new kernel */
> > > > bool kexec_in_progress = false;
> > > > +bool kexec_file_dbg_print;
> > >
> > > Ugh, and a global flag for this?
> >
> > Yeah, kexec_file_dbg_print records if '-d' is specified when 'kexec'
> > command executed. Anything wrong with the global flag?
>
> Global variables are frowned upon. To cite coding style: unless you
> **really** need them. Here, it looks like you do not.
I see your point, will consider and change. Thanks again.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4 2/7] kexec_file: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
2023-12-13 5:57 ` [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2023-12-13 5:57 ` [PATCH v4 3/7] kexec_file, x86: " Baoquan He
` (5 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help
debug.
Here replace pr_debug() with the newly added kexec_dprintk() in
kexec_file loading related codes.
And also print out type/start/head of kimage and flags to help debug.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
kernel/crash_core.c | 8 +++++---
kernel/kexec_file.c | 11 ++++++++---
security/integrity/ima/ima_kexec.c | 4 ++--
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index efe87d501c8c..380d0d3acc7b 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -551,9 +551,11 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map,
phdr->p_filesz = phdr->p_memsz = mend - mstart + 1;
phdr->p_align = 0;
ehdr->e_phnum++;
- pr_debug("Crash PT_LOAD ELF header. phdr=%p vaddr=0x%llx, paddr=0x%llx, sz=0x%llx e_phnum=%d p_offset=0x%llx\n",
- phdr, phdr->p_vaddr, phdr->p_paddr, phdr->p_filesz,
- ehdr->e_phnum, phdr->p_offset);
+#ifdef CONFIG_KEXEC_FILE
+ kexec_dprintk("Crash PT_LOAD ELF header. phdr=%p vaddr=0x%llx, paddr=0x%llx, sz=0x%llx e_phnum=%d p_offset=0x%llx\n",
+ phdr, phdr->p_vaddr, phdr->p_paddr, phdr->p_filesz,
+ ehdr->e_phnum, phdr->p_offset);
+#endif
phdr++;
}
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index aca5dac74044..76de1ac7c424 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -204,6 +204,8 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd,
if (ret < 0)
return ret;
image->kernel_buf_len = ret;
+ kexec_dprintk("kernel: %p kernel_size: %#lx\n",
+ image->kernel_buf, image->kernel_buf_len);
/* Call arch image probe handlers */
ret = arch_kexec_kernel_image_probe(image, image->kernel_buf,
@@ -387,13 +389,14 @@ SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
if (ret)
goto out;
+ kexec_dprintk("nr_segments = %lu\n", image->nr_segments);
for (i = 0; i < image->nr_segments; i++) {
struct kexec_segment *ksegment;
ksegment = &image->segment[i];
- pr_debug("Loading segment %d: buf=0x%p bufsz=0x%zx mem=0x%lx memsz=0x%zx\n",
- i, ksegment->buf, ksegment->bufsz, ksegment->mem,
- ksegment->memsz);
+ kexec_dprintk("segment[%d]: 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, &image->segment[i]);
if (ret)
@@ -406,6 +409,8 @@ SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
if (ret)
goto out;
+ kexec_dprintk("kexec_file_load: type:%u, start:0x%lx head:0x%lx flags:0x%lx\n",
+ image->type, image->start, image->head, flags);
/*
* Free up any temporary buffers allocated which are not needed
* after image has been loaded
diff --git a/security/integrity/ima/ima_kexec.c b/security/integrity/ima/ima_kexec.c
index ad133fe120db..dadc1d138118 100644
--- a/security/integrity/ima/ima_kexec.c
+++ b/security/integrity/ima/ima_kexec.c
@@ -129,8 +129,8 @@ void ima_add_kexec_buffer(struct kimage *image)
image->ima_buffer_size = kexec_segment_size;
image->ima_buffer = kexec_buffer;
- pr_debug("kexec measurement buffer for the loaded kernel at 0x%lx.\n",
- kbuf.mem);
+ kexec_dprintk("kexec measurement buffer for the loaded kernel at 0x%lx.\n",
+ kbuf.mem);
}
#endif /* IMA_KEXEC */
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 3/7] kexec_file, x86: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
2023-12-13 5:57 ` [PATCH v4 1/7] kexec_file: add kexec_file flag to control debug printing Baoquan He
2023-12-13 5:57 ` [PATCH v4 2/7] kexec_file: print out debugging message if required Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2023-12-13 5:57 ` [PATCH v4 4/7] kexec_file, arm64: " Baoquan He
` (4 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help
debug.
Here replace pr_debug() with the newly added kexec_dprintk() in
kexec_file loading related codes.
And also print out e820 memmap passed to 2nd kernel just as kexec_load
interface has been doing.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
arch/x86/kernel/crash.c | 4 ++--
arch/x86/kernel/kexec-bzimage64.c | 23 ++++++++++++++---------
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index c92d88680dbf..1715e5f06a59 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -386,8 +386,8 @@ int crash_load_segments(struct kimage *image)
if (ret)
return ret;
image->elf_load_addr = kbuf.mem;
- pr_debug("Loaded ELF headers at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded ELF headers at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
return ret;
}
diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
index a61c12c01270..e9ae0eac6bf9 100644
--- a/arch/x86/kernel/kexec-bzimage64.c
+++ b/arch/x86/kernel/kexec-bzimage64.c
@@ -82,7 +82,7 @@ static int setup_cmdline(struct kimage *image, struct boot_params *params,
cmdline_ptr[cmdline_len - 1] = '\0';
- pr_debug("Final command line is: %s\n", cmdline_ptr);
+ kexec_dprintk("Final command line is: %s\n", cmdline_ptr);
cmdline_ptr_phys = bootparams_load_addr + cmdline_offset;
cmdline_low_32 = cmdline_ptr_phys & 0xffffffffUL;
cmdline_ext_32 = cmdline_ptr_phys >> 32;
@@ -272,7 +272,12 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params,
nr_e820_entries = params->e820_entries;
+ kexec_dprintk("E820 memmap:\n");
for (i = 0; i < nr_e820_entries; i++) {
+ kexec_dprintk("%016llx-%016llx (%d)\n",
+ params->e820_table[i].addr,
+ params->e820_table[i].addr + params->e820_table[i].size - 1,
+ params->e820_table[i].type);
if (params->e820_table[i].type != E820_TYPE_RAM)
continue;
start = params->e820_table[i].addr;
@@ -424,7 +429,7 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
* command line. Make sure it does not overflow
*/
if (cmdline_len + MAX_ELFCOREHDR_STR_LEN > header->cmdline_size) {
- pr_debug("Appending elfcorehdr=<addr> to command line exceeds maximum allowed length\n");
+ kexec_dprintk("Appending elfcorehdr=<addr> to command line exceeds maximum allowed length\n");
return ERR_PTR(-EINVAL);
}
@@ -445,7 +450,7 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
return ERR_PTR(ret);
}
- pr_debug("Loaded purgatory at 0x%lx\n", pbuf.mem);
+ kexec_dprintk("Loaded purgatory at 0x%lx\n", pbuf.mem);
/*
@@ -490,8 +495,8 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
if (ret)
goto out_free_params;
bootparam_load_addr = kbuf.mem;
- pr_debug("Loaded boot_param, command line and misc at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- bootparam_load_addr, kbuf.bufsz, kbuf.bufsz);
+ kexec_dprintk("Loaded boot_param, command line and misc at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ bootparam_load_addr, kbuf.bufsz, kbuf.bufsz);
/* Load kernel */
kbuf.buffer = kernel + kern16_size;
@@ -505,8 +510,8 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
goto out_free_params;
kernel_load_addr = kbuf.mem;
- pr_debug("Loaded 64bit kernel at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- kernel_load_addr, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded 64bit kernel at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ kernel_load_addr, kbuf.bufsz, kbuf.memsz);
/* Load initrd high */
if (initrd) {
@@ -520,8 +525,8 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
goto out_free_params;
initrd_load_addr = kbuf.mem;
- pr_debug("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- initrd_load_addr, initrd_len, initrd_len);
+ kexec_dprintk("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ initrd_load_addr, initrd_len, initrd_len);
setup_initrd(params, initrd_load_addr, initrd_len);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 4/7] kexec_file, arm64: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
` (2 preceding siblings ...)
2023-12-13 5:57 ` [PATCH v4 3/7] kexec_file, x86: " Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2023-12-13 5:57 ` [PATCH v4 5/7] kexec_file, ricv: " Baoquan He
` (3 subsequent siblings)
7 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help
debug.
Here replace pr_debug() with the newly added kexec_dprintk() in
kexec_file loading related codes.
And also remove the kimage->segment[] printing because the generic code
has done the printing.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
arch/arm64/kernel/kexec_image.c | 6 +++---
arch/arm64/kernel/machine_kexec.c | 26 ++++++--------------------
arch/arm64/kernel/machine_kexec_file.c | 12 ++++++------
3 files changed, 15 insertions(+), 29 deletions(-)
diff --git a/arch/arm64/kernel/kexec_image.c b/arch/arm64/kernel/kexec_image.c
index 636be6715155..532d72ea42ee 100644
--- a/arch/arm64/kernel/kexec_image.c
+++ b/arch/arm64/kernel/kexec_image.c
@@ -122,9 +122,9 @@ static void *image_load(struct kimage *image,
kernel_segment->memsz -= text_offset;
image->start = kernel_segment->mem;
- pr_debug("Loaded kernel at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- kernel_segment->mem, kbuf.bufsz,
- kernel_segment->memsz);
+ kexec_dprintk("Loaded kernel at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ kernel_segment->mem, kbuf.bufsz,
+ kernel_segment->memsz);
return NULL;
}
diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
index 078910db77a4..b38aae5b488d 100644
--- a/arch/arm64/kernel/machine_kexec.c
+++ b/arch/arm64/kernel/machine_kexec.c
@@ -32,26 +32,12 @@
static void _kexec_image_info(const char *func, int line,
const struct kimage *kimage)
{
- unsigned long i;
-
- pr_debug("%s:%d:\n", func, line);
- pr_debug(" kexec kimage info:\n");
- pr_debug(" type: %d\n", kimage->type);
- pr_debug(" start: %lx\n", kimage->start);
- pr_debug(" head: %lx\n", kimage->head);
- pr_debug(" nr_segments: %lu\n", kimage->nr_segments);
- pr_debug(" dtb_mem: %pa\n", &kimage->arch.dtb_mem);
- pr_debug(" kern_reloc: %pa\n", &kimage->arch.kern_reloc);
- pr_debug(" el2_vectors: %pa\n", &kimage->arch.el2_vectors);
-
- for (i = 0; i < kimage->nr_segments; i++) {
- pr_debug(" segment[%lu]: %016lx - %016lx, 0x%lx bytes, %lu pages\n",
- i,
- kimage->segment[i].mem,
- kimage->segment[i].mem + kimage->segment[i].memsz,
- kimage->segment[i].memsz,
- kimage->segment[i].memsz / PAGE_SIZE);
- }
+ kexec_dprintk("%s:%d:\n", func, line);
+ kexec_dprintk(" kexec kimage info:\n");
+ kexec_dprintk(" type: %d\n", kimage->type);
+ kexec_dprintk(" head: %lx\n", kimage->head);
+ kexec_dprintk(" kern_reloc: %pa\n", &kimage->arch.kern_reloc);
+ kexec_dprintk(" el2_vectors: %pa\n", &kimage->arch.el2_vectors);
}
void machine_kexec_cleanup(struct kimage *kimage)
diff --git a/arch/arm64/kernel/machine_kexec_file.c b/arch/arm64/kernel/machine_kexec_file.c
index a11a6e14ba89..0e017358f4ba 100644
--- a/arch/arm64/kernel/machine_kexec_file.c
+++ b/arch/arm64/kernel/machine_kexec_file.c
@@ -127,8 +127,8 @@ int load_other_segments(struct kimage *image,
image->elf_load_addr = kbuf.mem;
image->elf_headers_sz = headers_sz;
- pr_debug("Loaded elf core header at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded elf core header at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
}
/* load initrd */
@@ -148,8 +148,8 @@ int load_other_segments(struct kimage *image,
goto out_err;
initrd_load_addr = kbuf.mem;
- pr_debug("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- initrd_load_addr, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ initrd_load_addr, kbuf.bufsz, kbuf.memsz);
}
/* load dtb */
@@ -179,8 +179,8 @@ int load_other_segments(struct kimage *image,
image->arch.dtb = dtb;
image->arch.dtb_mem = kbuf.mem;
- pr_debug("Loaded dtb at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- kbuf.mem, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded dtb at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ kbuf.mem, kbuf.bufsz, kbuf.memsz);
return 0;
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
` (3 preceding siblings ...)
2023-12-13 5:57 ` [PATCH v4 4/7] kexec_file, arm64: " Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2023-12-19 14:44 ` Conor Dooley
2023-12-13 5:57 ` [PATCH v4 6/7] kexec_file, power: " Baoquan He
` (2 subsequent siblings)
7 siblings, 1 reply; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help debug.
Here replace pr_debug() with the newly added kexec_dprintk() in kexec_file
loading related codes.
And also replace pr_notice() with kexec_dprintk() in elf_kexec_load()
because loaded location of purgatory and device tree are only printed
out for debugging, it doesn't make sense to always print them out.
And also remove kexec_image_info() because the content has been printed
out in generic code.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
arch/riscv/kernel/elf_kexec.c | 11 ++++++-----
arch/riscv/kernel/machine_kexec.c | 26 --------------------------
2 files changed, 6 insertions(+), 31 deletions(-)
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index e60fbd8660c4..5bd1ec3341fe 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -216,7 +216,6 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
if (ret)
goto out;
kernel_start = image->start;
- pr_notice("The entry point of kernel at 0x%lx\n", image->start);
/* Add the kernel binary to the image */
ret = riscv_kexec_elf_load(image, &ehdr, &elf_info,
@@ -252,8 +251,8 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
image->elf_load_addr = kbuf.mem;
image->elf_headers_sz = headers_sz;
- pr_debug("Loaded elf core header at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
- image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
+ kexec_dprintk("Loaded elf core header at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
+ image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
/* Setup cmdline for kdump kernel case */
modified_cmdline = setup_kdump_cmdline(image, cmdline,
@@ -275,6 +274,8 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
pr_err("Error loading purgatory ret=%d\n", ret);
goto out;
}
+ kexec_dprintk("Loaded purgatory at 0x%lx\n", kbuf.mem);
+
ret = kexec_purgatory_get_set_symbol(image, "riscv_kernel_entry",
&kernel_start,
sizeof(kernel_start), 0);
@@ -293,7 +294,7 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
if (ret)
goto out;
initrd_pbase = kbuf.mem;
- pr_notice("Loaded initrd at 0x%lx\n", initrd_pbase);
+ kexec_dprintk("Loaded initrd at 0x%lx\n", initrd_pbase);
}
/* Add the DTB to the image */
@@ -318,7 +319,7 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
}
/* Cache the fdt buffer address for memory cleanup */
image->arch.fdt = fdt;
- pr_notice("Loaded device tree at 0x%lx\n", kbuf.mem);
+ kexec_dprintk("Loaded device tree at 0x%lx\n", kbuf.mem);
goto out;
out_free_fdt:
diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c
index 2d139b724bc8..ed9cad20c039 100644
--- a/arch/riscv/kernel/machine_kexec.c
+++ b/arch/riscv/kernel/machine_kexec.c
@@ -18,30 +18,6 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
-/*
- * kexec_image_info - Print received image details
- */
-static void
-kexec_image_info(const struct kimage *image)
-{
- unsigned long i;
-
- pr_debug("Kexec image info:\n");
- pr_debug("\ttype: %d\n", image->type);
- pr_debug("\tstart: %lx\n", image->start);
- pr_debug("\thead: %lx\n", image->head);
- pr_debug("\tnr_segments: %lu\n", image->nr_segments);
-
- for (i = 0; i < image->nr_segments; i++) {
- pr_debug("\t segment[%lu]: %016lx - %016lx", i,
- image->segment[i].mem,
- image->segment[i].mem + image->segment[i].memsz);
- pr_debug("\t\t0x%lx bytes, %lu pages\n",
- (unsigned long) image->segment[i].memsz,
- (unsigned long) image->segment[i].memsz / PAGE_SIZE);
- }
-}
-
/*
* machine_kexec_prepare - Initialize kexec
*
@@ -60,8 +36,6 @@ machine_kexec_prepare(struct kimage *image)
unsigned int control_code_buffer_sz = 0;
int i = 0;
- kexec_image_info(image);
-
/* Find the Flattened Device Tree and save its physical address */
for (i = 0; i < image->nr_segments; i++) {
if (image->segment[i].memsz <= sizeof(fdt))
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
2023-12-13 5:57 ` [PATCH v4 5/7] kexec_file, ricv: " Baoquan He
@ 2023-12-19 14:44 ` Conor Dooley
2023-12-20 4:22 ` Baoquan He
0 siblings, 1 reply; 17+ messages in thread
From: Conor Dooley @ 2023-12-19 14:44 UTC (permalink / raw)
To: Baoquan He
Cc: linux-parisc, x86, kexec, linux-kernel, nathan, joe, linux-riscv,
linuxppc-dev, akpm, linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 971 bytes --]
On Wed, Dec 13, 2023 at 01:57:45PM +0800, Baoquan He wrote:
> Then when specifying '-d' for kexec_file_load interface, loaded
> locations of kernel/initrd/cmdline etc can be printed out to help debug.
>
> Here replace pr_debug() with the newly added kexec_dprintk() in kexec_file
> loading related codes.
>
> And also replace pr_notice() with kexec_dprintk() in elf_kexec_load()
> because loaded location of purgatory and device tree are only printed
> out for debugging, it doesn't make sense to always print them out.
>
> And also remove kexec_image_info() because the content has been printed
> out in generic code.
>
> Signed-off-by: Baoquan He <bhe@redhat.com>
I'm sorry - I meant to look at this several days ago but I forgot.
Apart from the typo that crept back into $subject, this version explains
the rationale behind what you're changing a lot better, thanks.
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
2023-12-19 14:44 ` Conor Dooley
@ 2023-12-20 4:22 ` Baoquan He
2023-12-20 15:46 ` Andrew Morton
0 siblings, 1 reply; 17+ messages in thread
From: Baoquan He @ 2023-12-20 4:22 UTC (permalink / raw)
To: Conor Dooley, akpm
Cc: linux-parisc, x86, kexec, linux-kernel, nathan, joe, linux-riscv,
linuxppc-dev, linux-arm-kernel
On 12/19/23 at 02:44pm, Conor Dooley wrote:
> On Wed, Dec 13, 2023 at 01:57:45PM +0800, Baoquan He wrote:
> > Then when specifying '-d' for kexec_file_load interface, loaded
> > locations of kernel/initrd/cmdline etc can be printed out to help debug.
> >
> > Here replace pr_debug() with the newly added kexec_dprintk() in kexec_file
> > loading related codes.
> >
> > And also replace pr_notice() with kexec_dprintk() in elf_kexec_load()
> > because loaded location of purgatory and device tree are only printed
> > out for debugging, it doesn't make sense to always print them out.
> >
> > And also remove kexec_image_info() because the content has been printed
> > out in generic code.
> >
> > Signed-off-by: Baoquan He <bhe@redhat.com>
>
> I'm sorry - I meant to look at this several days ago but I forgot.
> Apart from the typo that crept back into $subject, this version explains
> the rationale behind what you're changing a lot better, thanks.
Thanks for careful checking. I forgot the typo fixing you have pointed
out in v3 reviewing.
Hi Andrew,
Could you help fix the typo in subject?
[PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
~~~ s/ricv/riscv/
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
2023-12-20 4:22 ` Baoquan He
@ 2023-12-20 15:46 ` Andrew Morton
2023-12-20 23:30 ` Baoquan He
0 siblings, 1 reply; 17+ messages in thread
From: Andrew Morton @ 2023-12-20 15:46 UTC (permalink / raw)
To: Baoquan He
Cc: linux-parisc, x86, kexec, linux-kernel, Conor Dooley, nathan,
joe, linux-riscv, linuxppc-dev, linux-arm-kernel
On Wed, 20 Dec 2023 12:22:29 +0800 Baoquan He <bhe@redhat.com> wrote:
> Could you help fix the typo in subject?
>
> [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
> ~~~ s/ricv/riscv/
I made that change.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
2023-12-20 15:46 ` Andrew Morton
@ 2023-12-20 23:30 ` Baoquan He
0 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-20 23:30 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-parisc, x86, kexec, linux-kernel, Conor Dooley, nathan,
joe, linux-riscv, linuxppc-dev, linux-arm-kernel
On 12/20/23 at 07:46am, Andrew Morton wrote:
> On Wed, 20 Dec 2023 12:22:29 +0800 Baoquan He <bhe@redhat.com> wrote:
>
> > Could you help fix the typo in subject?
> >
> > [PATCH v4 5/7] kexec_file, ricv: print out debugging message if required
> > ~~~ s/ricv/riscv/
>
> I made that change.
Thanks a lot.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4 6/7] kexec_file, power: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
` (4 preceding siblings ...)
2023-12-13 5:57 ` [PATCH v4 5/7] kexec_file, ricv: " Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2023-12-13 5:57 ` [PATCH v4 7/7] kexec_file, parisc: " Baoquan He
2024-01-20 21:09 ` [PATCH v4 0/7] kexec_file: " patchwork-bot+linux-riscv
7 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help
debug.
Here replace pr_debug() with the newly added kexec_dprintk() in
kexec_file loading related codes.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
arch/powerpc/kexec/elf_64.c | 8 ++++----
arch/powerpc/kexec/file_load_64.c | 18 +++++++++---------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/arch/powerpc/kexec/elf_64.c b/arch/powerpc/kexec/elf_64.c
index eeb258002d1e..904016cf89ea 100644
--- a/arch/powerpc/kexec/elf_64.c
+++ b/arch/powerpc/kexec/elf_64.c
@@ -59,7 +59,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
if (ret)
goto out;
- pr_debug("Loaded the kernel at 0x%lx\n", kernel_load_addr);
+ kexec_dprintk("Loaded the kernel at 0x%lx\n", kernel_load_addr);
ret = kexec_load_purgatory(image, &pbuf);
if (ret) {
@@ -67,7 +67,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
goto out;
}
- pr_debug("Loaded purgatory at 0x%lx\n", pbuf.mem);
+ kexec_dprintk("Loaded purgatory at 0x%lx\n", pbuf.mem);
/* Load additional segments needed for panic kernel */
if (image->type == KEXEC_TYPE_CRASH) {
@@ -99,7 +99,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
goto out;
initrd_load_addr = kbuf.mem;
- pr_debug("Loaded initrd at 0x%lx\n", initrd_load_addr);
+ kexec_dprintk("Loaded initrd at 0x%lx\n", initrd_load_addr);
}
fdt = of_kexec_alloc_and_setup_fdt(image, initrd_load_addr,
@@ -132,7 +132,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
fdt_load_addr = kbuf.mem;
- pr_debug("Loaded device tree at 0x%lx\n", fdt_load_addr);
+ kexec_dprintk("Loaded device tree at 0x%lx\n", fdt_load_addr);
slave_code = elf_info.buffer + elf_info.proghdrs[0].p_offset;
ret = setup_purgatory_ppc64(image, slave_code, fdt, kernel_load_addr,
diff --git a/arch/powerpc/kexec/file_load_64.c b/arch/powerpc/kexec/file_load_64.c
index 961a6dd67365..5b4c5cb23354 100644
--- a/arch/powerpc/kexec/file_load_64.c
+++ b/arch/powerpc/kexec/file_load_64.c
@@ -577,7 +577,7 @@ static int add_usable_mem_property(void *fdt, struct device_node *dn,
NODE_PATH_LEN, dn);
return -EOVERFLOW;
}
- pr_debug("Memory node path: %s\n", path);
+ kexec_dprintk("Memory node path: %s\n", path);
/* Now that we know the path, find its offset in kdump kernel's fdt */
node = fdt_path_offset(fdt, path);
@@ -590,8 +590,8 @@ static int add_usable_mem_property(void *fdt, struct device_node *dn,
/* Get the address & size cells */
n_mem_addr_cells = of_n_addr_cells(dn);
n_mem_size_cells = of_n_size_cells(dn);
- pr_debug("address cells: %d, size cells: %d\n", n_mem_addr_cells,
- n_mem_size_cells);
+ kexec_dprintk("address cells: %d, size cells: %d\n", n_mem_addr_cells,
+ n_mem_size_cells);
um_info->idx = 0;
if (!check_realloc_usable_mem(um_info, 2)) {
@@ -664,7 +664,7 @@ static int update_usable_mem_fdt(void *fdt, struct crash_mem *usable_mem)
node = fdt_path_offset(fdt, "/ibm,dynamic-reconfiguration-memory");
if (node == -FDT_ERR_NOTFOUND)
- pr_debug("No dynamic reconfiguration memory found\n");
+ kexec_dprintk("No dynamic reconfiguration memory found\n");
else if (node < 0) {
pr_err("Malformed device tree: error reading /ibm,dynamic-reconfiguration-memory.\n");
return -EINVAL;
@@ -776,8 +776,8 @@ static void update_backup_region_phdr(struct kimage *image, Elf64_Ehdr *ehdr)
for (i = 0; i < ehdr->e_phnum; i++) {
if (phdr->p_paddr == BACKUP_SRC_START) {
phdr->p_offset = image->arch.backup_start;
- pr_debug("Backup region offset updated to 0x%lx\n",
- image->arch.backup_start);
+ kexec_dprintk("Backup region offset updated to 0x%lx\n",
+ image->arch.backup_start);
return;
}
}
@@ -850,7 +850,7 @@ int load_crashdump_segments_ppc64(struct kimage *image,
pr_err("Failed to load backup segment\n");
return ret;
}
- pr_debug("Loaded the backup region at 0x%lx\n", kbuf->mem);
+ kexec_dprintk("Loaded the backup region at 0x%lx\n", kbuf->mem);
/* Load elfcorehdr segment - to export crashing kernel's vmcore */
ret = load_elfcorehdr_segment(image, kbuf);
@@ -858,8 +858,8 @@ int load_crashdump_segments_ppc64(struct kimage *image,
pr_err("Failed to load elfcorehdr segment\n");
return ret;
}
- pr_debug("Loaded elf core header at 0x%lx, bufsz=0x%lx memsz=0x%lx\n",
- image->elf_load_addr, kbuf->bufsz, kbuf->memsz);
+ kexec_dprintk("Loaded elf core header at 0x%lx, bufsz=0x%lx memsz=0x%lx\n",
+ image->elf_load_addr, kbuf->bufsz, kbuf->memsz);
return 0;
}
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 7/7] kexec_file, parisc: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
` (5 preceding siblings ...)
2023-12-13 5:57 ` [PATCH v4 6/7] kexec_file, power: " Baoquan He
@ 2023-12-13 5:57 ` Baoquan He
2024-01-20 21:09 ` [PATCH v4 0/7] kexec_file: " patchwork-bot+linux-riscv
7 siblings, 0 replies; 17+ messages in thread
From: Baoquan He @ 2023-12-13 5:57 UTC (permalink / raw)
To: linux-kernel
Cc: Baoquan He, linux-parisc, x86, kexec, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Then when specifying '-d' for kexec_file_load interface, loaded
locations of kernel/initrd/cmdline etc can be printed out to help
debug.
Here replace pr_debug() with the newly added kexec_dprintk() in
kexec_file loading related codes.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
arch/parisc/kernel/kexec_file.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/parisc/kernel/kexec_file.c b/arch/parisc/kernel/kexec_file.c
index 8c534204f0fd..3fc82130b6c3 100644
--- a/arch/parisc/kernel/kexec_file.c
+++ b/arch/parisc/kernel/kexec_file.c
@@ -38,8 +38,8 @@ static void *elf_load(struct kimage *image, char *kernel_buf,
for (i = 0; i < image->nr_segments; i++)
image->segment[i].mem = __pa(image->segment[i].mem);
- pr_debug("Loaded the kernel at 0x%lx, entry at 0x%lx\n",
- kernel_load_addr, image->start);
+ kexec_dprintk("Loaded the kernel at 0x%lx, entry at 0x%lx\n",
+ kernel_load_addr, image->start);
if (initrd != NULL) {
kbuf.buffer = initrd;
@@ -51,7 +51,7 @@ static void *elf_load(struct kimage *image, char *kernel_buf,
if (ret)
goto out;
- pr_debug("Loaded initrd at 0x%lx\n", kbuf.mem);
+ kexec_dprintk("Loaded initrd at 0x%lx\n", kbuf.mem);
image->arch.initrd_start = kbuf.mem;
image->arch.initrd_end = kbuf.mem + initrd_len;
}
@@ -68,7 +68,7 @@ static void *elf_load(struct kimage *image, char *kernel_buf,
if (ret)
goto out;
- pr_debug("Loaded cmdline at 0x%lx\n", kbuf.mem);
+ kexec_dprintk("Loaded cmdline at 0x%lx\n", kbuf.mem);
image->arch.cmdline = kbuf.mem;
}
out:
--
2.41.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v4 0/7] kexec_file: print out debugging message if required
2023-12-13 5:57 [PATCH v4 0/7] kexec_file: print out debugging message if required Baoquan He
` (6 preceding siblings ...)
2023-12-13 5:57 ` [PATCH v4 7/7] kexec_file, parisc: " Baoquan He
@ 2024-01-20 21:09 ` patchwork-bot+linux-riscv
7 siblings, 0 replies; 17+ messages in thread
From: patchwork-bot+linux-riscv @ 2024-01-20 21:09 UTC (permalink / raw)
To: Baoquan He
Cc: linux-parisc, x86, kexec, linux-kernel, conor, nathan, joe,
linux-riscv, linuxppc-dev, akpm, linux-arm-kernel
Hello:
This series was applied to riscv/linux.git (fixes)
by Andrew Morton <akpm@linux-foundation.org>:
On Wed, 13 Dec 2023 13:57:40 +0800 you wrote:
> Currently, specifying '-d' on kexec command will print a lot of debugging
> informationabout kexec/kdump loading with kexec_load interface.
>
> However, kexec_file_load prints nothing even though '-d' is specified.
> It's very inconvenient to debug or analyze the kexec/kdump loading when
> something wrong happened with kexec/kdump itself or develper want to
> check the kexec/kdump loading.
>
> [...]
Here is the summary with links:
- [v4,1/7] kexec_file: add kexec_file flag to control debug printing
(no matching commit)
- [v4,2/7] kexec_file: print out debugging message if required
(no matching commit)
- [v4,3/7] kexec_file, x86: print out debugging message if required
(no matching commit)
- [v4,4/7] kexec_file, arm64: print out debugging message if required
(no matching commit)
- [v4,5/7] kexec_file, ricv: print out debugging message if required
https://git.kernel.org/riscv/c/eb7622d908a0
- [v4,6/7] kexec_file, power: print out debugging message if required
(no matching commit)
- [v4,7/7] kexec_file, parisc: print out debugging message if required
(no matching commit)
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 17+ messages in thread