|
@@ -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)
|