The previous change added __GFP_ZEROTAGS when allocating the huge zero folio to ensure tag initialization for arm64 with MTE enabled. However, on s390 this flag is unnecessary and triggers a regression (observed as a crash during repeated 'dnf makecache'). Restrict the use of __GFP_ZEROTAGS to architectures that support hardware memory tagging (currently arm64 with MTE or KASAN HW tags). This avoids unintended side effects on other platforms. Fixes: 1579227fe0f0 ("mm/huge_memory: initialise the tags of the huge zero folio") Link: https://lore.kernel.org/r/20251031170133.280742-1-catalin.marinas@arm.com Signed-off-by: Jan Polensky --- mm/huge_memory.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index aae283b00857..0c1794656d7a 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -209,14 +209,15 @@ unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma, static bool get_huge_zero_folio(void) { + gfp_t gfp = (GFP_TRANSHUGE | __GFP_ZERO) & ~__GFP_MOVABLE; struct folio *zero_folio; retry: if (likely(atomic_inc_not_zero(&huge_zero_refcount))) return true; - - zero_folio = folio_alloc((GFP_TRANSHUGE | __GFP_ZERO | __GFP_ZEROTAGS) & - ~__GFP_MOVABLE, - HPAGE_PMD_ORDER); +#if IS_ENABLED(CONFIG_KASAN_HW_TAGS) || IS_ENABLED(CONFIG_ARM64_MTE) + gfp |= __GFP_ZEROTAGS; +#endif + zero_folio = folio_alloc(gfp, HPAGE_PMD_ORDER); if (!zero_folio) { count_vm_event(THP_ZERO_PAGE_ALLOC_FAILED); return false; -- 2.48.1