On 9/10/20 10:31 AM, Oscar Salvador wrote: > On Mon, Sep 07, 2020 at 06:36:24PM +0200, Vlastimil Babka wrote: > >> -/* >> - * pageset_set_high() sets the high water mark for hot per_cpu_pagelist >> - * to the value high for the pageset p. >> - */ >> -static void pageset_set_high(struct per_cpu_pageset *p, >> - unsigned long high) >> -{ >> - unsigned long batch = max(1UL, high / 4); >> - if ((high / 4) > (PAGE_SHIFT * 8)) >> - batch = PAGE_SHIFT * 8; >> - >> - pageset_update(&p->pcp, high, batch); >> + pageset_update(&p->pcp, 0, 1); >> } > > Could we restore the comment we had in pageset_set_high, and maybe > update it to match this new function? I think it would be useful. Same as David, I didn't find the comment useful at all. But I can try writing a better one instead. >> >> static void pageset_set_high_and_batch(struct zone *zone, >> - struct per_cpu_pageset *pcp) >> + struct per_cpu_pageset *p) >> { >> - if (percpu_pagelist_fraction) >> - pageset_set_high(pcp, >> - (zone_managed_pages(zone) / >> - percpu_pagelist_fraction)); >> - else >> - pageset_set_batch(pcp, zone_batchsize(zone)); >> + unsigned long new_high; >> + unsigned long new_batch; >> + int fraction = READ_ONCE(percpu_pagelist_fraction); > > Why the READ_ONCE? In case there is a parallel update so things to get > messed up? Yeah, I think online of a new zone can race with sysctl update to percpu_pagelist_fraction, because online doesn't take pcp_batch_high_lock... until patch 5. But you're right this should be separate. > as I said, I'd appreciate a comment in pageset_set_high_and_batch to be > restored and updated, otherwise: > > Reviewed-by: Oscar Salvador <osalvador@xxxxxxx> Thanks! > Thanks >