}
EXPORT_SYMBOL_GPL(mhp_supports_memmap_on_memory);
+static void altmap_free(struct vmem_altmap *altmap)
+{
+ WARN_ONCE(altmap->alloc, "Altmap not fully unmapped");
+ kfree(altmap);
+}
+
static void remove_memory_blocks_and_altmaps(u64 start, u64 size)
{
unsigned long memblock_size = memory_block_size_bytes();
put_device(&mem->dev);
remove_memory_block_devices(cur_start, memblock_size);
-
arch_remove_memory(cur_start, memblock_size, altmap, NULL);
-
- /* Verify that all vmemmap pages have actually been freed. */
- WARN(altmap->alloc, "Altmap not fully unmapped");
- kfree(altmap);
+ altmap_free(altmap);
}
}
/* call arch's memory hotadd */
ret = arch_add_memory(nid, cur_start, memblock_size, ¶ms);
if (ret < 0) {
- kfree(params.altmap);
+ altmap_free(params.altmap);
goto out;
}
params.altmap, group);
if (ret) {
arch_remove_memory(cur_start, memblock_size, params.altmap, NULL);
- kfree(params.altmap);
+ altmap_free(params.altmap);
goto out;
}
}