On Wed, May 14, 2025 at 01:33:38PM +0800, Chao Gao wrote: > >+static void tdx_pamt_put(struct page *page) > >+{ > >+ unsigned long hpa = page_to_phys(page); > >+ atomic_t *pamt_refcount; > >+ LIST_HEAD(pamt_pages); > >+ u64 err; > >+ > >+ if (!tdx_supports_dynamic_pamt(tdx_sysinfo)) > >+ return; > >+ > >+ hpa = ALIGN_DOWN(hpa, SZ_2M); > >+ > >+ pamt_refcount = tdx_get_pamt_refcount(hpa); > >+ if (!atomic_dec_and_test(pamt_refcount)) > >+ return; > >+ > >+ spin_lock(&pamt_lock); > >+ > >+ /* Lost race against tdx_pamt_add()? */ > >+ if (atomic_read(pamt_refcount) != 0) { > >+ spin_unlock(&pamt_lock); > >+ return; > >+ } > >+ > >+ err = tdh_phymem_pamt_remove(hpa | TDX_PS_2M, &pamt_pages); > >+ spin_unlock(&pamt_lock); > >+ > >+ if (err) { > >+ pr_tdx_error(TDH_PHYMEM_PAMT_REMOVE, err); > > Should the refcount be increased here, since the PAMT pages are not removed? Right. Thanks. -- Kiryl Shutsemau / Kirill A. Shutemov