Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a669411 authored by Russell King's avatar Russell King
Browse files

[PATCH] ARM: Ensure memory information is page aligned



Ensure that meminfo.bank[] array contains page-aligned start/size
information.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent b46a58fd
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -395,6 +395,20 @@ static void __init early_initrd(char **p)
}
__early_param("initrd=", early_initrd);

static void __init add_memory(unsigned long start, unsigned long size)
{
	/*
	 * Ensure that start/size are aligned to a page boundary.
	 * Size is appropriately rounded down, start is rounded up.
	 */
	size -= start & ~PAGE_MASK;

	meminfo.bank[meminfo.nr_banks].start = PAGE_ALIGN(start);
	meminfo.bank[meminfo.nr_banks].size  = size & PAGE_MASK;
	meminfo.bank[meminfo.nr_banks].node  = PHYS_TO_NID(start);
	meminfo.nr_banks += 1;
}

/*
 * Pick out the memory size.  We look for mem=size@start,
 * where start and size are "size[KkMm]"
@@ -419,10 +433,7 @@ static void __init early_mem(char **p)
	if (**p == '@')
		start = memparse(*p + 1, p);

	meminfo.bank[meminfo.nr_banks].start = start;
	meminfo.bank[meminfo.nr_banks].size  = size;
	meminfo.bank[meminfo.nr_banks].node  = PHYS_TO_NID(start);
	meminfo.nr_banks += 1;
	add_memory(start, size);
}
__early_param("mem=", early_mem);

@@ -564,11 +575,7 @@ static int __init parse_tag_mem32(const struct tag *tag)
			tag->u.mem.start, tag->u.mem.size / 1024);
		return -EINVAL;
	}
	meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start;
	meminfo.bank[meminfo.nr_banks].size  = tag->u.mem.size;
	meminfo.bank[meminfo.nr_banks].node  = PHYS_TO_NID(tag->u.mem.start);
	meminfo.nr_banks += 1;

	add_memory(tag->u.mem.start, tag->u.mem.size);
	return 0;
}