Skip to content

Commit 8f0f104

Browse files
Zhen Leictmarinas
authored andcommitted
arm64: kdump: Do not allocate crash low memory if not needed
When "crashkernel=X,high" is specified, the specified "crashkernel=Y,low" memory is not required in the following corner cases: 1. If both CONFIG_ZONE_DMA and CONFIG_ZONE_DMA32 are disabled, it means that the devices can access any memory. 2. If the system memory is small, the crash high memory may be allocated from the DMA zones. If that happens, there's no need to allocate another crash low memory because there's already one. Add condition '(crash_base >= CRASH_ADDR_LOW_MAX)' to determine whether the 'high' memory is allocated above DMA zones. Note: when both CONFIG_ZONE_DMA and CONFIG_ZONE_DMA32 are disabled, the entire physical memory is DMA accessible, CRASH_ADDR_LOW_MAX equals 'PHYS_MASK + 1'. Signed-off-by: Zhen Lei <[email protected]> Acked-by: Baoquan He <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent 5832f1a commit 8f0f104

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,7 @@
823823
low memory is needed to make sure DMA buffers for 32-bit
824824
devices won't run out. Kernel would try to allocate
825825
at least 256M below 4G automatically.
826-
This one let user to specify own low range under 4G
826+
This one lets the user specify own low range under 4G
827827
for second kernel instead.
828828
0: to disable low allocation.
829829
It will be ignored when crashkernel=X,high is not used
@@ -832,7 +832,8 @@
832832
[KNL, ARM64] range in low memory.
833833
This one lets the user specify a low range in the
834834
DMA zone for the crash dump kernel.
835-
It will be ignored when crashkernel=X,high is not used.
835+
It will be ignored when crashkernel=X,high is not used
836+
or memory reserved is located in the DMA zones.
836837

837838
cryptomgr.notests
838839
[KNL] Disable crypto self-tests

arch/arm64/mm/init.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ static void __init reserve_crashkernel(void)
170170
return;
171171
}
172172

173-
if (crash_low_size && reserve_crashkernel_low(crash_low_size)) {
173+
if ((crash_base >= CRASH_ADDR_LOW_MAX) &&
174+
crash_low_size && reserve_crashkernel_low(crash_low_size)) {
174175
memblock_phys_free(crash_base, crash_size);
175176
return;
176177
}

0 commit comments

Comments
 (0)