mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
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 dd5712f337
("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 <linmag7@gmail.com>
Tested-by: Magnus Lindholm <linmag7@gmail.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Link: https://lore.kernel.org/r/20261007-alpha-hugepages-v2-1-8e108af2d961@gmail.com
Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
This commit is contained in:
parent
a2460bfc8a
commit
7d2d545992
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user