Messages in this thread Patch in this message | | | From | Logan Gunthorpe <> | Date | Wed, 27 Mar 2019 15:36:41 -0600 | Subject | [PATCH 5/7] RISC-V: Implement memory hotplug |
| |
In order to define ARCH_ENABLE_MEMORY_HOTPLUG we need to implement arch_add_memory() and vmemmap_free().
arch_add_memory() is very similar to the x86 versions except we don't need to fuss with the mapping as we've already mapped the entire linear region in riscv.
For now, vmemmap_free() is empty which is similar to other arches that don't implement hot remove.
Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Cc: Palmer Dabbelt <palmer@sifive.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Anup Patel <anup.patel@wdc.com> Cc: Atish Patra <atish.patra@wdc.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Zong Li <zong@andestech.com> Cc: Guo Ren <ren_guo@c-sky.com> --- arch/riscv/Kconfig | 3 +++ arch/riscv/mm/init.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+)
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index d21e6a12e8b6..9477214a00e7 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -83,6 +83,9 @@ config ARCH_SPARSEMEM_ENABLE config ARCH_SELECT_MEMORY_MODEL def_bool ARCH_SPARSEMEM_ENABLE +config ARCH_ENABLE_MEMORY_HOTPLUG + def_bool y + config STACKTRACE_SUPPORT def_bool y diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 315194557c3d..0a54c3adf0ac 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -238,3 +238,30 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, return vmemmap_populate_basepages(start, end, node); } #endif + +#ifdef CONFIG_MEMORY_HOTPLUG +void vmemmap_free(unsigned long start, unsigned long end, + struct vmem_altmap *altmap) +{ +} + +int arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *altmap, + bool want_memblock) +{ + unsigned long start_pfn = start >> PAGE_SHIFT; + unsigned long nr_pages = size >> PAGE_SHIFT; + int ret; + + if ((start + size) > -va_pa_offset) { + pr_err("Cannot hotplug memory from %08llx to %08llx as it doesn't fall within the linear mapping\n", + start, start + size); + return -EFAULT; + } + + ret = __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock); + WARN_ON_ONCE(ret); + + return ret; +} + +#endif -- 2.20.1
| |