On Wed, Aug 21, 2024 at 04:52:14PM +0000, Edgecombe, Rick P wrote: > On Wed, 2024-08-21 at 08:39 +0300, Tony Lindgren wrote: > > > Hmm, we would have to make SEAMCALLs to spin on that lock, where as mutexes > > > can > > > sleep. I suspect that is where it came from. But we are trying to make the > > > code > > > simple and obviously correct and add optimizations later. This might fit > > > that > > > pattern, especially since it is just used during VM creation and teardown. > > > > For handling the busy retries for SEAMCALL callers, we could just use > > iopoll.h read_poll_timeout(). I think it can handle toggling the resume > > bit while looping, need to test that though. See for example the > > smp_func_do_phymem_cache_wb() for toggling the resume variable. > > Nice. It seems worth trying to me. To recap on this, using iopoll for smp_func_do_phymem_cache_wb() would look like: static void smp_func_do_phymem_cache_wb(void *unused) { u64 status = 0; int err; err = read_poll_timeout_atomic(tdh_phymem_cache_wb, status, status != TDX_INTERRUPTED_RESUMABLE, 1, 1000, 0, !!status); if (WARN_ON_ONCE(err)) { pr_err("TDH_PHYMEM_CACHE_WB timed out: 0x%llx\n", status); return; } ... } For the retry flag toggling with the !!status, I think it's best to add a TDX specific tdx_read_poll_timeout_atomic() macro. Regards, Tony