On 5/12/22 10:50, Mel Gorman wrote: > The VM_BUG_ON check for a valid page can be avoided with a simple > change in the flow. The ZONE_BOOSTED_WATERMARK is unlikely in general > and even more unlikely if the page allocation failed so mark the > branch unlikely. Hm, so that makes a DEBUG_VM config avoid the check. On the other hand, it puts it on the path returning from rmqueue_pcplist() for all configs, and that should be the fast path. So unless things further change in the following patches, it doesn't seem that useful? > Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> > Tested-by: Minchan Kim <minchan@xxxxxxxxxx> > Acked-by: Minchan Kim <minchan@xxxxxxxxxx> > --- > mm/page_alloc.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 1c4c54503a5d..b543333dce8f 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -3765,17 +3765,18 @@ struct page *rmqueue(struct zone *preferred_zone, > > page = rmqueue_buddy(preferred_zone, zone, order, alloc_flags, > migratetype); > - if (unlikely(!page)) > - return NULL; > > out: > /* Separate test+clear to avoid unnecessary atomics */ > - if (test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags)) { > + if (unlikely(test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags))) { > clear_bit(ZONE_BOOSTED_WATERMARK, &zone->flags); > wakeup_kswapd(zone, 0, 0, zone_idx(zone)); > } > > - VM_BUG_ON_PAGE(page && bad_range(zone, page), page); > + if (unlikely(!page)) > + return NULL; > + > + VM_BUG_ON_PAGE(bad_range(zone, page), page); > return page; > } >