Commit d121f125 authored by Alexander Sverdlin's avatar Alexander Sverdlin Committed by Thomas Bogendoerfer
Browse files

MIPS: Don't round up kernel sections size for memblock_add()



Linux doesn't own the memory immediately after the kernel image. On Octeon
bootloader places a shared structure right close after the kernel _end,
refer to "struct cvmx_bootinfo *octeon_bootinfo" in cavium-octeon/setup.c.

If check_kernel_sections_mem() rounds the PFNs up, first memblock_alloc()
inside early_init_dt_alloc_memory_arch() <= device_tree_init() returns
memory block overlapping with the above octeon_bootinfo structure, which
is being overwritten afterwards.

Fixes: a94e4f24 ("MIPS: init: Drop boot_mem_map")
Signed-off-by: default avatarAlexander Sverdlin <alexander.sverdlin@nokia.com>
Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
parent 8b3165e5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -498,8 +498,8 @@ static void __init request_crashkernel(struct resource *res)

static void __init check_kernel_sections_mem(void)
{
	phys_addr_t start = PFN_PHYS(PFN_DOWN(__pa_symbol(&_text)));
	phys_addr_t size = PFN_PHYS(PFN_UP(__pa_symbol(&_end))) - start;
	phys_addr_t start = __pa_symbol(&_text);
	phys_addr_t size = __pa_symbol(&_end) - start;

	if (!memblock_is_region_memory(start, size)) {
		pr_info("Kernel sections are not in the memory maps\n");