The patch titled Subject: mm-disable-interrupts-while-initializing-deferred-pages-v6 has been added to the -mm tree. Its filename is mm-disable-interrupts-while-initializing-deferred-pages-v6.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-disable-interrupts-while-initializing-deferred-pages-v6.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-disable-interrupts-while-initializing-deferred-pages-v6.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/process/submit-checklist.rst 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-disable-interrupts-while-initializing-deferred-pages-v6 - Fixed issues found by Andrew Morton: replaced cond_resched() with touch_nmi_watchdog(), instead of simply deleting it. - Removed useless pgdata_resize_lock_irq(), as regular pgdata_resize_lock() does exactly what is needed. Link: http://lkml.kernel.org/r/20180313182355.17669-2-pasha.tatashin@xxxxxxxxxx Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/memory_hotplug.h | 20 -------------------- mm/page_alloc.c | 13 ++++++++----- 2 files changed, 8 insertions(+), 25 deletions(-) diff -puN include/linux/memory_hotplug.h~mm-disable-interrupts-while-initializing-deferred-pages-v6 include/linux/memory_hotplug.h --- a/include/linux/memory_hotplug.h~mm-disable-interrupts-while-initializing-deferred-pages-v6 +++ a/include/linux/memory_hotplug.h @@ -287,32 +287,12 @@ void pgdat_resize_init(struct pglist_dat { spin_lock_init(&pgdat->node_size_lock); } - -/* Disable interrupts and save previous IRQ state in flags before locking */ -static inline -void pgdat_resize_lock_irq(struct pglist_data *pgdat, unsigned long *flags) -{ - unsigned long tmp_flags; - - local_irq_save(*flags); - local_irq_disable(); - pgdat_resize_lock(pgdat, &tmp_flags); -} - -static inline -void pgdat_resize_unlock_irq(struct pglist_data *pgdat, unsigned long *flags) -{ - pgdat_resize_unlock(pgdat, flags); -} - #else /* !(CONFIG_MEMORY_HOTPLUG || CONFIG_DEFERRED_STRUCT_PAGE_INIT) */ /* * Stub functions for when hotplug is off */ static inline void pgdat_resize_lock(struct pglist_data *p, unsigned long *f) {} static inline void pgdat_resize_unlock(struct pglist_data *p, unsigned long *f) {} -static inline void pgdat_resize_lock_irq(struct pglist_data *p, unsigned long *f) {} -static inline void pgdat_resize_unlock_irq(struct pglist_data *p, unsigned long *f) {} static inline void pgdat_resize_init(struct pglist_data *pgdat) {} #endif /* !(CONFIG_MEMORY_HOTPLUG || CONFIG_DEFERRED_STRUCT_PAGE_INIT) */ diff -puN mm/page_alloc.c~mm-disable-interrupts-while-initializing-deferred-pages-v6 mm/page_alloc.c --- a/mm/page_alloc.c~mm-disable-interrupts-while-initializing-deferred-pages-v6 +++ a/mm/page_alloc.c @@ -1506,6 +1506,7 @@ static void __init deferred_free_pages(i } else if (!(pfn & nr_pgmask)) { deferred_free_range(pfn - nr_free, nr_free); nr_free = 1; + touch_nmi_watchdog(); } else { nr_free++; } @@ -1532,10 +1533,12 @@ static unsigned long __init deferred_in if (!deferred_pfn_valid(nid, pfn, &nid_init_state)) { page = NULL; continue; - } else if (!page || !(pfn & nr_pgmask)) + } else if (!page || !(pfn & nr_pgmask)) { page = pfn_to_page(pfn); - else + touch_nmi_watchdog(); + } else { page++; + } __init_single_page(page, pfn, zid, nid, true); nr_pages++; } @@ -1560,10 +1563,10 @@ static int __init deferred_init_memmap(v if (!cpumask_empty(cpumask)) set_cpus_allowed_ptr(current, cpumask); - pgdat_resize_lock_irq(pgdat, &flags); + pgdat_resize_lock(pgdat, &flags); first_init_pfn = pgdat->first_deferred_pfn; if (first_init_pfn == ULONG_MAX) { - pgdat_resize_unlock_irq(pgdat, &flags); + pgdat_resize_unlock(pgdat, &flags); pgdat_init_report_one_done(); return 0; } @@ -1597,7 +1600,7 @@ static int __init deferred_init_memmap(v epfn = min_t(unsigned long, zone_end_pfn(zone), PFN_DOWN(epa)); deferred_free_pages(nid, zid, spfn, epfn); } - pgdat_resize_unlock_irq(pgdat, &flags); + pgdat_resize_unlock(pgdat, &flags); /* Sanity check that the next zone really is unpopulated */ WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone)); _ Patches currently in -mm which might be from pasha.tatashin@xxxxxxxxxx are mm-disable-interrupts-while-initializing-deferred-pages.patch mm-disable-interrupts-while-initializing-deferred-pages-v6.patch mm-initialize-pages-on-demand-during-boot.patch mm-initialize-pages-on-demand-during-boot-fix-3.patch mm-initialize-pages-on-demand-during-boot-fix-4.patch mm-initialize-pages-on-demand-during-boot-v5.patch mm-initialize-pages-on-demand-during-boot-v6.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 xen-mm-allow-deferred-page-initialization-for-xen-pv-domains.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