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:
Родитель
8433ac61ac
Коммит
71088785c6
|
@ -700,23 +700,6 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
||||||
|
|
||||||
return ret;
|
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
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -134,23 +134,6 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
||||||
|
|
||||||
return __add_pages(zone, start_pfn, nr_pages);
|
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 */
|
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -189,14 +189,3 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
#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/delay.h>
|
||||||
#include <linux/migrate.h>
|
#include <linux/migrate.h>
|
||||||
#include <linux/page-isolation.h>
|
#include <linux/page-isolation.h>
|
||||||
|
#include <linux/pfn.h>
|
||||||
|
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
|
@ -849,10 +850,19 @@ failed_removal:
|
||||||
|
|
||||||
return ret;
|
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
|
#else
|
||||||
int remove_memory(u64 start, u64 size)
|
int remove_memory(u64 start, u64 size)
|
||||||
{
|
{
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(remove_memory);
|
|
||||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||||
|
EXPORT_SYMBOL_GPL(remove_memory);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче