Fwd: Re: [PATCH] ARM: Add arm description to Documentation/kdump/kdump.txt

Hu Keping hukeping at huawei.com
Tue Aug 5 19:06:01 PDT 2014


sorry forget to cc.

-------- Original message --------
Theme: Re: [PATCH] ARM: Add arm description to Documentation/kdump/kdump.txt
On: Tue, 05 Aug 2014 09:55:30 +0800
From: Hu Keping <hukeping at huawei.com>
To: vgoyal at redhat.com
Cc: sdu.liu at huawei.com, peifeiyue at huawei.com

on 2014/7/31 20:39, Vivek Goyal wrote:
> On Thu, Jul 31, 2014 at 02:03:31PM +0800, HuKeping wrote:
>> Add arm specific parts to kdump kernel documentation.
>>
>
> Hi Hu,
>
> So kexec on arm (32bit) now works? All the kernel pieces and kexec-tools
> pieces are upstream? (Sorry, I have not been able to keeptrack of arm
> development).
>
>

Yes,I run the routine on vexpress(v2p-ca9) with Cortex-A9 MPCore and it
works fine

>> ----------------------------------------
>> Signed-off-by: Hu Keping <hukeping at huawei.com>
>> ---
>>   Documentation/kdump/kdump.txt | 25 ++++++++++++++++++++++---
>>   1 file changed, 22 insertions(+), 3 deletions(-)
>>
>> diff --git a/Documentation/kdump/kdump.txt b/Documentation/kdump/kdump.txt
>> index 88d5a86..5fc98d6 100644
>> --- a/Documentation/kdump/kdump.txt
>> +++ b/Documentation/kdump/kdump.txt
>> @@ -18,7 +18,7 @@ memory image to a dump file on the local disk, or across the network to
>>   a remote system.
>>
>>   Kdump and kexec are currently supported on the x86, x86_64, ppc64, ia64,
>> -and s390x architectures.
>> +s390x and arm architectures.
>>
>>   When the system kernel boots, it reserves a small section of memory for
>>   the dump-capture kernel. This ensures that ongoing Direct Memory Access
>> @@ -112,7 +112,7 @@ There are two possible methods of using Kdump.
>>   2) Or use the system kernel binary itself as dump-capture kernel and there is
>>      no need to build a separate dump-capture kernel. This is possible
>>      only with the architectures which support a relocatable kernel. As
>> -   of today, i386, x86_64, ppc64 and ia64 architectures support relocatable
>> +   of today, i386, x86_64, ppc64, ia64 and arm architectures support relocatable
>>      kernel.
>
> So zImage is relocatable on arm?
>

Yes, only if the CONFIG_AUTO_ZRELADDR selected.

>>
>>   Building a relocatable kernel is advantageous from the point of view that
>> @@ -296,6 +296,12 @@ Boot into System Kernel
>>      on the memory consumption of the kdump system. In general this is not
>>      dependent on the memory size of the production system.
>>
>> +   On arm, use "crashkernel=Y at X".
>
> Do you support other forms of crashkernel= parameter? Like crashkernel=X.
> A longer list of parameters is available in kernel-parameters.txt.
>

Assume [0x60000000-0x7fffffff] : System RAM

The forms of, for example crashkernel=128M at 1792M and
crashkernel=128M at 0x70000000 are both OK.

But there will be a panic if use crashkernel=Y or crashkernal=YM at Z where
Z is NOT in the System RAM range.

The extended crashkernel syntax is okay, but again, "@offset" is
required. Like:
crashkernel=<range1>:<size1>[,<range2>:<size2>,...]@offset
range=start-[end]

different with the old

crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset]
range=start-[end]


>> Note that the start address of the kernel
>> +   will be aligned to 128MiB (0x08000000),
>
> x86 kernel is 2MB aligned. 128MB aligned seems to be huge. Where does
> that restriction come from.
>

ZRELADDR is the physical address where the decompressed kernel
image(from zImage) will be placed, If AUTO_ZRELADDR is selected, the
address will be determined at run-time by masking the current IP with
0xf8000000.

One can refers to LINUX/arch/arm/boot/compressed/head.S

  168 #ifdef CONFIG_AUTO_ZRELADDR
  169         @ determine final kernel image address
  170         mov r4, pc
  171         and r4, r4, #0xf8000000
  172         add r4, r4, #TEXT_OFFSET
  173 #else
  174         ldr r4, =zreladdr
  175 #endif


>> so if the start address is not then
>> +   any space blow the alignment point may be overwrited by the dump-caputre kernel,
>> +   which means it is possible that the vmcore is not that precise as expected.
>
> What does above statement mean? I think it requires some work. And also
> some examples of what's a reasonable crashkernel=X at Y values for arm.
>
>

As the statement above, one can also set the parameter like
crashkernel=128M at 0x69000000, but it will be reset to 128M at 0x68000000.
Then what will happen to 0x68000000-0x68ffffff is UNPREDICTABLE.

Same with using the extended crashkernel syntax.

>> +
>> +
>>   Load the Dump-capture Kernel
>>   ============================
>>
>> @@ -315,7 +321,8 @@ For ia64:
>>   	- Use vmlinux or vmlinuz.gz
>>   For s390x:
>>   	- Use image or bzImage
>> -
>> +For arm:
>> +	- Use zImage
>>
>>   If you are using a uncompressed vmlinux image then use following command
>>   to load dump-capture kernel.
>> @@ -331,6 +338,15 @@ to load dump-capture kernel.
>>      --initrd=<initrd-for-dump-capture-kernel> \
>>      --append="root=<root-dev> <arch-specific-options>"
>>
>> +If you are using a compressed zImage, then use following command
>> +to load dump-capture kernel.
>> +
>> +   kexec --type zImage -p <dump-capture-kernel-bzImage> \
>> +   --initrd=<initrd-for-dump-capture-kernel> \
>> +   --dtb=<dtb-for-dump-capture-kernel> \
>> +   --append="root=<root-dev> <arch-specific-options>"
>> +
>> +
>>   Please note, that --args-linux does not need to be specified for ia64.
>>   It is planned to make this a no-op on that architecture, but for now
>>   it should be omitted
>> @@ -347,6 +363,9 @@ For ppc64:
>>   For s390x:
>>   	"1 maxcpus=1 cgroup_disable=memory"
>>
>> +For arm:
>> +	"1 maxcpus=1 reset_devices"
>> +
>
> nr_cpus=1 does not work on arm? We prefer that over maxcpus=1.
>

It does works, but I think there is a little bug with using nr_cpus.
There will be a warning when dump-caputre kernel booting if use nr_cpus:

"[	0.000000] DT/cpu 2nodes greater than max cores 1, capping them"

This is from arch/arm/kernel/devtree.c, in function
void __init arm_dt_init_cpu_maps(void)

145    	if (WARN(cpuidx > nr_cpu_ids, "DT /cpu %u nodes greater than "
146					"max cores %u, capping them\n",
147					cpuidx, nr_cpu_ids)) {
148		cpuidx = nr_cpu_ids;
149             break;
150	}

Since we have already using nr_cpus to specify the number of cpus we
want to be online, kdump should not to make the comparison with dtb
(which is strongly recommended on arm-32bit ) again, but it does, so the
warning out.
Meanwhile the maxcpus works fine.

> Thanks
> Vivek
>
> .
>

Sincerely yours,
Hu Keping








More information about the kexec mailing list