Hi Chen, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [cannot apply to v5.3-rc6 next-20190830] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chen-Zhou/support-reserving-crashkernel-above-4G-on-arm64-kdump/20190901-053351 config: x86_64-randconfig-s0-09010004 (attached as .config) compiler: gcc-7 (Debian 7.4.0-11) 7.4.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All errors (new ones prefixed by >>): ld: kernel/crash_core.o: in function `reserve_crashkernel_low': >> kernel/crash_core.c:354: undefined reference to `crashk_low_res' >> ld: kernel/crash_core.c:355: undefined reference to `crashk_low_res' vim +354 kernel/crash_core.c 296 297 int __init reserve_crashkernel_low(void) 298 { 299 #if defined(CONFIG_X86_64) || defined(CONFIG_ARM64) 300 unsigned long long base, low_base = 0, low_size = 0; 301 unsigned long total_low_mem; 302 int ret; 303 304 total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT)); 305 306 /* crashkernel=Y,low */ 307 ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size, 308 &base); 309 if (ret) { 310 #ifdef CONFIG_X86_64 311 /* 312 * two parts from lib/swiotlb.c: 313 * -swiotlb size: user-specified with swiotlb= or default. 314 * 315 * -swiotlb overflow buffer: now hardcoded to 32k. We round it 316 * to 8M for other buffers that may need to stay low too. Also 317 * make sure we allocate enough extra low memory so that we 318 * don't run out of DMA buffers for 32-bit devices. 319 */ 320 low_size = max(swiotlb_size_or_default() + (8UL << 20), 321 256UL << 20); 322 #else 323 /* 324 * in arm64, reserve low memory if and only if crashkernel=X,low 325 * specified. 326 */ 327 return -EINVAL; 328 #endif 329 } else { 330 /* passed with crashkernel=0,low ? */ 331 if (!low_size) 332 return 0; 333 } 334 335 low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN); 336 if (!low_base) { 337 pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n", 338 (unsigned long)(low_size >> 20)); 339 return -ENOMEM; 340 } 341 342 ret = memblock_reserve(low_base, low_size); 343 if (ret) { 344 pr_err("%s: Error reserving crashkernel low memblock.\n", 345 __func__); 346 return ret; 347 } 348 349 pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n", 350 (unsigned long)(low_size >> 20), 351 (unsigned long)(low_base >> 20), 352 (unsigned long)(total_low_mem >> 20)); 353 > 354 crashk_low_res.start = low_base; > 355 crashk_low_res.end = low_base + low_size - 1; 356 #endif 357 return 0; 358 } 359 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation