diff options
author | Yinghai Lu <yinghai@kernel.org> | 2014-01-27 20:06:52 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-28 00:02:39 -0500 |
commit | fb5bb60cd004a00c1d11db680a37942ecdedb1c5 (patch) | |
tree | 4abcd05569f18c8d1d5b08ccbefd54aacc9ed0ad /mm | |
parent | 4ce7a8697cb795fda6bdf082c14743b4bcd551c3 (diff) |
memblock: don't silently align size in memblock_virt_alloc()
In original __alloc_memory_core_early() for bootmem wrapper, we do not
align size silently.
We should not do that, as later free with old size will leave some range
not freed.
It's obvious that code is copied from memblock_base_nid(), and that code
is wrong for the same reason.
Also remove that in memblock_alloc_base.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memblock.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 9c0aeef19440..87d21a6ff63c 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -984,9 +984,6 @@ static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size, | |||
984 | if (!align) | 984 | if (!align) |
985 | align = SMP_CACHE_BYTES; | 985 | align = SMP_CACHE_BYTES; |
986 | 986 | ||
987 | /* align @size to avoid excessive fragmentation on reserved array */ | ||
988 | size = round_up(size, align); | ||
989 | |||
990 | found = memblock_find_in_range_node(size, align, 0, max_addr, nid); | 987 | found = memblock_find_in_range_node(size, align, 0, max_addr, nid); |
991 | if (found && !memblock_reserve(found, size)) | 988 | if (found && !memblock_reserve(found, size)) |
992 | return found; | 989 | return found; |
@@ -1080,9 +1077,6 @@ static void * __init memblock_virt_alloc_internal( | |||
1080 | if (!align) | 1077 | if (!align) |
1081 | align = SMP_CACHE_BYTES; | 1078 | align = SMP_CACHE_BYTES; |
1082 | 1079 | ||
1083 | /* align @size to avoid excessive fragmentation on reserved array */ | ||
1084 | size = round_up(size, align); | ||
1085 | |||
1086 | again: | 1080 | again: |
1087 | alloc = memblock_find_in_range_node(size, align, min_addr, max_addr, | 1081 | alloc = memblock_find_in_range_node(size, align, min_addr, max_addr, |
1088 | nid); | 1082 | nid); |