mm: cleanup to make remove_memory() arch-neutral
There is nothing architecture specific about remove_memory(). remove_memory() function is common for all architectures which support hotplug memory remove. Instead of duplicating it in every architecture, collapse them into arch neutral function. [akpm@linux-foundation.org: fix the export] Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com> Cc: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: Gary Hade <garyhade@us.ibm.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8433ac61ac
commit
71088785c6
4 changed files with 11 additions and 46 deletions
|
@ -700,23 +700,6 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|||
|
||||
return ret;
|
||||
}
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
int remove_memory(u64 start, u64 size)
|
||||
{
|
||||
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);
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -134,23 +134,6 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|||
|
||||
return __add_pages(zone, start_pfn, nr_pages);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
int remove_memory(u64 start, u64 size)
|
||||
{
|
||||
unsigned long start_pfn, end_pfn;
|
||||
int ret;
|
||||
|
||||
start_pfn = start >> PAGE_SHIFT;
|
||||
end_pfn = start_pfn + (size >> PAGE_SHIFT);
|
||||
ret = offline_pages(start_pfn, end_pfn, 120 * HZ);
|
||||
if (ret)
|
||||
goto out;
|
||||
/* Arch-specific calls go here - next patch */
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
/*
|
||||
|
|
|
@ -189,14 +189,3 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|||
return rc;
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
int remove_memory(u64 start, u64 size)
|
||||
{
|
||||
unsigned long start_pfn, end_pfn;
|
||||
|
||||
start_pfn = PFN_DOWN(start);
|
||||
end_pfn = start_pfn + PFN_DOWN(size);
|
||||
return offline_pages(start_pfn, end_pfn, 120 * HZ);
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/migrate.h>
|
||||
#include <linux/page-isolation.h>
|
||||
#include <linux/pfn.h>
|
||||
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
|
@ -849,10 +850,19 @@ int offline_pages(unsigned long start_pfn,
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int remove_memory(u64 start, u64 size)
|
||||
{
|
||||
unsigned long start_pfn, end_pfn;
|
||||
|
||||
start_pfn = PFN_DOWN(start);
|
||||
end_pfn = start_pfn + PFN_DOWN(size);
|
||||
return offline_pages(start_pfn, end_pfn, 120 * HZ);
|
||||
}
|
||||
#else
|
||||
int remove_memory(u64 start, u64 size)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(remove_memory);
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
EXPORT_SYMBOL_GPL(remove_memory);
|
||||
|
|
Loading…
Reference in a new issue