Skip to content

Commit a149cf0

Browse files
Zhen Leiwilldeacon
authored andcommitted
arm64: kdump: Provide default size when crashkernel=Y,low is not specified
Try to allocate at least 128 MiB low memory automatically for the case that crashkernel=,high is explicitly specified, while crashkenrel=,low is omitted. This allows users to focus more on the high memory requirements of their business rather than the low memory requirements of the crash kernel booting. Signed-off-by: Zhen Lei <[email protected]> Acked-by: Baoquan He <[email protected]> Reviewed-by: Catalin Marinas <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Will Deacon <[email protected]>
1 parent f0c4d9f commit a149cf0

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -851,26 +851,23 @@
851851
available.
852852
It will be ignored if crashkernel=X is specified.
853853
crashkernel=size[KMG],low
854-
[KNL, X86-64] range under 4G. When crashkernel=X,high
854+
[KNL, X86-64, ARM64] range under 4G. When crashkernel=X,high
855855
is passed, kernel could allocate physical memory region
856856
above 4G, that cause second kernel crash on system
857857
that require some amount of low memory, e.g. swiotlb
858858
requires at least 64M+32K low memory, also enough extra
859859
low memory is needed to make sure DMA buffers for 32-bit
860860
devices won't run out. Kernel would try to allocate
861-
at least 256M below 4G automatically.
861+
default size of memory below 4G automatically. The default
862+
size is platform dependent.
863+
--> x86: max(swiotlb_size_or_default() + 8MiB, 256MiB)
864+
--> arm64: 128MiB
862865
This one lets the user specify own low range under 4G
863866
for second kernel instead.
864867
0: to disable low allocation.
865868
It will be ignored when crashkernel=X,high is not used
866869
or memory reserved is below 4G.
867870

868-
[KNL, ARM64] range in low memory.
869-
This one lets the user specify a low range in the
870-
DMA zone for the crash dump kernel.
871-
It will be ignored when crashkernel=X,high is not used
872-
or memory reserved is located in the DMA zones.
873-
874871
cryptomgr.notests
875872
[KNL] Disable crypto self-tests
876873

arch/arm64/mm/init.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ phys_addr_t __ro_after_init arm64_dma_phys_limit = PHYS_MASK + 1;
9696
#define CRASH_ADDR_LOW_MAX arm64_dma_phys_limit
9797
#define CRASH_ADDR_HIGH_MAX (PHYS_MASK + 1)
9898

99+
#define DEFAULT_CRASH_KERNEL_LOW_SIZE (128UL << 20)
100+
99101
static int __init reserve_crashkernel_low(unsigned long long low_size)
100102
{
101103
unsigned long long low_base;
@@ -147,7 +149,9 @@ static void __init reserve_crashkernel(void)
147149
* is not allowed.
148150
*/
149151
ret = parse_crashkernel_low(cmdline, 0, &crash_low_size, &crash_base);
150-
if (ret && (ret != -ENOENT))
152+
if (ret == -ENOENT)
153+
crash_low_size = DEFAULT_CRASH_KERNEL_LOW_SIZE;
154+
else if (ret)
151155
return;
152156

153157
crash_max = CRASH_ADDR_HIGH_MAX;
@@ -170,7 +174,7 @@ static void __init reserve_crashkernel(void)
170174
return;
171175
}
172176

173-
if ((crash_base >= CRASH_ADDR_LOW_MAX) &&
177+
if ((crash_base > CRASH_ADDR_LOW_MAX - crash_low_size) &&
174178
crash_low_size && reserve_crashkernel_low(crash_low_size)) {
175179
memblock_phys_free(crash_base, crash_size);
176180
return;

0 commit comments

Comments
 (0)