On Fri, May 21, 2021 at 03:44:49PM -0700, Dave Hansen wrote: > On 5/21/21 3:28 AM, Mel Gorman wrote: > > +static int nr_pcp_high(struct per_cpu_pages *pcp, struct zone *zone) > > +{ > > + int high = READ_ONCE(pcp->high); > > + > > + if (unlikely(!high)) > > + return 0; > > + > > + if (!test_bit(ZONE_RECLAIM_ACTIVE, &zone->flags)) > > + return high; > > + > > + /* > > + * If reclaim is active, limit the number of pages that can be > > + * stored on pcp lists > > + */ > > + return READ_ONCE(pcp->batch) << 2; > > +} > > Should there be a sanity check on this? Let's say we had one of those > weirdo zones with tons of CPUs and a small low_wmark_pages(). Could we > have a case where: > > pcp->high < pcp->batch<<2 > > and this effectively *raises* nr_pcp_high()? > > It's not possible with the current pcp->high calculation, but does > anything prevent it now? I don't think it would happen as pcp->batch is reduced for small zones but a sanity check does not hurt so I added one. -- Mel Gorman SUSE Labs