|
@@ -721,7 +721,17 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|
|
|
|
|
int remove_memory(u64 start, u64 size)
|
|
int remove_memory(u64 start, u64 size)
|
|
{
|
|
{
|
|
- return -EINVAL;
|
|
|
|
|
|
+ unsigned long start_pfn, end_pfn;
|
|
|
|
+ unsigned long timeout = 120 * HZ;
|
|
|
|
+ int ret;
|
|
|
|
+ start_pfn = start >> PAGE_SHIFT;
|
|
|
|
+ end_pfn = start_pfn + (size >> PAGE_SHIFT);
|
|
|
|
+ ret = offline_pages(start_pfn, end_pfn, timeout);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto out;
|
|
|
|
+ /* we can free mem_map at this point */
|
|
|
|
+out:
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(remove_memory);
|
|
EXPORT_SYMBOL_GPL(remove_memory);
|
|
#endif
|
|
#endif
|