Commit 36418c51 authored by Jonathan Austin's avatar Jonathan Austin Committed by Russell King
Browse files

ARM: 7499/1: mm: Fix vmalloc overlap check for !HIGHMEM



With !HIGHMEM, sanity_check_meminfo checks for banks that completely or
partially overlap the vmalloc region. The test for partial overlap checks
__va(bank->start + bank->size) > vmalloc_min. This is not appropriate if
there is a non-linear translation between virtual and physical addresses,
as bank->start + bank->size is actually in the bank following the one being
interrogated.

In most cases, even when using SPARSEMEM, this is not problematic as the
subsequent bank will start at a higher va than the one in question. However
if the physical to virtual address conversion is not monotonic increasing,
the incorrect test could result in a bank not being truncated when it
should be.

This patch ensures we perform the va-pa conversion on memory from the
bank we are interested in, not the following one.

Reported-by: default avatar??? (Steve) <zhanzhenbo@gmail.com>
Signed-off-by: default avatarJonathan Austin <jonathan.austin@arm.com>
Acked-by: default avatarNicolas Pitre <nico@linaro.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent df547e08
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -961,8 +961,8 @@ void __init sanity_check_meminfo(void)
		 * Check whether this memory bank would partially overlap
		 * the vmalloc area.
		 */
		if (__va(bank->start + bank->size) > vmalloc_min ||
		    __va(bank->start + bank->size) < __va(bank->start)) {
		if (__va(bank->start + bank->size - 1) >= vmalloc_min ||
		    __va(bank->start + bank->size - 1) <= __va(bank->start)) {
			unsigned long newsize = vmalloc_min - __va(bank->start);
			printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx "
			       "to -%.8llx (vmalloc region overlap).\n",