Re: [PATCH] mm/page_alloc: fix memalloc_nocma_{save/restore} APIs

From: Vlastimil Babka
Date: Tue Jul 21 2020 - 08:39:03 EST


On 7/21/20 2:05 PM, Matthew Wilcox wrote:
> On Tue, Jul 21, 2020 at 12:28:49PM +0900, js1304@xxxxxxxxx wrote:
>> +static inline unsigned int current_alloc_flags(gfp_t gfp_mask,
>> + unsigned int alloc_flags)
>> +{
>> +#ifdef CONFIG_CMA
>> + unsigned int pflags = current->flags;
>> +
>> + if (!(pflags & PF_MEMALLOC_NOCMA) &&
>> + gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
>> + alloc_flags |= ALLOC_CMA;
>
> Please don't indent by one tab when splitting a line because it looks like
> the second line and third line are part of the same block. Either do
> this:
>
> if (!(pflags & PF_MEMALLOC_NOCMA) &&
> gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
> alloc_flags |= ALLOC_CMA;
>
> or this:
> if (!(pflags & PF_MEMALLOC_NOCMA) &&
> gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
> alloc_flags |= ALLOC_CMA;

Ah, good point.

>> @@ -4619,8 +4631,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>> wake_all_kswapds(order, gfp_mask, ac);
>>
>> reserve_flags = __gfp_pfmemalloc_flags(gfp_mask);
>> - if (reserve_flags)
>> + if (reserve_flags) {
>> alloc_flags = reserve_flags;
>> + alloc_flags = current_alloc_flags(gfp_mask, alloc_flags);
>> + }
>
> Is this right? Shouldn't you be passing reserve_flags to
> current_alloc_flags() here? Also, there's no need to add { } here.

Note the "alloc_flags = reserve_flags;" line is not being deleted here. But if
it was, your points would be true, and yeah it would be a bit more tidy.