Hi Andrew,

> > +/* 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);
> > +}
> 
> As far as I can tell, this ugly-looking thing is identical to
> pgdat_resize_lock().

I will get rid of it, and use pgdat_resize_lock(). My confusion was that I
thought that local_irq_save() only saves the IRQ flags does not disable
them.

> 
> > --- 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.

Thank you for your review,
Pavel

Reply via email to