diff options
Diffstat (limited to 'include/linux/memblock.h')
-rw-r--r-- | include/linux/memblock.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index bae11c7e7bf3..7ed0f7782d16 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
@@ -237,6 +237,22 @@ unsigned long memblock_next_valid_pfn(unsigned long pfn, unsigned long max_pfn); | |||
237 | for_each_mem_range_rev(i, &memblock.memory, &memblock.reserved, \ | 237 | for_each_mem_range_rev(i, &memblock.memory, &memblock.reserved, \ |
238 | nid, flags, p_start, p_end, p_nid) | 238 | nid, flags, p_start, p_end, p_nid) |
239 | 239 | ||
240 | /** | ||
241 | * for_each_resv_unavail_range - iterate through reserved and unavailable memory | ||
242 | * @i: u64 used as loop variable | ||
243 | * @flags: pick from blocks based on memory attributes | ||
244 | * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL | ||
245 | * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL | ||
246 | * | ||
247 | * Walks over unavailable but reserved (reserved && !memory) areas of memblock. | ||
248 | * Available as soon as memblock is initialized. | ||
249 | * Note: because this memory does not belong to any physical node, flags and | ||
250 | * nid arguments do not make sense and thus not exported as arguments. | ||
251 | */ | ||
252 | #define for_each_resv_unavail_range(i, p_start, p_end) \ | ||
253 | for_each_mem_range(i, &memblock.reserved, &memblock.memory, \ | ||
254 | NUMA_NO_NODE, MEMBLOCK_NONE, p_start, p_end, NULL) | ||
255 | |||
240 | static inline void memblock_set_region_flags(struct memblock_region *r, | 256 | static inline void memblock_set_region_flags(struct memblock_region *r, |
241 | unsigned long flags) | 257 | unsigned long flags) |
242 | { | 258 | { |
@@ -389,10 +405,10 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo | |||
389 | region < (memblock.memblock_type.regions + memblock.memblock_type.cnt); \ | 405 | region < (memblock.memblock_type.regions + memblock.memblock_type.cnt); \ |
390 | region++) | 406 | region++) |
391 | 407 | ||
392 | #define for_each_memblock_type(memblock_type, rgn) \ | 408 | #define for_each_memblock_type(i, memblock_type, rgn) \ |
393 | for (idx = 0, rgn = &memblock_type->regions[0]; \ | 409 | for (i = 0, rgn = &memblock_type->regions[0]; \ |
394 | idx < memblock_type->cnt; \ | 410 | i < memblock_type->cnt; \ |
395 | idx++, rgn = &memblock_type->regions[idx]) | 411 | i++, rgn = &memblock_type->regions[i]) |
396 | 412 | ||
397 | #ifdef CONFIG_MEMTEST | 413 | #ifdef CONFIG_MEMTEST |
398 | extern void early_memtest(phys_addr_t start, phys_addr_t end); | 414 | extern void early_memtest(phys_addr_t start, phys_addr_t end); |