[PATCH v5 0/3] fix wrong usage of memory allocation APIs under PREEMPT_RT in arm64
From: Yeoreum Yun <hidden>
Date: 2026-01-05 20:23:33
Also in:
linux-rt-devel, lkml
Under PREEMPT_RT, calling generic memory allocation/free APIs (e.x) __get_free_pages(), pgtable_alloc(), free_pages() and etc with preemption disabled is not allowed, but allow only nolock() APIs series because it may acquire a spin lock that becomes sleepable on RT, potentially causing a sleep during page allocation (See Documentation/core-api/real-time/differences.rst, Memory allocation section). However, In arm64, __linear_map_split_to_ptes() and __kpti_install_ng_mappings() called by stopper thread via stop_machine() use generic memory allocation/free APIs. This patchset fixes this problem and based on v6.19-rc1 Patch History ============== from v4 to v5: - rebase to v6.19-rc4 - remove useless __always_inline - fix alignments - https://lore.kernel.org/all/20260102150736.1378818-1-yeoreum.yun@arm.com/ (local) from v3 to v4: - rebase to v6.19-rc3 - introduce pgtable_alloc_t - following several suggestions from @Ryan Roberts - https://lore.kernel.org/all/20251218194750.395301-1-yeoreum.yun@arm.com/ (local) from v2 to v3: - remove split-mode and split_args. pass proper function pointer while spliting. - rename function name. - https://lore.kernel.org/all/20251217182007.2345700-1-yeoreum.yun@arm.com/ (local) from v1 to v2: - drop pagetable_alloc_nolock() - following @Ryan Roberts suggestion. - https://lore.kernel.org/all/20251212161832.2067134-1-yeoreum.yun@arm.com/ (local) Yeoreum Yun (3): arm64: mmu: introduce pgtable_alloc_t arm64: mmu: avoid allocating pages while splitting the linear mapping arm64: mmu: avoid allocating pages while installing ng-mapping for KPTI arch/arm64/mm/mmu.c | 241 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 186 insertions(+), 55 deletions(-) -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}