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

[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
...@@ -395,6 +395,20 @@ static void __init early_initrd(char **p) ...@@ -395,6 +395,20 @@ static void __init early_initrd(char **p)
} }
__early_param("initrd=", early_initrd); __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, * Pick out the memory size. We look for mem=size@start,
* where start and size are "size[KkMm]" * where start and size are "size[KkMm]"
...@@ -419,10 +433,7 @@ static void __init early_mem(char **p) ...@@ -419,10 +433,7 @@ static void __init early_mem(char **p)
if (**p == '@') if (**p == '@')
start = memparse(*p + 1, p); start = memparse(*p + 1, p);
meminfo.bank[meminfo.nr_banks].start = start; add_memory(start, size);
meminfo.bank[meminfo.nr_banks].size = size;
meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start);
meminfo.nr_banks += 1;
} }
__early_param("mem=", early_mem); __early_param("mem=", early_mem);
...@@ -564,11 +575,7 @@ static int __init parse_tag_mem32(const struct tag *tag) ...@@ -564,11 +575,7 @@ static int __init parse_tag_mem32(const struct tag *tag)
tag->u.mem.start, tag->u.mem.size / 1024); tag->u.mem.start, tag->u.mem.size / 1024);
return -EINVAL; return -EINVAL;
} }
meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start; add_memory(tag->u.mem.start, tag->u.mem.size);
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;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment