All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Gao <chao.gao@intel.com>
To: Xu Yilun <yilun.xu@linux.intel.com>
Cc: <linux-kernel@vger.kernel.org>, <linux-coco@lists.linux.dev>,
	<kvm@vger.kernel.org>, <binbin.wu@linux.intel.com>,
	<tony.lindgren@linux.intel.com>,
	Thomas Gleixner <tglx@kernel.org>,
	"Ingo Molnar" <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>, <x86@kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Kiryl Shutsemau <kas@kernel.org>,
	Rick Edgecombe <rick.p.edgecombe@intel.com>
Subject: Re: [PATCH v3 02/10] x86/virt/tdx: Convert the version metadata reader
Date: Fri, 9 Oct 2026 11:15:36 +0800	[thread overview]
Message-ID: <ashcWFDIDt_V28UL@intel.com> (raw)
In-Reply-To: <asfJI+15tQivvy95@yilunxu-OptiPlex-7050>

On Fri, Oct 09, 2026 at 12:47:31AM +0800, Xu Yilun wrote:
>On Tue, Sep 29, 2026 at 10:38:36PM -0700, Chao Gao wrote:
>> With the helper to read a table of metadata fields in place, the
>> existing metadata readers can be standardized on it.
>> 
>> Convert the version metadata reader: add a table that pairs each field ID
>> with the 'struct tdx_sys_info_version' member that holds its value, and
>> read all version fields by walking that table.
>> 
>> Name the field IDs for readability, so the table entries don't carry raw
>> hex literals.
>>
>
>[...]
>
>> +#define TDX_SYSINFO_MAP_VERSION(_field_id, _member) \
>> +	TDX_SYSINFO_MAP(_field_id, struct tdx_sys_info_version, _member)
>> +
>> +static const struct field_mapping version_mappings[] = {
>> +	TDX_SYSINFO_MAP_VERSION(TDX_FIELD_MINOR_VERSION,  minor_version),
>> +	TDX_SYSINFO_MAP_VERSION(TDX_FIELD_MAJOR_VERSION,  major_version),
>> +	TDX_SYSINFO_MAP_VERSION(TDX_FIELD_UPDATE_VERSION, update_version),
>> +};
>
>[...]
>
>I think something like the following is quite clear to me:
>
>  static const struct field_mapping version_mappings[] = {
>	FIELD_MAP(0x0800000100000003ULL, struct tdx_sys_info_version, minor_version),
>	...
>  }
>
>  or even:
>
>	FIELD_MAP(0x0800000100000003ULL, version, minor_version),

Building the struct name from "version" needs another macro:

#define FIELD_MAP(_field, _type, _member) \
	__FIELD_MAP(_field, struct tdx_sys_info_##_type, _member)

This shortens each table entry by 20 characters. The struct name is no
longer greppable in these tables, but I don't think that matters here.

Dave and Nikolay earlier suggested dropping the per-class macros to avoid
excessive macro nesting, and this adds one level back. But for this single
generic macro, I think the shorter entries are worth it.

Dave, Nikolay, would you be OK with it, or should we just let the entries
run up to 100 columns?

>
>It clearly tells the mapping for the class, the field, and the field_id.
>
>So I'm not sure what's the downside of a literal hex here. To me, a
>TDX_FIELD_XX MACRO only creates duplicated names in one line and
>unnecessary touch points when we add a new field.

Naming ABI constants is the usual kernel convention. It is true that the
surrounding code makes it clear what 0x0800000100000003ULL is. But I think
it is even better for the constant to describe itself.

Not all fields go through FIELD_MAP() tables. The CPUID config arrays are
read in a loop, as TDX_FIELD_CPUID_CONFIG_LEAVES + i. A literal there has
no FIELD_MAP() nearby to explain it.

The TD-scoped metadata code already names its fields (TDCS_*), so this
keeps the two consistent.

I agree that naming the ABI constants adds one touch point per field. But
I think that is a small cost.

>
>
>> diff --git a/arch/x86/virt/vmx/tdx/tdx.h b/arch/x86/virt/vmx/tdx/tdx.h
>> index db209541d3cd..10cbc2d77a5a 100644
>> --- a/arch/x86/virt/vmx/tdx/tdx.h
>> +++ b/arch/x86/virt/vmx/tdx/tdx.h
>> @@ -52,6 +52,16 @@
>>  #define TDH_PHYMEM_PAMT_REMOVE		59
>>  #define TDH_SYS_DISABLE			69
>>  
>> +/*
>> + * TDX global metadata field IDs.
>> + *
>> + * See "global_metadata.pdf" in Intel TDX Module ABI Definitions.
>> + */
>> +/* Class "TDX Module Version" */
>> +#define TDX_FIELD_MINOR_VERSION			0x0800000100000003ULL
>> +#define TDX_FIELD_MAJOR_VERSION			0x0800000100000004ULL
>> +#define TDX_FIELD_UPDATE_VERSION		0x0800000100000005ULL
>
>I think these are unnecessary touch points, metadata readers never use
>these MACROs.

  parent reply	other threads:[~2026-10-09  3:15 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30  5:38 [PATCH v3 00/10] TDX: Stop auto-generating the global metadata code Chao Gao
2026-09-30  5:38 ` [PATCH v3 01/10] x86/virt/tdx: Add a helper to read a table of metadata fields Chao Gao
2026-10-01  0:30   ` Edgecombe, Rick P
2026-10-01 16:19   ` Nikolay Borisov
2026-09-30  5:38 ` [PATCH v3 02/10] x86/virt/tdx: Convert the version metadata reader Chao Gao
2026-10-01  0:30   ` Edgecombe, Rick P
2026-10-01 16:24   ` Nikolay Borisov
2026-10-01 16:27     ` Dave Hansen
2026-10-02 12:09       ` Chao Gao
2026-10-02 12:11         ` Nikolay Borisov
2026-10-08 16:47   ` Xu Yilun
2026-10-08 16:58     ` Edgecombe, Rick P
2026-10-09  3:15     ` Chao Gao [this message]
2026-09-30  5:38 ` [PATCH v3 03/10] x86/virt/tdx: Convert the features " Chao Gao
2026-10-01  0:30   ` Edgecombe, Rick P
2026-09-30  5:38 ` [PATCH v3 04/10] x86/virt/tdx: Convert the tdmr " Chao Gao
2026-10-01  0:31   ` Edgecombe, Rick P
2026-09-30  5:38 ` [PATCH v3 05/10] x86/virt/tdx: Convert the td_ctrl " Chao Gao
2026-10-01  0:31   ` Edgecombe, Rick P
2026-09-30  5:38 ` [PATCH v3 06/10] x86/virt/tdx: Convert the handoff " Chao Gao
2026-10-01  0:31   ` Edgecombe, Rick P
2026-09-30  5:38 ` [PATCH v3 07/10] x86/virt/tdx: Convert the td_conf " Chao Gao
2026-09-30 23:54   ` Edgecombe, Rick P
2026-10-01 12:08     ` Chao Gao
2026-10-01 16:34     ` Nikolay Borisov
2026-10-01 20:28       ` Edgecombe, Rick P
2026-10-02 12:28         ` Chao Gao
2026-10-02 12:32           ` Nikolay Borisov
2026-09-30  5:38 ` [PATCH v3 08/10] x86/virt/tdx: Remove tdx_global_metadata.c Chao Gao
2026-09-30  5:38 ` [PATCH v3 09/10] x86/virt/tdx: Use early returns in get_tdx_sys_info() Chao Gao
2026-10-01  0:30   ` Edgecombe, Rick P
2026-10-01 13:05     ` Chao Gao
2026-09-30  5:38 ` [PATCH v3 10/10] x86/virt/tdx: Verify structure member sizes against metadata field IDs Chao Gao
2026-10-01  0:29   ` Edgecombe, Rick P
2026-10-01 13:01     ` Chao Gao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ashcWFDIDt_V28UL@intel.com \
    --to=chao.gao@intel.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=tglx@kernel.org \
    --cc=tony.lindgren@linux.intel.com \
    --cc=x86@kernel.org \
    --cc=yilun.xu@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.