On 01.12.20 12:51, Oscar Salvador wrote: > Self stored memmap leads to a sparse memory situation which is unsuitable > for workloads that requires large contiguous memory chunks. > > Make this an opt-in which needs to be explicitly enabled. > > Signed-off-by: Oscar Salvador <osalvador@xxxxxxx> > --- > mm/memory_hotplug.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 4b4708512f82..858d6161e915 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -42,6 +42,8 @@ > #include "internal.h" > #include "shuffle.h" > > +static bool memmap_on_memory_enabled __read_mostly = false; > + > /* > * online_page_callback contains pointer to current page onlining function. > * Initially it is generic_online_page(). If it is required it could be > @@ -1034,7 +1036,7 @@ bool __weak arch_support_memmap_on_memory(void) > > bool mhp_supports_memmap_on_memory(unsigned long size) > { > - if (!arch_support_memmap_on_memory() || > + if (!memmap_on_memory_enabled || !arch_support_memmap_on_memory() || > !IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP) || > size > memory_block_size_bytes()) > return false; > @@ -1422,6 +1424,13 @@ static int __init cmdline_parse_movable_node(char *p) > } > early_param("movable_node", cmdline_parse_movable_node); > > +static int __init cmdline_parse_memmap_on_memory(char *p) > +{ > + memmap_on_memory_enabled = true; > + return 0; > +} > +early_param("mhp_memmap_on_memory", cmdline_parse_memmap_on_memory); > + > /* check which state of node_states will be changed when offline memory */ > static void node_states_check_changes_offline(unsigned long nr_pages, > struct zone *zone, struct memory_notify *arg) > I have another memhp tunable in the works. I suggest doing it like page_shuffling and using, module parameters instead. Makes this a bit nicer IMHO. diff --git a/mm/Makefile b/mm/Makefile index 069f216e109e..ba7714b5eaa1 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -58,9 +58,13 @@ obj-y := filemap.o mempool.o oom_kill.o fadvise.o \ page-alloc-y := page_alloc.o page-alloc-$(CONFIG_SHUFFLE_PAGE_ALLOCATOR) += shuffle.o +# Give "memory_hotplug" its own module-parameter namespace +memory-hotplug-$(CONFIG_MEMORY_HOTPLUG) := memory_hotplug.o + obj-y += page-alloc.o obj-y += init-mm.o obj-y += memblock.o +obj-y += $(memory-hotplug-y) ifdef CONFIG_MMU obj-$(CONFIG_ADVISE_SYSCALLS) += madvise.o @@ -82,7 +86,6 @@ obj-$(CONFIG_SLAB) += slab.o obj-$(CONFIG_SLUB) += slub.o obj-$(CONFIG_KASAN) += kasan/ obj-$(CONFIG_FAILSLAB) += failslab.o -obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o obj-$(CONFIG_MEMTEST) += memtest.o obj-$(CONFIG_MIGRATION) += migrate.o obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += huge_memory.o khugepaged.o The you can just use module_param/MODULE_PARM_DESC and set the parameter via "memory_hotplug.memmap_on_memory" -- Thanks, David / dhildenb