Re: [v5 1/2] mm: disable interrupts while initializing deferred pages

From: Andrew Morton
Date: Tue Mar 13 2018 - 14:55:55 EST


On Tue, 13 Mar 2018 12:04:30 -0400 Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> wrote:

> >
> > > --- a/mm/page_alloc.c
> > > +++ b/mm/page_alloc.c
> > > @@ -1506,7 +1506,6 @@ static void __init deferred_free_pages(int nid, int zid, unsigned long pfn,
> > > } else if (!(pfn & nr_pgmask)) {
> > > deferred_free_range(pfn - nr_free, nr_free);
> > > nr_free = 1;
> > > - cond_resched();
> > > } else {
> > > nr_free++;
> >
> > And how can we simply remove these cond_resched()s? I assume this is
> > being done because interrupts are now disabled? But those were there
> > for a reason, weren't they?
>
> We must remove cond_resched() because we can't sleep anymore. They were
> added to fight NMI timeouts, so I will replace them with
> touch_nmi_watchdog() in a follow-up fix.

This makes no sense. Any code section where we can add cond_resched()
was never subject to NMI timeouts because that code cannot be running with
disabled interrupts.