From: Pavel Tatashin <pasha.tatashin@soleen.com>
To: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
mhocko@suse.com, linux-mm@kvack.org, dan.j.williams@intel.com,
shile.zhang@linux.alibaba.com, daniel.m.jordan@oracle.com,
pasha.tatashin@soleen.com, ktkhai@virtuozzo.com,
david@redhat.com, jmorris@namei.org, sashal@kernel.org,
vbabka@suse.cz
Subject: [PATCH v2 1/2] mm: call touch_nmi_watchdog() on max order boundaries in deferred init
Date: Wed, 1 Apr 2020 18:57:22 -0400 [thread overview]
Message-ID: <20200401225723.14164-2-pasha.tatashin@soleen.com> (raw)
In-Reply-To: <20200401225723.14164-1-pasha.tatashin@soleen.com>
From: Daniel Jordan <daniel.m.jordan@oracle.com>
deferred_init_memmap() disables interrupts the entire time, so it calls
touch_nmi_watchdog() periodically to avoid soft lockup splats. Soon it
will run with interrupts enabled, at which point cond_resched() should
be used instead.
deferred_grow_zone() makes the same watchdog calls through code shared
with deferred init but will continue to run with interrupts disabled, so
it can't call cond_resched().
Pull the watchdog calls up to these two places to allow the first to be
changed later, independently of the second. The frequency reduces from
twice per pageblock (init and free) to once per max order block.
Fixes: 3a2d7fa8a3d5 ("mm: disable interrupts while initializing deferred pages")
Cc: stable@vger.kernel.org # 4.17+
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
---
mm/page_alloc.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 3c4eb750a199..e8ff6a176164 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1639,7 +1639,6 @@ static void __init deferred_free_pages(unsigned long pfn,
} else if (!(pfn & nr_pgmask)) {
deferred_free_range(pfn - nr_free, nr_free);
nr_free = 1;
- touch_nmi_watchdog();
} else {
nr_free++;
}
@@ -1669,7 +1668,6 @@ static unsigned long __init deferred_init_pages(struct zone *zone,
continue;
} else if (!page || !(pfn & nr_pgmask)) {
page = pfn_to_page(pfn);
- touch_nmi_watchdog();
} else {
page++;
}
@@ -1809,8 +1807,10 @@ static int __init deferred_init_memmap(void *data)
* that we can avoid introducing any issues with the buddy
* allocator.
*/
- while (spfn < epfn)
+ while (spfn < epfn) {
nr_pages += deferred_init_maxorder(&i, zone, &spfn, &epfn);
+ touch_nmi_watchdog();
+ }
zone_empty:
pgdat_resize_unlock(pgdat, &flags);
@@ -1894,6 +1894,7 @@ deferred_grow_zone(struct zone *zone, unsigned int order)
first_deferred_pfn = spfn;
nr_pages += deferred_init_maxorder(&i, zone, &spfn, &epfn);
+ touch_nmi_watchdog();
/* We should only stop along section boundaries */
if ((first_deferred_pfn ^ spfn) < PAGES_PER_SECTION)
--
2.17.1
next prev parent reply other threads:[~2020-04-01 22:57 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-01 22:57 [PATCH v2 0/2] initialize deferred pages with interrupts enabled Pavel Tatashin
2020-04-01 22:57 ` Pavel Tatashin [this message]
2020-04-02 7:23 ` [PATCH v2 1/2] mm: call touch_nmi_watchdog() on max order boundaries in deferred init David Hildenbrand
2020-04-02 7:46 ` Michal Hocko
2020-04-02 11:36 ` Vlastimil Babka
2020-04-01 22:57 ` [PATCH v2 2/2] mm: initialize deferred pages with interrupts enabled Pavel Tatashin
2020-04-02 7:14 ` David Hildenbrand
2020-04-02 15:49 ` Pavel Tatashin
2020-04-02 7:38 ` David Hildenbrand
2020-04-02 7:47 ` Michal Hocko
2020-04-02 15:13 ` Pavel Tatashin
2020-04-02 17:16 ` Michal Hocko
2020-04-02 18:25 ` Pavel Tatashin
2020-04-02 12:09 ` Vlastimil Babka
2020-04-02 15:05 ` Pavel Tatashin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200401225723.14164-2-pasha.tatashin@soleen.com \
--to=pasha.tatashin@soleen.com \
--cc=akpm@linux-foundation.org \
--cc=dan.j.williams@intel.com \
--cc=daniel.m.jordan@oracle.com \
--cc=david@redhat.com \
--cc=jmorris@namei.org \
--cc=ktkhai@virtuozzo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=sashal@kernel.org \
--cc=shile.zhang@linux.alibaba.com \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox