Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0543cba8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

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

parents a618c4e2 a1185dc1
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -652,6 +652,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.
@@ -738,6 +744,10 @@ config ARCH_HAS_CACHE_LINE_SIZE

source "mm/Kconfig"

config ARCH_MEMORY_PROBE
	def_bool y
	depends on MEMORY_HOTPLUG

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
	---help---
+42 −0
Original line number Diff line number Diff line
@@ -495,3 +495,45 @@ 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 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