diff options
Diffstat (limited to 'mm/memblock.c')
| -rw-r--r-- | mm/memblock.c | 28 | 
1 files changed, 28 insertions, 0 deletions
| diff --git a/mm/memblock.c b/mm/memblock.c index d300f1329814..07ff069fef25 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -822,6 +822,17 @@ int __init_memblock memblock_mark_mirror(phys_addr_t base, phys_addr_t size)  	return memblock_setclr_flag(base, size, 1, MEMBLOCK_MIRROR);  } +/** + * memblock_mark_nomap - Mark a memory region with flag MEMBLOCK_NOMAP. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Return 0 on success, -errno on failure. + */ +int __init_memblock memblock_mark_nomap(phys_addr_t base, phys_addr_t size) +{ +	return memblock_setclr_flag(base, size, 1, MEMBLOCK_NOMAP); +}  /**   * __next_reserved_mem_region - next function for for_each_reserved_region() @@ -913,6 +924,10 @@ void __init_memblock __next_mem_range(u64 *idx, int nid, ulong flags,  		if ((flags & MEMBLOCK_MIRROR) && !memblock_is_mirror(m))  			continue; +		/* skip nomap memory unless we were asked for it explicitly */ +		if (!(flags & MEMBLOCK_NOMAP) && memblock_is_nomap(m)) +			continue; +  		if (!type_b) {  			if (out_start)  				*out_start = m_start; @@ -1022,6 +1037,10 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags,  		if ((flags & MEMBLOCK_MIRROR) && !memblock_is_mirror(m))  			continue; +		/* skip nomap memory unless we were asked for it explicitly */ +		if (!(flags & MEMBLOCK_NOMAP) && memblock_is_nomap(m)) +			continue; +  		if (!type_b) {  			if (out_start)  				*out_start = m_start; @@ -1519,6 +1538,15 @@ int __init_memblock memblock_is_memory(phys_addr_t addr)  	return memblock_search(&memblock.memory, addr) != -1;  } +int __init_memblock memblock_is_map_memory(phys_addr_t addr) +{ +	int i = memblock_search(&memblock.memory, addr); + +	if (i == -1) +		return false; +	return !memblock_is_nomap(&memblock.memory.regions[i]); +} +  #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP  int __init_memblock memblock_search_pfn_nid(unsigned long pfn,  			 unsigned long *start_pfn, unsigned long *end_pfn) | 
