[PATCH v2 02/12] x86: pgtable: Always use pte_free_kernel()

Dave Hansen dave.hansen at intel.com
Wed Apr 9 02:54:42 AEST 2025


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);

?


More information about the Linuxppc-dev mailing list