The patch titled Subject: mm/memory_hotplug: optimize memory hotplug has been added to the -mm tree. Its filename is mm-memory_hotplug-optimize-memory-hotplug-v5.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-memory_hotplug-optimize-memory-hotplug-v5.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-memory_hotplug-optimize-memory-hotplug-v5.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> Subject: mm/memory_hotplug: optimize memory hotplug - Address more comments from Ingo Molnar and Michal Hocko. - We are now using struct memory_block to hold node id as suggested by Michal. Link: http://lkml.kernel.org/r/20180228030308.1116-7-pasha.tatashin@xxxxxxxxxx Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> Reviewed-by: Ingo Molnar <mingo@xxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Baoquan He <bhe@xxxxxxxxxx> Cc: Bharata B Rao <bharata@xxxxxxxxxxxxxxxxxx> Cc: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx> Cc: Dan Williams <dan.j.williams@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> Cc: Steven Sistare <steven.sistare@xxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/base/node.c | 2 ++ include/linux/memory.h | 1 + mm/memory_hotplug.c | 18 ++++++++---------- mm/sparse.c | 5 ++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff -puN drivers/base/node.c~mm-memory_hotplug-optimize-memory-hotplug-v5 drivers/base/node.c --- a/drivers/base/node.c~mm-memory_hotplug-optimize-memory-hotplug-v5 +++ a/drivers/base/node.c @@ -405,6 +405,8 @@ int register_mem_sect_under_node(struct if (!mem_blk) return -EFAULT; + + mem_blk->nid = nid; if (!node_online(nid)) return 0; diff -puN include/linux/memory.h~mm-memory_hotplug-optimize-memory-hotplug-v5 include/linux/memory.h --- a/include/linux/memory.h~mm-memory_hotplug-optimize-memory-hotplug-v5 +++ a/include/linux/memory.h @@ -33,6 +33,7 @@ struct memory_block { void *hw; /* optional pointer to fw/hw data */ int (*phys_callback)(struct memory_block *); struct device dev; + int nid; /* NID for this memory block */ }; int arch_get_memory_phys_device(unsigned long start_pfn); diff -puN mm/memory_hotplug.c~mm-memory_hotplug-optimize-memory-hotplug-v5 mm/memory_hotplug.c --- a/mm/memory_hotplug.c~mm-memory_hotplug-optimize-memory-hotplug-v5 +++ a/mm/memory_hotplug.c @@ -250,7 +250,6 @@ static int __meminit __add_section(int n struct vmem_altmap *altmap, bool want_memblock) { int ret; - struct page *page; if (pfn_valid(phys_start_pfn)) return -EEXIST; @@ -259,14 +258,6 @@ static int __meminit __add_section(int n if (ret < 0) return ret; - /* - * The first page in every section holds node id, this is because we - * will need it in online_pages(). - */ - page = pfn_to_page(phys_start_pfn); - mm_zero_struct_page(page); - set_page_node(page, nid); - if (!want_memblock) return 0; @@ -899,8 +890,15 @@ int __ref online_pages(unsigned long pfn int nid; int ret; struct memory_notify arg; + struct memory_block *mem; + + /* + * We can't use pfn_to_nid() because nid might be stored in struct page + * which is not yet initialized. Instead, we find nid from memory block. + */ + mem = find_memory_block(__pfn_to_section(pfn)); + nid = mem->nid; - nid = pfn_to_nid(pfn); /* associate pfn range with the zone */ zone = move_pfn_range(online_type, nid, pfn, nr_pages); diff -puN mm/sparse.c~mm-memory_hotplug-optimize-memory-hotplug-v5 mm/sparse.c --- a/mm/sparse.c~mm-memory_hotplug-optimize-memory-hotplug-v5 +++ a/mm/sparse.c @@ -818,11 +818,10 @@ int __meminit sparse_add_one_section(str #ifdef CONFIG_DEBUG_VM /* - * poison uninitialized struct pages in order to catch invalid flags + * Poison uninitialized struct pages in order to catch invalid flags * combinations. */ - memset(memmap, PAGE_POISON_PATTERN, - sizeof(struct page) * PAGES_PER_SECTION); + memset(memmap, PAGE_POISON_PATTERN, sizeof(struct page) * PAGES_PER_SECTION); #endif section_mark_present(ms); _ Patches currently in -mm which might be from pasha.tatashin@xxxxxxxxxx are mm-initialize-pages-on-demand-during-boot.patch mm-initialize-pages-on-demand-during-boot-fix-3.patch mm-memory_hotplug-enforce-block-size-aligned-range-check.patch x86-mm-memory_hotplug-determine-block-size-based-on-the-end-of-boot-memory.patch x86-mm-memory_hotplug-determine-block-size-based-on-the-end-of-boot-memory-v4.patch mm-uninitialized-struct-page-poisoning-sanity-checking.patch mm-uninitialized-struct-page-poisoning-sanity-checking-v4.patch mm-memory_hotplug-optimize-probe-routine.patch mm-memory_hotplug-dont-read-nid-from-struct-page-during-hotplug.patch mm-memory_hotplug-dont-read-nid-from-struct-page-during-hotplug-v5.patch mm-memory_hotplug-optimize-memory-hotplug.patch mm-memory_hotplug-optimize-memory-hotplug-v5.patch sparc64-ng4-memset-32-bits-overflow.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html