Re: [PATCH v6 04/10] x86/virt/tdx: Use dedicated struct members for PAMT entry sizes
From: Dan Williams
Date: Mon Oct 28 2024 - 18:00:20 EST
Kai Huang wrote:
> Currently, the 'struct tdmr_sys_info_tdmr' which includes TDMR related
> fields defines the PAMT entry sizes for TDX supported page sizes (4KB,
> 2MB and 1GB) as an array:
>
> struct tdx_sys_info_tdmr {
> ...
> u16 pamt_entry_sizes[TDX_PS_NR];
> };
>
> PAMT entry sizes are needed when allocating PAMTs for each TDMR. Using
> the array to contain PAMT entry sizes reduces the number of arguments
> that need to be passed when calling tdmr_set_up_pamt(). It also makes
> the code pattern like below clearer:
>
> for (pgsz = TDX_PS_4K; pgsz < TDX_PS_NR; pgsz++) {
> pamt_size[pgsz] = tdmr_get_pamt_sz(tdmr, pgsz,
> pamt_entry_size[pgsz]);
> tdmr_pamt_size += pamt_size[pgsz];
> }
>
> However, the auto-generated metadata reading code generates a structure
> member for each field. The 'global_metadata.json' has a dedicated field
> for each PAMT entry size, and the new 'struct tdx_sys_info_tdmr' looks
> like:
>
> struct tdx_sys_info_tdmr {
> ...
> u16 pamt_4k_entry_size;
> u16 pamt_2m_entry_size;
> u16 pamt_1g_entry_size;
> };
>
> To prepare to use the auto-generated code, make the existing 'struct
> tdx_sys_info_tdmr' look like the generated one. But when passing to
> tdmrs_set_up_pamt_all(), build a local array of PAMT entry sizes from
> the structure so the code to allocate PAMTs can stay the same.
>
> Signed-off-by: Kai Huang <kai.huang@xxxxxxxxx>
Makes sense to align with the autogenerated code to reduce maintenance/review
fatigue going forward.
Reviewed-by: Dan Williams <dan.j.williams@xxxxxxxxx>