Re: [PATCH v7 11/11] x86/virt/tdx: Optimize tdx_pamt_get/put()
Nikolay Borisov <[email protected]> Thu, 23 Jul 2026 12:00:21 +0300
| Newsgroups | dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/18/26 04:45, Rick Edgecombe wrote: > From: "Kirill A. Shutemov" <[email protected]> > > The Dynamic PAMT get/put helpers use a global spinlock to serialize all > refcount updates and SEAMCALL invocations. This gives correct behavior for > concurrent callers, but leads to contention. It is especially bad from the > KVM side, which is designed to allow faulting in EPT under a shared lock. > With the global spinlock, not only is the lock an exclusive one, but it is > for all TDs instead of just a single one. > > But taking the global lock each time is actually unnecessary. Only the 0->1 > and 1->0 refcount transitions actually need the lock (to pair with > SEAMCALLs that actually add and remove with the Dynamic PAMT pages). The > common case of incrementing or decrementing a non-zero refcount can be > done locklessly. > > So create a fast and slow path. Check the refcount outside the lock and > only take it for the slow path (0->1 and 1->0 transitions). > > On the put side make the refcount adjustment and lock taking atomic so if > a 'get' happens between them, it doesn't cause the Dynamic PAMT to be > freed incorrectly. On the get side there is no technique for doing the > refcount adjustment and lock atomically, so check the refcount again > inside the lock. > > AI was used under supervision to collect/apply feedback, review code and > workshop logs. It assisted in identifying/evaluating the stale > conditionals for the races resolved from the atomic_dec_and_lock() change. > Separate from atomic_dec_and_lock() fallout, it suggested to change > atomic_inc() to atomic_set(pamt_refcount, 1) in the put error path for the > sake of being more precise, which Kiryl had also suggested in the past. > The model also suggested updated comments following the > atomic_dec_and_lock() change based on some directed prompting. The > comments were subsequently edited or further prompted for fine tuning. > > Signed-off-by: Kirill A. Shutemov <[email protected]> > Co-developed-by: Rick Edgecombe <[email protected]> > Signed-off-by: Rick Edgecombe <[email protected]> > Reviewed-by: Chao Gao <[email protected]> > Reviewed-by: Tony Lindgren <[email protected]> Reviewed-by: Nikolay Borisov <[email protected]>