Loading arch/arm64/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -731,6 +731,12 @@ config HOTPLUG_CPU Say Y here to experiment with turning CPUs off and on. CPUs 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 # a multiplatform kernel, we just want the highest value required by the # selected platforms. Loading Loading @@ -847,6 +853,10 @@ config ARM64_DMA_IOMMU_ALIGNMENT endif config ARCH_MEMORY_PROBE def_bool y depends on MEMORY_HOTPLUG config SECCOMP bool "Enable seccomp to safely compute untrusted bytecode" ---help--- Loading arch/arm64/mm/init.c +39 −0 Original line number Diff line number Diff line Loading @@ -691,3 +691,42 @@ static int __init register_mem_limit_dumper(void) return 0; } __initcall(register_mem_limit_dumper); #ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock) { pg_data_t *pgdat; unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; int ret; pgdat = NODE_DATA(nid); ret = __add_pages(nid, start_pfn, nr_pages, want_memblock); 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
arch/arm64/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -731,6 +731,12 @@ config HOTPLUG_CPU Say Y here to experiment with turning CPUs off and on. CPUs 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 # a multiplatform kernel, we just want the highest value required by the # selected platforms. Loading Loading @@ -847,6 +853,10 @@ config ARM64_DMA_IOMMU_ALIGNMENT endif config ARCH_MEMORY_PROBE def_bool y depends on MEMORY_HOTPLUG config SECCOMP bool "Enable seccomp to safely compute untrusted bytecode" ---help--- Loading
arch/arm64/mm/init.c +39 −0 Original line number Diff line number Diff line Loading @@ -691,3 +691,42 @@ static int __init register_mem_limit_dumper(void) return 0; } __initcall(register_mem_limit_dumper); #ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory(int nid, u64 start, u64 size, bool want_memblock) { pg_data_t *pgdat; unsigned long start_pfn = start >> PAGE_SHIFT; unsigned long nr_pages = size >> PAGE_SHIFT; int ret; pgdat = NODE_DATA(nid); ret = __add_pages(nid, start_pfn, nr_pages, want_memblock); 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