summaryrefslogtreecommitdiffstats
path: root/include/linux/memblock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/memblock.h')
-rw-r--r--include/linux/memblock.h24
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
240static inline void memblock_set_region_flags(struct memblock_region *r, 256static 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
398extern void early_memtest(phys_addr_t start, phys_addr_t end); 414extern void early_memtest(phys_addr_t start, phys_addr_t end);