Commit 8f0f104e authored by Zhen Lei's avatar Zhen Lei Committed by Catalin Marinas
Browse files

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: default avatarZhen Lei <thunder.leizhen@huawei.com>
Acked-by: default avatarBaoquan He <bhe@redhat.com>
Link: https://lore.kernel.org/r/20220511032033.426-1-thunder.leizhen@huawei.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 5832f1ae
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -823,7 +823,7 @@
			low memory is needed to make sure DMA buffers for 32-bit
			devices won't run out. Kernel would try to allocate
			at least 256M below 4G automatically.
			This one let user to specify own low range under 4G
			This one lets the user specify own low range under 4G
			for second kernel instead.
			0: to disable low allocation.
			It will be ignored when crashkernel=X,high is not used
@@ -832,7 +832,8 @@
			[KNL, ARM64] range in low memory.
			This one lets the user specify a low range in the
			DMA zone for the crash dump kernel.
			It will be ignored when crashkernel=X,high is not used.
			It will be ignored when crashkernel=X,high is not used
			or memory reserved is located in the DMA zones.

	cryptomgr.notests
			[KNL] Disable crypto self-tests
+2 −1
Original line number Diff line number Diff line
@@ -170,7 +170,8 @@ static void __init reserve_crashkernel(void)
		return;
	}

	if (crash_low_size && reserve_crashkernel_low(crash_low_size)) {
	if ((crash_base >= CRASH_ADDR_LOW_MAX) &&
	     crash_low_size && reserve_crashkernel_low(crash_low_size)) {
		memblock_phys_free(crash_base, crash_size);
		return;
	}