Skip to content

Commit 6120cdc

Browse files
rppttorvalds
authored andcommitted
x86/setup: simplify reserve_crashkernel()
* Replace magic numbers with defines * Replace memblock_find_in_range() + memblock_reserve() with memblock_phys_alloc_range() * Stop checking for low memory size in reserve_crashkernel_low(). The allocation from limited range will anyway fail if there is no enough memory, so there is no need for extra traversal of memblock.memory Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Baoquan He <bhe@redhat.com> Acked-by: Ingo Molnar <mingo@kernel.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Daniel Axtens <dja@axtens.net> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Emil Renner Berthing <kernel@esmil.dk> Cc: Hari Bathini <hbathini@linux.ibm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Simek <monstr@monstr.eu> Cc: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Stafford Horne <shorne@gmail.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will@kernel.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Link: https://lkml.kernel.org/r/20200818151634.14343-15-rppt@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 3c45ee6 commit 6120cdc

1 file changed

Lines changed: 14 additions & 26 deletions

File tree

arch/x86/kernel/setup.c

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -421,13 +421,13 @@ static int __init reserve_crashkernel_low(void)
421421
{
422422
#ifdef CONFIG_X86_64
423423
unsigned long long base, low_base = 0, low_size = 0;
424-
unsigned long total_low_mem;
424+
unsigned long low_mem_limit;
425425
int ret;
426426

427-
total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT));
427+
low_mem_limit = min(memblock_phys_mem_size(), CRASH_ADDR_LOW_MAX);
428428

429429
/* crashkernel=Y,low */
430-
ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size, &base);
430+
ret = parse_crashkernel_low(boot_command_line, low_mem_limit, &low_size, &base);
431431
if (ret) {
432432
/*
433433
* two parts from kernel/dma/swiotlb.c:
@@ -445,23 +445,17 @@ static int __init reserve_crashkernel_low(void)
445445
return 0;
446446
}
447447

448-
low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN);
448+
low_base = memblock_phys_alloc_range(low_size, CRASH_ALIGN, 0, CRASH_ADDR_LOW_MAX);
449449
if (!low_base) {
450450
pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n",
451451
(unsigned long)(low_size >> 20));
452452
return -ENOMEM;
453453
}
454454

455-
ret = memblock_reserve(low_base, low_size);
456-
if (ret) {
457-
pr_err("%s: Error reserving crashkernel low memblock.\n", __func__);
458-
return ret;
459-
}
460-
461-
pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n",
455+
pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (low RAM limit: %ldMB)\n",
462456
(unsigned long)(low_size >> 20),
463457
(unsigned long)(low_base >> 20),
464-
(unsigned long)(total_low_mem >> 20));
458+
(unsigned long)(low_mem_limit >> 20));
465459

466460
crashk_low_res.start = low_base;
467461
crashk_low_res.end = low_base + low_size - 1;
@@ -505,33 +499,27 @@ static void __init reserve_crashkernel(void)
505499
* unless "crashkernel=size[KMG],high" is specified.
506500
*/
507501
if (!high)
508-
crash_base = memblock_find_in_range(CRASH_ALIGN,
509-
CRASH_ADDR_LOW_MAX,
510-
crash_size, CRASH_ALIGN);
502+
crash_base = memblock_phys_alloc_range(crash_size,
503+
CRASH_ALIGN, CRASH_ALIGN,
504+
CRASH_ADDR_LOW_MAX);
511505
if (!crash_base)
512-
crash_base = memblock_find_in_range(CRASH_ALIGN,
513-
CRASH_ADDR_HIGH_MAX,
514-
crash_size, CRASH_ALIGN);
506+
crash_base = memblock_phys_alloc_range(crash_size,
507+
CRASH_ALIGN, CRASH_ALIGN,
508+
CRASH_ADDR_HIGH_MAX);
515509
if (!crash_base) {
516510
pr_info("crashkernel reservation failed - No suitable area found.\n");
517511
return;
518512
}
519513
} else {
520514
unsigned long long start;
521515

522-
start = memblock_find_in_range(crash_base,
523-
crash_base + crash_size,
524-
crash_size, 1 << 20);
516+
start = memblock_phys_alloc_range(crash_size, SZ_1M, crash_base,
517+
crash_base + crash_size);
525518
if (start != crash_base) {
526519
pr_info("crashkernel reservation failed - memory is in use.\n");
527520
return;
528521
}
529522
}
530-
ret = memblock_reserve(crash_base, crash_size);
531-
if (ret) {
532-
pr_err("%s: Error reserving crashkernel memblock.\n", __func__);
533-
return;
534-
}
535523

536524
if (crash_base >= (1ULL << 32) && reserve_crashkernel_low()) {
537525
memblock_free(crash_base, crash_size);

0 commit comments

Comments
 (0)