From 7d2d545992c1dd57185759312a642f643053f02c Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 7 Oct 2026 23:24:04 -0400 Subject: [PATCH] alpha: add missing page_table_check_pte_clear() to ptep_get_and_clear() Alpha's CONFIG_COMPACTION-gated ptep_get_and_clear() overrides the generic version in include/linux/pgtable.h but omits its page_table_check_pte_clear() call. With CONFIG_PAGE_TABLE_CHECK=y the map count taken by set_ptes() is therefore never dropped when a PTE is cleared through this path. zap_pte_range() clears PTEs this way, so the first page freed after it hits the BUG_ON() in __page_table_check_zero(). The call was instead placed in ptep_clear_flush() by commit dd5712f3379c ("alpha: fix user-space corruption during memory compaction"), where it was harmless until alpha enabled page table check. Add the missing call, and drop the now-duplicate one in ptep_clear_flush(), which already goes through ptep_get_and_clear(). Fixes: e761b6fe4085 ("alpha: add ARCH_SUPPORTS_PAGE_TABLE_CHECK support") Reviewed-by: Magnus Lindholm Tested-by: Magnus Lindholm Signed-off-by: Matt Turner Link: https://lore.kernel.org/r/20261007-alpha-hugepages-v2-1-8e108af2d961@gmail.com Signed-off-by: Magnus Lindholm --- arch/alpha/include/asm/pgtable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgtable.h index 6ebdd90f3035..8a175e0c2b42 100644 --- a/arch/alpha/include/asm/pgtable.h +++ b/arch/alpha/include/asm/pgtable.h @@ -305,6 +305,7 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, pte_t pte = READ_ONCE(*ptep); pte_clear(mm, address, ptep); + page_table_check_pte_clear(mm, address, pte); return pte; } @@ -316,7 +317,6 @@ static inline pte_t ptep_clear_flush(struct vm_area_struct *vma, struct mm_struct *mm = vma->vm_mm; pte_t pte = ptep_get_and_clear(mm, addr, ptep); - page_table_check_pte_clear(mm, addr, pte); migrate_flush_tlb_page(vma, addr); return pte; }