[PATCH] ARM: Ensure memory information is page aligned

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

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

+16 -9
+16 -9
arch/arm/kernel/setup.c
··· 395 395 } 396 396 __early_param("initrd=", early_initrd); 397 397 398 + static void __init add_memory(unsigned long start, unsigned long size) 399 + { 400 + /* 401 + * Ensure that start/size are aligned to a page boundary. 402 + * Size is appropriately rounded down, start is rounded up. 403 + */ 404 + size -= start & ~PAGE_MASK; 405 + 406 + meminfo.bank[meminfo.nr_banks].start = PAGE_ALIGN(start); 407 + meminfo.bank[meminfo.nr_banks].size = size & PAGE_MASK; 408 + meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start); 409 + meminfo.nr_banks += 1; 410 + } 411 + 398 412 /* 399 413 * Pick out the memory size. We look for mem=size@start, 400 414 * where start and size are "size[KkMm]" ··· 433 419 if (**p == '@') 434 420 start = memparse(*p + 1, p); 435 421 436 - meminfo.bank[meminfo.nr_banks].start = start; 437 - meminfo.bank[meminfo.nr_banks].size = size; 438 - meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start); 439 - meminfo.nr_banks += 1; 422 + add_memory(start, size); 440 423 } 441 424 __early_param("mem=", early_mem); 442 425 ··· 575 564 tag->u.mem.start, tag->u.mem.size / 1024); 576 565 return -EINVAL; 577 566 } 578 - meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start; 579 - meminfo.bank[meminfo.nr_banks].size = tag->u.mem.size; 580 - meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start); 581 - meminfo.nr_banks += 1; 582 - 567 + add_memory(tag->u.mem.start, tag->u.mem.size); 583 568 return 0; 584 569 } 585 570