Merge "arm64: memory-hotplug: Add MEMORY_HOTPLUG, MEMORY_HOTREMOVE, MEMORY_PROBE"

This commit is contained in:
Linux Build Service Account 2017-11-22 19:51:19 -08:00 committed by Gerrit - the friendly Code Review server
commit 0543cba80c
2 changed files with 52 additions and 0 deletions

View file

@ -652,6 +652,12 @@ config HOTPLUG_CPU
Say Y here to experiment with turning CPUs off and on. CPUs Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu. can be controlled through /sys/devices/system/cpu.
config ARCH_ENABLE_MEMORY_HOTPLUG
def_bool y
config ARCH_ENABLE_MEMORY_HOTREMOVE
def_bool y
# The GPIO number here must be sorted by descending number. In case of # The GPIO number here must be sorted by descending number. In case of
# a multiplatform kernel, we just want the highest value required by the # a multiplatform kernel, we just want the highest value required by the
# selected platforms. # selected platforms.
@ -738,6 +744,10 @@ config ARCH_HAS_CACHE_LINE_SIZE
source "mm/Kconfig" source "mm/Kconfig"
config ARCH_MEMORY_PROBE
def_bool y
depends on MEMORY_HOTPLUG
config SECCOMP config SECCOMP
bool "Enable seccomp to safely compute untrusted bytecode" bool "Enable seccomp to safely compute untrusted bytecode"
---help--- ---help---

View file

@ -495,3 +495,45 @@ static int __init register_mem_limit_dumper(void)
return 0; return 0;
} }
__initcall(register_mem_limit_dumper); __initcall(register_mem_limit_dumper);
#ifdef CONFIG_MEMORY_HOTPLUG
int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
{
pg_data_t *pgdat;
struct zone *zone;
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
int ret;
pgdat = NODE_DATA(nid);
zone = pgdat->node_zones +
zone_for_memory(nid, start, size, ZONE_NORMAL, for_device);
ret = __add_pages(nid, zone, start_pfn, nr_pages);
if (ret)
pr_warn("%s: Problem encountered in __add_pages() ret=%d\n",
__func__, ret);
return ret;
}
#ifdef CONFIG_MEMORY_HOTREMOVE
int arch_remove_memory(u64 start, u64 size)
{
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
struct zone *zone;
int ret;
zone = page_zone(pfn_to_page(start_pfn));
ret = __remove_pages(zone, start_pfn, nr_pages);
if (ret)
pr_warn("%s: Problem encountered in __remove_pages() ret=%d\n",
__func__, ret);
return ret;
}
#endif
#endif