|
@@ -246,9 +246,13 @@ static void devm_memremap_pages_release(struct device *dev, void *data)
|
|
/* pages are dead and unused, undo the arch mapping */
|
|
/* pages are dead and unused, undo the arch mapping */
|
|
align_start = res->start & ~(SECTION_SIZE - 1);
|
|
align_start = res->start & ~(SECTION_SIZE - 1);
|
|
align_size = ALIGN(resource_size(res), SECTION_SIZE);
|
|
align_size = ALIGN(resource_size(res), SECTION_SIZE);
|
|
|
|
+
|
|
|
|
+ lock_device_hotplug();
|
|
mem_hotplug_begin();
|
|
mem_hotplug_begin();
|
|
arch_remove_memory(align_start, align_size);
|
|
arch_remove_memory(align_start, align_size);
|
|
mem_hotplug_done();
|
|
mem_hotplug_done();
|
|
|
|
+ unlock_device_hotplug();
|
|
|
|
+
|
|
untrack_pfn(NULL, PHYS_PFN(align_start), align_size);
|
|
untrack_pfn(NULL, PHYS_PFN(align_start), align_size);
|
|
pgmap_radix_release(res);
|
|
pgmap_radix_release(res);
|
|
dev_WARN_ONCE(dev, pgmap->altmap && pgmap->altmap->alloc,
|
|
dev_WARN_ONCE(dev, pgmap->altmap && pgmap->altmap->alloc,
|
|
@@ -360,9 +364,11 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
|
|
if (error)
|
|
if (error)
|
|
goto err_pfn_remap;
|
|
goto err_pfn_remap;
|
|
|
|
|
|
|
|
+ lock_device_hotplug();
|
|
mem_hotplug_begin();
|
|
mem_hotplug_begin();
|
|
error = arch_add_memory(nid, align_start, align_size, true);
|
|
error = arch_add_memory(nid, align_start, align_size, true);
|
|
mem_hotplug_done();
|
|
mem_hotplug_done();
|
|
|
|
+ unlock_device_hotplug();
|
|
if (error)
|
|
if (error)
|
|
goto err_add_memory;
|
|
goto err_add_memory;
|
|
|
|
|