All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Gao <chao.gao@intel.com>
To: x86@kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: rick.p.edgecombe@intel.com, kas@kernel.org,
	dave.hansen@linux.intel.com, chao.gao@intel.com
Subject: [PATCH v1 0/8] TDX: Stop auto-generating the global metadata code
Date: Tue,  4 Aug 2026 04:29:28 -0700	[thread overview]
Message-ID: <20260804112941.19894-1-chao.gao@intel.com> (raw)

This is a long-overdue cleanup of the TDX global metadata, based on work
from Dave [1].  Patches 1-6 keep Dave's authorship -- I only reworded the
commit messages and comments, with no significant changes to the code.
Note that they are missing Dave's Signed-off-by.

Changes on top of the original:

  - Rebased onto the latest tip/x86/tdx branch
  - Converted the newly added metadata (tdx module handoff)
  - Fixed up the __init annotations. The version and handoff tables must
    not be __initconst
  - Refined the commit messages and comments: dropped forward references
    to later patches and stopped restating what the code already says.
  - Added two patches: cleaning up error handling in get_tdx_sys_info(),
    and turning the runtime size check into a build-time one.

The series is also available at:
  https://github.com/gaochaointel/linux-dev.git tdx-metadata-v1

---
The TDX module exposes its capabilities and limits through "Global Scope
Metadata" fields, defined in the Intel TDX Module ABI spec.  The kernel
mirrors a small subset of those fields in C structures under struct
tdx_sys_info, populated by reading each field via TDH.SYS.RD.

Both the structures and the code that fills them are nominally generated
by an out-of-tree script from a JSON file describing the module's
metadata.  That made it trivial to add a new field, but everything else
suffered for it:

  - The generated files are edited by hand in practice, for different
    reasons.  The VMXON rework added __init annotations to the readers,
    and the handoff metadata is read at module shutdown into a
    caller-local struct rather than into tdx_sys_info.  In-flight series
    will add more: DPAMT and TDX module extension metadata may only be
    read when the corresponding TDX_FEATURES0 bit is set.  Regenerating
    the files would clobber all of these edits.

  - The generated code is opaque to anyone who doesn't have the script
    and the JSON file handy.  Each field is identified by a bare 64-bit
    hex literal, so verifying any one line means cross-referencing the
    JSON file.

  - The script ships outside the tree, so reproducing changes requires
    fetching it from a mailing list link.

  - The structures are short and stable, so the script's value over
    hand-maintained code is small.

So switch to a hand-maintained implementation.  Name each field ID after
the spec, then describe the field-ID-to-C-member mapping as a table: one
row per field, pairing the named spec field ID with the C member that
holds it.  Reading is then a walk over the table.

[1]: https://git.kernel.org/pub/scm/linux/kernel/git/daveh/devel.git/log/?h=tdxtable

Chao Gao (2):
  x86/virt/tdx: Clean up error handling in get_tdx_sys_info()
  x86/virt/tdx: Verify the C member size against the metadata field ID

Dave Hansen (6):
  x86/virt/tdx: Stop treating tdx_global_metadata.h as auto-generated
  x86/virt/tdx: Name the TDX module global metadata field IDs
  x86/virt/tdx: Add a table-driven TDX global metadata reader
  x86/virt/tdx: Convert version/tdmr/td_ctrl/handoff readers
  x86/virt/tdx: Convert td_conf reader
  x86/virt/tdx: Remove the auto-generated tdx_global_metadata.c

 arch/x86/include/asm/tdx_global_metadata.h  |  13 +-
 arch/x86/virt/vmx/tdx/tdx.c                 | 216 +++++++++++++++++++-
 arch/x86/virt/vmx/tdx/tdx.h                 |  66 ++++++
 arch/x86/virt/vmx/tdx/tdx_global_metadata.c | 133 ------------
 4 files changed, 290 insertions(+), 138 deletions(-)
 delete mode 100644 arch/x86/virt/vmx/tdx/tdx_global_metadata.c

-- 
2.52.0


             reply	other threads:[~2026-08-04 11:31 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-04 11:29 Chao Gao [this message]
2026-08-04 11:29 ` [PATCH v1 1/8] x86/virt/tdx: Stop treating tdx_global_metadata.h as auto-generated Chao Gao
2026-08-04 23:43   ` Dave Hansen
2026-08-05 12:06     ` Chao Gao
2026-08-05 15:26       ` Dave Hansen
2026-08-04 11:29 ` [PATCH v1 2/8] x86/virt/tdx: Name the TDX module global metadata field IDs Chao Gao
2026-08-04 23:52   ` Dave Hansen
2026-08-05 12:45     ` Chao Gao
2026-08-05 17:10   ` Edgecombe, Rick P
2026-08-10  6:35     ` Chao Gao
2026-08-04 11:29 ` [PATCH v1 3/8] x86/virt/tdx: Add a table-driven TDX global metadata reader Chao Gao
2026-08-05 17:48   ` Edgecombe, Rick P
2026-08-10  6:43     ` Chao Gao
2026-08-10 18:32       ` Edgecombe, Rick P
2026-08-04 11:29 ` [PATCH v1 4/8] x86/virt/tdx: Convert version/tdmr/td_ctrl/handoff readers Chao Gao
2026-08-04 11:29 ` [PATCH v1 5/8] x86/virt/tdx: Convert td_conf reader Chao Gao
2026-08-04 11:29 ` [PATCH v1 6/8] x86/virt/tdx: Remove the auto-generated tdx_global_metadata.c Chao Gao
2026-08-04 11:29 ` [PATCH v1 7/8] x86/virt/tdx: Clean up error handling in get_tdx_sys_info() Chao Gao
2026-08-04 11:29 ` [PATCH v1 8/8] x86/virt/tdx: Verify the C member size against the metadata field ID Chao Gao
2026-08-04 23:38 ` [PATCH v1 0/8] TDX: Stop auto-generating the global metadata code Dave Hansen
2026-08-05 12:11   ` Chao Gao
2026-08-05 17:19 ` Edgecombe, Rick P
2026-08-10  8:49   ` 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=20260804112941.19894-1-chao.gao@intel.com \
    --to=chao.gao@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rick.p.edgecombe@intel.com \
    --cc=x86@kernel.org \
    /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.