|
@@ -705,8 +705,10 @@ EXPORT_SYMBOL_GPL(__add_pages);
|
|
|
int __remove_pages(struct zone *zone, unsigned long phys_start_pfn,
|
|
|
unsigned long nr_pages)
|
|
|
{
|
|
|
- unsigned long i, ret = 0;
|
|
|
+ unsigned long i;
|
|
|
int sections_to_remove;
|
|
|
+ resource_size_t start, size;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
/*
|
|
|
* We can only remove entire sections
|
|
@@ -714,7 +716,12 @@ int __remove_pages(struct zone *zone, unsigned long phys_start_pfn,
|
|
|
BUG_ON(phys_start_pfn & ~PAGE_SECTION_MASK);
|
|
|
BUG_ON(nr_pages % PAGES_PER_SECTION);
|
|
|
|
|
|
- release_mem_region(phys_start_pfn << PAGE_SHIFT, nr_pages * PAGE_SIZE);
|
|
|
+ start = phys_start_pfn << PAGE_SHIFT;
|
|
|
+ size = nr_pages * PAGE_SIZE;
|
|
|
+ ret = release_mem_region_adjustable(&iomem_resource, start, size);
|
|
|
+ if (ret)
|
|
|
+ pr_warn("Unable to release resource <%016llx-%016llx> (%d)\n",
|
|
|
+ start, start + size - 1, ret);
|
|
|
|
|
|
sections_to_remove = nr_pages / PAGES_PER_SECTION;
|
|
|
for (i = 0; i < sections_to_remove; i++) {
|