Re: [PATCH v3] x86/virt/tdx: Formalize SEAMCALL version encoding support
From: Xu Yilun
Date: Mon Sep 14 2026 - 00:58:54 EST
On Fri, Sep 11, 2026 at 12:58:58PM -0700, Kishen Maloor wrote:
> On 7/22/26 1:46 AM, Xu Yilun wrote:
> > ...
> > +/*
> > + * SEAMCALL leaf:
> > + *
> > + * Bit 15:0 Leaf number
> > + * Bit 23:16 Leaf ABI version number
> > + * Bit 24 Pending interrupts detection mode
> > + * Bit 63 1 for P-SEAMLDR leaf, 0 for TDX module leaf
> > + */
> > +#define SEAMCALL_LEAF_MASK GENMASK_U64(15, 0)
> > +#define SEAMCALL_SEAMLDR_MASK BIT_U64(63)
> > +
> > static __always_inline u64 __seamcall_dirty_cache(sc_func_t func, u64 fn,
> > struct tdx_module_args *args)
> > {
> > + /*
> > + * fn contains base leaf number for TDX module calls and P-SEAMLDR
> > + * calls. Other fields in SEAMCALL leaf like leaf ABI version number
> > + * are in struct tdx_module_args.
> > + */
> > + BUILD_BUG_ON(fn & ~(SEAMCALL_LEAF_MASK | SEAMCALL_SEAMLDR_MASK));
> The changelog lists the SEAMLDR flag among the RAX fields that are not a good fit
> for the function number definition, but 'fn' still carries it. Why does 'version'
Yeah, it makes confusion. I deleted these words in v6 [1].
> get a field in struct tdx_module_args while the SEAMLDR flag stays in 'fn'?
Because SEAMLDR flag is now defined as a part of the leaf number for
SEAM loader calls, for example:
/* P-SEAMLDR SEAMCALL leaf function */
#define P_SEAMLDR_INFO 0x8000000000000000
#define P_SEAMLDR_INSTALL 0x8000000000000001
>
> Otherwise, looks fine.
>
> Reviewed-by: Kishen Maloor <kishen.maloor@xxxxxxxxx>
I assume you are also good to the v6 and added your RB, please let me
know if you object.
[1]: https://lore.kernel.org/all/20260910104347.625378-1-yilun.xu@xxxxxxxxxxxxxxx/
Thanks,
Yilun