Merge "arm64: memory-hotplug: Add MEMORY_HOTPLUG, MEMORY_HOTREMOVE, MEMORY_PROBE"
This commit is contained in:
commit
0543cba80c
2 changed files with 52 additions and 0 deletions
|
@ -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---
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue