On Wednesday, January 04, 2017 7:11 PM Mel Gorman wrote: 
> @@ -2647,9 +2644,8 @@ static struct page *rmqueue_pcplist(struct zone 
> *preferred_zone,
>       struct list_head *list;
>       bool cold = ((gfp_flags & __GFP_COLD) != 0);
>       struct page *page;
> -     unsigned long flags;
> 
> -     local_irq_save(flags);
> +     preempt_disable();
>       pcp = &this_cpu_ptr(zone->pageset)->pcp;
>       list = &pcp->lists[migratetype];
>       page = __rmqueue_pcplist(zone,  order, gfp_flags, migratetype,
> @@ -2658,7 +2654,7 @@ static struct page *rmqueue_pcplist(struct zone 
> *preferred_zone,
>               __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order);
>               zone_statistics(preferred_zone, zone, gfp_flags);
>       }
> -     local_irq_restore(flags);
> +     preempt_enable();
>       return page;
>  }
> 
With PREEMPT configured, preempt_enable() adds entry point to schedule().
Is that needed when we try to allocate a page?

Hillf

Reply via email to