Re: [PATCH v2 2/2] arm64: mmu: avoid allocating pages while installing ng-mapping for KPTI

From: David Hildenbrand (Red Hat)
Date: Thu Dec 18 2025 - 04:42:42 EST


On 12/18/25 10:31, Yeoreum Yun wrote:
Hi David,

On 12/18/25 09:37, Yeoreum Yun wrote:
[...]
I think it would be better to use only __GFP_HIGH in here since
when kpti_install_ng_mappings() is called, "kswpd" doesn't created yet.
and to allocate page with assurance, It would be good to use
min_reserved to.

Am I missing something?

Personally I think we should just use "GFP_KERNEL | __GFP_ZERO". Anything else
would make this allocation look special, which it is not. If we fail to allocate
at this point in boot, we have bigger problems.

But I'm not sure *HOW effective* to use GFP_KERNEL in here.
Since it's before the any filesystem inited.
IOW, in this context, almost there would be no *page cache*
and I think it seems meaningless to use "GFP_KERNEL" and "direct
reclaim"

So to get success for allocation, __GFP_HIGH | _GFP_ZERO seems much
better.

Unless there is a real reason to confuse readers why this is very special,
just go with "GFP_KERNEL | __GFP_ZERO", really.

In particular if it doesn't matter in practice? Or does it and we are not
getting your point?

My worries was
- kpti_install_ng_mappings() is called while in "smp_init()" which is
before creating the kswapd thread via module_init().
Just wondered whether it allows to call wakeup_kswapd() before
kswapd is created.

The buddy should really be able to deal with that, no?


- Similar reason kcompactd too.

Same as well.

We cannot expect alloc API users to know about these hidden details to work around them :)


- Just wonder how much direct reclaim is effecitve since
when kpti_install_ng_mappings() called before each
filesystem initialised where not much of page cache in usage.

Right, but do you really think we would ever trigger that path?

The default should always be GFP_KERNEL unless we have for very good reason special demands.

So, do you think in practice there is real value in NOT using GFP_KERNEL? :)

--
Cheers

David