diff options
-rw-r--r-- | include/linux/memblock.h | 2 | ||||
-rw-r--r-- | mm/memblock.c | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 4df09bdcae42..7d285271130d 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
@@ -48,6 +48,8 @@ extern int memblock_can_resize; | |||
48 | if (memblock_debug) printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) | 48 | if (memblock_debug) printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) |
49 | 49 | ||
50 | u64 memblock_find_in_range(u64 start, u64 end, u64 size, u64 align); | 50 | u64 memblock_find_in_range(u64 start, u64 end, u64 size, u64 align); |
51 | int memblock_free_reserved_regions(void); | ||
52 | int memblock_reserve_reserved_regions(void); | ||
51 | 53 | ||
52 | extern void __init memblock_init(void); | 54 | extern void __init memblock_init(void); |
53 | extern void __init memblock_analyze(void); | 55 | extern void __init memblock_analyze(void); |
diff --git a/mm/memblock.c b/mm/memblock.c index b7ab10a2ef46..65e3ba8d09fb 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -170,6 +170,30 @@ u64 __init_memblock memblock_find_in_range(u64 start, u64 end, u64 size, u64 ali | |||
170 | return memblock_find_base(size, align, start, end); | 170 | return memblock_find_base(size, align, start, end); |
171 | } | 171 | } |
172 | 172 | ||
173 | /* | ||
174 | * Free memblock.reserved.regions | ||
175 | */ | ||
176 | int __init_memblock memblock_free_reserved_regions(void) | ||
177 | { | ||
178 | if (memblock.reserved.regions == memblock_reserved_init_regions) | ||
179 | return 0; | ||
180 | |||
181 | return memblock_free(__pa(memblock.reserved.regions), | ||
182 | sizeof(struct memblock_region) * memblock.reserved.max); | ||
183 | } | ||
184 | |||
185 | /* | ||
186 | * Reserve memblock.reserved.regions | ||
187 | */ | ||
188 | int __init_memblock memblock_reserve_reserved_regions(void) | ||
189 | { | ||
190 | if (memblock.reserved.regions == memblock_reserved_init_regions) | ||
191 | return 0; | ||
192 | |||
193 | return memblock_reserve(__pa(memblock.reserved.regions), | ||
194 | sizeof(struct memblock_region) * memblock.reserved.max); | ||
195 | } | ||
196 | |||
173 | static void __init_memblock memblock_remove_region(struct memblock_type *type, unsigned long r) | 197 | static void __init_memblock memblock_remove_region(struct memblock_type *type, unsigned long r) |
174 | { | 198 | { |
175 | unsigned long i; | 199 | unsigned long i; |