Messages in this thread Patch in this message | | | From | Yinghai Lu <> | Subject | [PATCH] x86, kdump: Set crashkernel_low automatically | Date | Sun, 10 Mar 2013 21:56:57 -0700 |
| |
Current code does not set low range for crashkernel if the user does not specify that.
That cause regressions on system that does not support intel_iommu properly.
Chao said that his system does work well on 3.8 without extra parameter. even iommu does not work with kdump.
Set crashkernel_low automatically if the user does not specify that.
For system that does support IOMMU with kdump properly, user could specify crashkernel_low=0 to save that 72M low ram.
Reported-by: WANG Chao <chaowang@redhat.com> Tested-by: WANG Chao <chaowang@redhat.com> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
--- arch/x86/kernel/setup.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
Index: linux-2.6/arch/x86/kernel/setup.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/setup.c +++ linux-2.6/arch/x86/kernel/setup.c @@ -547,19 +547,28 @@ static void __init reserve_crashkernel_l unsigned long long low_base = 0, low_size = 0; unsigned long total_low_mem; unsigned long long base; + bool auto_set = false; int ret; total_low_mem = memblock_mem_size(1UL<<(32-PAGE_SHIFT)); ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size, &base); - if (ret != 0 || low_size <= 0) - return; + if (ret != 0) { + /* default swiotlb size and overflow: 64M + 8M */ + low_size = 72UL<<20; + auto_set = true; + } else { + /* passed with crashkernel_low=0 ? */ + if (!low_size) + return; + } low_base = memblock_find_in_range(low_size, (1ULL<<32), low_size, alignment); if (!low_base) { - pr_info("crashkernel low reservation failed - No suitable area found.\n"); + if (!auto_set) + pr_info("crashkernel low reservation failed - No suitable area found.\n"); return; }
| |