mm: make physical memory offline work
In recent versions, the platform specific physical
offline returns the number of bytes offlined, so
a value of 0 indicates an error, not success as in
older versions. Make sure that the memory
for the original memory resource nodes is not
freed via kfree, as this memory was obtained
from alloc_bootmem very early in the system's life.
Change-Id: Iffcdd8be4483e043d7605fce596ed438b15f3e02
Signed-off-by: Larry Bassel <lbassel@codeaurora.org>
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 4a73744..8487c49 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -617,9 +617,9 @@
BUG_ON(!res);
ret = arch_physical_remove_memory(start, size);
- if (ret) {
+ if (!ret) {
kfree(res);
- return ret;
+ return 0;
}
res->name = "System RAM";
@@ -628,8 +628,11 @@
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
res_old = locate_resource(&iomem_resource, res);
- if (res_old)
- release_memory_resource(res_old);
+ if (res_old) {
+ release_resource(res_old);
+ if (PageSlab(virt_to_head_page(res_old)))
+ kfree(res_old);
+ }
kfree(res);
return ret;