Re: [PATCH v3] x86/virt/tdx: Formalize SEAMCALL version encoding support

From: Kishen Maloor

Date: Mon Sep 14 2026 - 20:19:15 EST


On 9/13/26 9:58 PM, Xu Yilun wrote:
> 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

Okay.

>
>>
>> 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.

Yes, v6 looks better, and you may include my RB.

Thanks!