Re: [RFC PATCH v2 01/10] x86/virt/tdx: Add a helper to read a table of metadata fields
From: Binbin Wu
Date: Thu Sep 24 2026 - 02:17:51 EST
On 9/18/2026 9:29 PM, Chao Gao wrote:
>
> +/*
> + * Map a TDX global metadata field to a structure member.
> + * @field_id: The TDX global metadata field ID.
> + * @size: The size of the structure member.
> + * @offset: The member's offset within its containing structure.
> + */
> +struct field_mapping {
> + u64 field_id;
> + size_t size;
> + int offset;
Nit:
Is it better to align the type of "size" and "offset" with size_t?
Since it's already 24 bytes per entry on x86_64, there is no extra memory cost.
> +};
> +
> +/* Read each metadata field listed in @mappings[] into @data. */
> +static int __maybe_unused __read_sys_metadata_table(const struct field_mapping *mappings,
> + int num_mappings, void *data)
> +{
> + int i, ret;
> + u64 val;
> +
> + for (i = 0; i < num_mappings; i++) {
> + ret = read_sys_metadata_field(mappings[i].field_id, &val);
> + if (ret)
> + return ret;
> + memcpy((char *)data + mappings[i].offset, &val, mappings[i].size);
> + }
> +
> + return 0;
> +}
> +
> +#define TDX_SYSINFO_MAP(_field, _type, _member) \
> +{ \
> + .field_id = TDX_MD_FIELD_ID_##_field, \
> + .offset = offsetof(_type, _member), \
> + .size = sizeof_field(_type, _member), \
> +}
> +
> #include "tdx_global_metadata.c"
>
> static __init int check_features(struct tdx_sys_info *sysinfo)