Re: [PATCH v2 02/12] x86: pgtable: Always use pte_free_kernel()
From: Dave Hansen
Date: Tue Apr 08 2025 - 12:55:51 EST
On 4/8/25 09:37, Matthew Wilcox wrote:
> On Tue, Apr 08, 2025 at 08:22:47AM -0700, Dave Hansen wrote:
>> Are there any tests for folio_test_pgtable() at free_page() time? If we
>> had that, it would make it less likely that another free_page() user
>> could sneak in without calling the destructor.
> It's hidden, but yes:
>
> static inline bool page_expected_state(struct page *page,
> unsigned long check_flags)
> {
> if (unlikely(atomic_read(&page->_mapcount) != -1))
> return false;
>
> PageTable uses page_type which aliases with mapcount, so this check
> covers "PageTable is still set when the last refcount to it is put".
Huh, so shouldn't we have ended up in bad_page() for these, other than:
pagetable_dtor(virt_to_ptdesc(pmd));
free_page((unsigned long)pmd);
?