From: Kai Huang <kai.huang@intel.com>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, dave.hansen@intel.com, dan.j.williams@intel.com,
kirill.shutemov@linux.intel.com, rick.p.edgecombe@intel.com,
peterz@infradead.org, tglx@linutronix.de, bp@alien8.de,
mingo@redhat.com, hpa@zytor.com, seanjc@google.com,
pbonzini@redhat.com, kvm@vger.kernel.org,
isaku.yamahata@intel.com, binbin.wu@linux.intel.com,
kai.huang@intel.com
Subject: [PATCH 4/9] x86/virt/tdx: Abstract reading multiple global metadata fields as a helper
Date: Mon, 17 Jun 2024 00:01:14 +1200 [thread overview]
Message-ID: <dd4ab4f97fc12780e4052f7ece94ceadffafd24d.1718538552.git.kai.huang@intel.com> (raw)
In-Reply-To: <cover.1718538552.git.kai.huang@intel.com>
For now the kernel only reads "TD Memory Region" (TDMR) related global
metadata fields to a 'struct tdx_tdmr_sysinfo' for initializing the TDX
module. Future changes will need to read other metadata fields that
don't make sense to populate to the "struct tdx_tdmr_sysinfo".
Now the code in get_tdx_tdmr_sysinfo() to read multiple global metadata
fields is not bound to the 'struct tdx_tdmr_sysinfo', and can support
reading all metadata element sizes. Abstract this code as a helper for
future use.
Signed-off-by: Kai Huang <kai.huang@intel.com>
---
arch/x86/virt/vmx/tdx/tdx.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
index 4392e82a9bcb..c68fbaf4aa15 100644
--- a/arch/x86/virt/vmx/tdx/tdx.c
+++ b/arch/x86/virt/vmx/tdx/tdx.c
@@ -304,6 +304,21 @@ struct field_mapping {
.offset = offsetof(_struct, _member), \
.size = sizeof(typeof(((_struct *)0)->_member)) }
+static int stbuf_read_sysmd_multi(const struct field_mapping *fields,
+ int nr_fields, void *stbuf)
+{
+ int i, ret;
+
+ for (i = 0; i < nr_fields; i++) {
+ ret = stbuf_read_sysmd_field(fields[i].field_id, stbuf,
+ fields[i].offset, fields[i].size);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
#define TD_SYSINFO_MAP_TDMR_INFO(_field_id, _member) \
TD_SYSINFO_MAP(_field_id, struct tdx_tdmr_sysinfo, _member)
@@ -318,18 +333,8 @@ static const struct field_mapping fields[] = {
static int get_tdx_tdmr_sysinfo(struct tdx_tdmr_sysinfo *tdmr_sysinfo)
{
- int ret;
- int i;
-
/* Populate 'tdmr_sysinfo' fields using the mapping structure above: */
- for (i = 0; i < ARRAY_SIZE(fields); i++) {
- ret = stbuf_read_sysmd_field(fields[i].field_id, tdmr_sysinfo,
- fields[i].offset, fields[i].size);
- if (ret)
- return ret;
- }
-
- return 0;
+ return stbuf_read_sysmd_multi(fields, ARRAY_SIZE(fields), tdmr_sysinfo);
}
/* Calculate the actual TDMR size */
--
2.43.2
next prev parent reply other threads:[~2024-06-16 12:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-16 12:01 [PATCH 0/9] TDX host: metadata reading tweaks, bug fix and info dump Kai Huang
2024-06-16 12:01 ` [PATCH 1/9] x86/virt/tdx: Rename _offset to _member for TD_SYSINFO_MAP() macro Kai Huang
2024-06-16 12:01 ` [PATCH 2/9] x86/virt/tdx: Unbind global metadata read with 'struct tdx_tdmr_sysinfo' Kai Huang
2024-06-18 11:23 ` Nikolay Borisov
2024-06-18 23:29 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 3/9] x86/virt/tdx: Support global metadata read for all element sizes Kai Huang
2024-06-18 11:42 ` Nikolay Borisov
2024-06-18 23:28 ` Huang, Kai
2024-06-19 8:05 ` Nikolay Borisov
2024-06-19 9:51 ` Huang, Kai
2024-06-16 12:01 ` Kai Huang [this message]
2024-06-18 11:45 ` [PATCH 4/9] x86/virt/tdx: Abstract reading multiple global metadata fields as a helper Nikolay Borisov
2024-06-18 23:42 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 5/9] x86/virt/tdx: Move field mapping table of getting TDMR info to function local Kai Huang
2024-06-18 11:47 ` Nikolay Borisov
2024-06-18 23:44 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 6/9] x86/virt/tdx: Start to track all global metadata in one structure Kai Huang
2024-06-18 13:17 ` Nikolay Borisov
2024-06-18 23:54 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 7/9] x86/virt/tdx: Print TDX module basic information Kai Huang
2024-06-18 13:52 ` Nikolay Borisov
2024-06-19 0:22 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 8/9] x86/virt/tdx: Exclude memory region hole within CMR as TDMR's reserved area Kai Huang
2024-06-17 10:54 ` Chao Gao
2024-06-18 0:12 ` Huang, Kai
2024-06-18 15:10 ` Nikolay Borisov
2024-06-19 1:23 ` Huang, Kai
2024-06-19 4:58 ` Huang, Kai
2024-07-05 3:00 ` Binbin Wu
2024-07-05 9:36 ` Huang, Kai
2024-06-16 12:01 ` [PATCH 9/9] x86/virt/tdx: Don't initialize module that doesn't support NO_RBP_MOD feature Kai Huang
2024-06-18 15:12 ` Nikolay Borisov
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=dd4ab4f97fc12780e4052f7ece94ceadffafd24d.1718538552.git.kai.huang@intel.com \
--to=kai.huang@intel.com \
--cc=binbin.wu@linux.intel.com \
--cc=bp@alien8.de \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@intel.com \
--cc=hpa@zytor.com \
--cc=isaku.yamahata@intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rick.p.edgecombe@intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®