Re: [PATCH v2 10/31] x86/virt/tdx: Add extra memory to TDX Module for Extensions

Huang, Kai
2026-04-24T09:11:07Z

On Fri, 2026-04-24 at 08:09 +0000, Huang, Kai wrote:
> I believe we can use some smart hack to implement a common one to cover all
> cases above, but I am not sure whether it's worth to do (maybe we can have a try
> to see how does it look like, though, I think).

So the problem is use what as input when retry, and one way is to provide a
callback to allow the user to provide a specific function to update the 'args'
before retrying.

Something like below? I am not sure I like it though, because as Rick said
there's too much SEAMCALL wrapper/macros already.

typedef void (*args_update_func_t)(struct tdx_module_args *args,
struct tdx_module_args *ori);

static __always_inline u64 sc_retry_intr(sc_func_t func, u64 fn,
struct tdx_module_args *args,
args_update_func_t update_args)
{
struct tdx_module_args _args = *args;
u64 ret;

do {
ret = sc_retry(func, fn, &_args);

if (ret != TDX_INTERRUPT_RESUMABLE)
break;

update_args(&_args, args);
} while (1);

*args = _args;

return ret;
}

#define seamcall_ret_intr(_fn, _args, _args_update_f) \
sc_retry_intr(__seamcall_ret, (_fn), (_args), (_args_update_f))