kdump fails on arm64, on machines with a lot of memory when offeset is not specified,
e.g when /etc/default/grub.d/kdump-tools.cfg looks like:
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT crashkernel=4G"
If kdump-tools.cfg specifies the offset e.g.:
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT crashkernel=4G@4G"
it works ok.
The reason for this is that the kernel needs to allocate memory for the crashkernel both
in low and high memory.
This is addressed in kernel 6.2.
In addition kexec-tools needs to support more than one crash kernel regions.
To address this issue the following upstrem commits are needed:
From the kernel side :
commit a9ae89df737756d92f0e14873339cf393f7f7eb0
Author: Zhen Lei <email address hidden>
Date: Wed Nov 16 20:10:44 2022 +0800
arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones
commit a149cf00b158e1793a8dd89ca492379c366300d2
Author: Zhen Lei <email address hidden>
Date: Wed Nov 16 20:10:43 2022 +0800
arm64: kdump: Provide default size when crashkernel=Y,low is not specified
From kexec-tools
commit b5a34a20984c4ad27cc5054d9957af8130b42a50
Author: Chen Zhou <email address hidden>
Date: Mon Jan 10 18:20:08 2022 +0800
arm64: support more than one crash kernel regions
Affected releases:
Jammy, Focal, Bionic
For Bionic we won't fix it as we need to backport a lot of code and the regression potential is too high.
The same applies for the Focal 5.4 kernel.
Only the 5.15 hwe focal kernel will be fixed.
[Test]
You need a machine (can be a VM too) with large memory e.g. 128G.
Install linux-crashdump and trigger a crash.
It won't work unless the offset is specified because the memory crashkernel cannot be allocated.
With the patches applied it works as expected without having to specify the offset.
[Regression Potential]
[Other]
Commits to backport
JAMMY:
kernel:
a9ae89df737756d92f0e14873339cf393f7f7eb0 arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones
a149cf00b158e1793a8dd89ca492379c366300d2 arm64: kdump: Provide default size when crashkernel=Y,low is not specified
kexec:
b5a34a20984c4ad27cc5054d9957af8130b42a50 arm64: support more than one crash kernel regions
FOCAL:
kernel (5.15 hwe kernel):
a9ae89df737756d92f0e14873339cf393f7f7eb0 arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones
a149cf00b158e1793a8dd89ca492379c366300d2 arm64: kdump: Provide default size when crashkernel=Y,low is not specified
4890cc18f94979b406f95708f8cb238eb2d0e5a9 arm64/mm: Define defer_reserve_crashkernel()
8f0f104e2ab6eed4cad3b111dc206f843bda43ea arm64: kdump: Do not allocate crash low memory if not needed
5832f1ae50600ac6b2b6d00cfef42d33a9473f06 docs: kdump: Update the crashkernel description for arm64
944a45abfabc171fd121315ff0d5e62b11cb5d6f arm64: kdump: Reimplement crashkernel=X
d339f1584f0acf32b32326627fa3b48e6e65c599 arm64: mm: use IS_ENABLED(CONFIG_KEXEC_CORE) instead of #ifdef
kexec:
b5a34a20984c4ad27cc5054d9957af8130b42a50 arm64: support more than one crash kernel regions
2572b8d702e452624bdb8d7b7c39f458e7dcf2ce arm64: kdump: deal with a lot of resource entries in /proc/iomem
cf977b1af9ec67fabcc6a625589c49c52d07b11d kexec: add variant helper functions for handling memory regions
f736104f533290b4ce6fbfbca74abde9ffd3888c arm64: kexec: allocate memory space avoiding reserved regions
64c49f27d88024eaab990d2cd6069289cf853098 arm64: Add support to read PHYS_OFFSET from 'kcore' - pt_note or pt_load (if available)
f4ce0706d9574aecb7d4aa9af7208a1bc9b6afb4 util_lib: Add functionality to read elf notes
[Description]
kdump fails on arm64, on machines with a lot of memory when offeset is not specified, grub.d/ kdump-tools. cfg looks like: LINUX_DEFAULT= "$GRUB_ CMDLINE_ LINUX_DEFAULT crashkernel=4G"
e.g when /etc/default/
GRUB_CMDLINE_
If kdump-tools.cfg specifies the offset e.g.: LINUX_DEFAULT= "$GRUB_ CMDLINE_ LINUX_DEFAULT crashkernel=4G@4G"
GRUB_CMDLINE_
it works ok.
The reason for this is that the kernel needs to allocate memory for the crashkernel both
in low and high memory.
This is addressed in kernel 6.2.
In addition kexec-tools needs to support more than one crash kernel regions.
To address this issue the following upstrem commits are needed:
From the kernel side : 92f0e14873339cf 393f7f7eb0
commit a9ae89df737756d
Author: Zhen Lei <email address hidden>
Date: Wed Nov 16 20:10:44 2022 +0800
arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones
commit a149cf00b158e17 93a8dd89ca49237 9c366300d2
Author: Zhen Lei <email address hidden>
Date: Wed Nov 16 20:10:43 2022 +0800
arm64: kdump: Provide default size when crashkernel=Y,low is not specified
From kexec-tools 27cc5054d9957af 8130b42a50
commit b5a34a20984c4ad
Author: Chen Zhou <email address hidden>
Date: Mon Jan 10 18:20:08 2022 +0800
arm64: support more than one crash kernel regions
Affected releases:
Jammy, Focal, Bionic
For Bionic we won't fix it as we need to backport a lot of code and the regression potential is too high.
The same applies for the Focal 5.4 kernel.
Only the 5.15 hwe focal kernel will be fixed.
[Test]
You need a machine (can be a VM too) with large memory e.g. 128G.
Install linux-crashdump and trigger a crash.
It won't work unless the offset is specified because the memory crashkernel cannot be allocated.
With the patches applied it works as expected without having to specify the offset.
[Regression Potential]
[Other]
Commits to backport
JAMMY:
kernel: 92f0e14873339cf 393f7f7eb0 arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones 93a8dd89ca49237 9c366300d2 arm64: kdump: Provide default size when crashkernel=Y,low is not specified
a9ae89df737756d
a149cf00b158e17
kexec: 27cc5054d9957af 8130b42a50 arm64: support more than one crash kernel regions
b5a34a20984c4ad
FOCAL:
kernel (5.15 hwe kernel): 92f0e14873339cf 393f7f7eb0 arm64: kdump: Support crashkernel=X fall back to reserve region above DMA zones 93a8dd89ca49237 9c366300d2 arm64: kdump: Provide default size when crashkernel=Y,low is not specified 406f95708f8cb23 8eb2d0e5a9 arm64/mm: Define defer_reserve_ crashkernel( ) 4cad3b111dc206f 843bda43ea arm64: kdump: Do not allocate crash low memory if not needed 6b2b6d00cfef42d 33a9473f06 docs: kdump: Update the crashkernel description for arm64 fd121315ff0d5e6 2b11cb5d6f arm64: kdump: Reimplement crashkernel=X 2b32326627fa3b4 8e6e65c599 arm64: mm: use IS_ENABLED( CONFIG_ KEXEC_CORE) instead of #ifdef
a9ae89df737756d
a149cf00b158e17
4890cc18f94979b
8f0f104e2ab6eed
5832f1ae50600ac
944a45abfabc171
d339f1584f0acf3
kexec: 27cc5054d9957af 8130b42a50 arm64: support more than one crash kernel regions 24bdb8d7b7c39f4 58e7dcf2ce arm64: kdump: deal with a lot of resource entries in /proc/iomem abcc6a625589c49 c52d07b11d kexec: add variant helper functions for handling memory regions 4ce6fbfbca74abd e9ffd3888c arm64: kexec: allocate memory space avoiding reserved regions aab990d2cd60692 89cf853098 arm64: Add support to read PHYS_OFFSET from 'kcore' - pt_note or pt_load (if available) cb7d4aa9af7208a 1bc9b6afb4 util_lib: Add functionality to read elf notes
b5a34a20984c4ad
2572b8d702e4526
cf977b1af9ec67f
f736104f533290b
64c49f27d88024e
f4ce0706d9574ae