Commit 420f48f6 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Heiko Carstens
Browse files

s390/setup: avoid reserving memory above identity mapping



Such reserved memory region, if not cleaned up later causes problems when
memblock_free_all() is called to release free pages to the buddy allocator
and those reserved regions are carried over to reserve_bootmem_region()
which marks the pages as PageReserved.

Instead use memblock_set_current_limit() to make sure memblock allocations
do not go over identity mapping (which could happen when "mem=" option
is used or during kdump).

Cc: stable@vger.kernel.org
Fixes: 73045a08 ("s390: unify identity mapping limits handling")
Reported-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent fa55b7dc
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -637,14 +637,6 @@ static struct notifier_block kdump_mem_nb = {

#endif

/*
 * Make sure that the area above identity mapping is protected
 */
static void __init reserve_above_ident_map(void)
{
	memblock_reserve(ident_map_size, ULONG_MAX);
}

/*
 * Reserve memory for kdump kernel to be loaded with kexec
 */
@@ -999,11 +991,11 @@ void __init setup_arch(char **cmdline_p)
	setup_control_program_code();

	/* Do some memory reservations *before* memory is added to memblock */
	reserve_above_ident_map();
	reserve_kernel();
	reserve_initrd();
	reserve_certificate_list();
	reserve_mem_detect_info();
	memblock_set_current_limit(ident_map_size);
	memblock_allow_resize();

	/* Get information about *all* installed memory */