mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-02 08:17:01 +00:00
kernel: Enable memory hotplug(add) for arm64
This patch is update version for [1] as kernel upgrad to v4.19. It derives from [2] which has accept by kernel community after v4.20. Modifacation has been done to make it be able to enable memory hotplug using probe method as it originally aims to using acpi. Also some corresponding configurations in kernel config are opened. [1] https://github.com/kata-containers/packaging/ commit/e654dbd8367371c1b34776445a402d3c90f0dc66 [2] https://git.kernel.org/pub/scm/linux/kernel/ git/torvalds/linux.git/commit/ ?id=4ab215061554ae2a4b78744a5dd3b3c6639f16a7 Change-Id: I305435f1d7e38d5cfcee22799792d1f4b0f015f8 Signed-off-by: Jianyong Wu <jianyong.wu@arm.com> Jira: ENTOS-899
This commit is contained in:
parent
e7fb9c1ad0
commit
c33b51911d
@ -359,6 +359,8 @@ CONFIG_SCHED_SMT=y
|
||||
CONFIG_NR_CPUS=255
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_ARCH_MEMORY_PROBE=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_HOLES_IN_ZONE=y
|
||||
# CONFIG_HZ_100 is not set
|
||||
# CONFIG_HZ_250 is not set
|
||||
|
@ -1 +1 @@
|
||||
32
|
||||
33
|
||||
|
@ -0,0 +1,98 @@
|
||||
From 074a6a9d83a4e790f892ef0fc91cdabbfbf26202 Mon Sep 17 00:00:00 2001
|
||||
From: Jianyong Wu <jianyong.wu@arm.com>
|
||||
Date: Tue, 19 Feb 2019 01:15:32 -0500
|
||||
Subject: [PATCH] Enable memory-hotplug using probe for arm64
|
||||
|
||||
---
|
||||
arch/arm64/Kconfig | 7 +++++++
|
||||
arch/arm64/mm/init.c | 9 ++++++++-
|
||||
arch/arm64/mm/mmu.c | 17 +++++++++++++++++
|
||||
arch/arm64/mm/numa.c | 10 ++++++++++
|
||||
4 files changed, 42 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
|
||||
index 1b1a0e95c751..881bea194d53 100644
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -740,6 +740,13 @@ config NUMA
|
||||
local memory of the CPU and add some more
|
||||
NUMA awareness to the kernel.
|
||||
|
||||
+config ARCH_MEMORY_PROBE
|
||||
+ def_bool y
|
||||
+ depends on MEMORY_HOTPLUG
|
||||
+
|
||||
+config ARCH_ENABLE_MEMORY_HOTPLUG
|
||||
+ def_bool y
|
||||
+
|
||||
config NODES_SHIFT
|
||||
int "Maximum NUMA Nodes (as a power of 2)"
|
||||
range 1 10
|
||||
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
|
||||
index 787e27964ab9..e66e44b7bafe 100644
|
||||
--- a/arch/arm64/mm/init.c
|
||||
+++ b/arch/arm64/mm/init.c
|
||||
@@ -288,9 +288,16 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
||||
int pfn_valid(unsigned long pfn)
|
||||
{
|
||||
phys_addr_t addr = pfn << PAGE_SHIFT;
|
||||
-
|
||||
if ((addr >> PAGE_SHIFT) != pfn)
|
||||
return 0;
|
||||
+
|
||||
+#ifdef CONFIG_SPARSEMEM
|
||||
+ if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!valid_section(__nr_to_section(pfn_to_section_nr(pfn))))
|
||||
+ return 0;
|
||||
+#endif
|
||||
return memblock_is_map_memory(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(pfn_valid);
|
||||
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
|
||||
index 8080c9f489c3..c393b37597af 100644
|
||||
--- a/arch/arm64/mm/mmu.c
|
||||
+++ b/arch/arm64/mm/mmu.c
|
||||
@@ -1028,3 +1028,20 @@ int pud_free_pmd_page(pud_t *pudp, unsigned long addr)
|
||||
pmd_free(NULL, table);
|
||||
return 1;
|
||||
}
|
||||
+
|
||||
+#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
+int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap,
|
||||
+ bool want_memblock)
|
||||
+{
|
||||
+ int flags = 0;
|
||||
+
|
||||
+ if (debug_pagealloc_enabled())
|
||||
+ flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
|
||||
+
|
||||
+ __create_pgd_mapping(swapper_pg_dir, start, __phys_to_virt(start),
|
||||
+ size, PAGE_KERNEL, pgd_pgtable_alloc, flags);
|
||||
+
|
||||
+ return __add_pages(nid, start >> PAGE_SHIFT, size >> PAGE_SHIFT,
|
||||
+ altmap, want_memblock);
|
||||
+}
|
||||
+#endif
|
||||
diff --git a/arch/arm64/mm/numa.c b/arch/arm64/mm/numa.c
|
||||
index 146c04ceaa51..d276bd4d38b5 100644
|
||||
--- a/arch/arm64/mm/numa.c
|
||||
+++ b/arch/arm64/mm/numa.c
|
||||
@@ -464,3 +464,13 @@ void __init arm64_numa_init(void)
|
||||
|
||||
numa_init(dummy_numa_init);
|
||||
}
|
||||
+
|
||||
+/*
|
||||
+ * We hope that we will be hotplugging memory on nodes we already know about,
|
||||
+ * such that acpi_get_node() succeeds and we never fall back to this...
|
||||
+ */
|
||||
+int memory_add_physaddr_to_nid(u64 addr)
|
||||
+{
|
||||
+ pr_warn("Unknown node for memory at 0x%llx, assuming node 0\n", addr);
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
|
Loading…
Reference in New Issue
Block a user