Re: [PATCH v4 04/16] x86/virt/tdx: Allocate page bitmap for Dynamic PAMT
From: Edgecombe, Rick P
Date: Mon Jan 05 2026 - 17:06:49 EST
On Wed, 2025-12-24 at 17:10 +0800, Xu Yilun wrote:
> Is it better we seal the awkward pattern inside the if (dpamt supported) block:
>
> if (tdx_support_dynamic_pamt(&tdx_sysinfo))
> if (!ret && !(ret = read_sys_metadata_field(0x9100000100000013, &val)))
> sysinfo_tdmr->pamt_page_bitmap_entry_bits = val;
The extra indentation might be objectionable.
But I agree that line is too hard to read. It actually already caused some
confusion, which precipitated the comment. I played around with it and was
thinking to go with this instead to make it fit the pattern better. What do you
think?
static int get_tdx_sys_info_dpamt_bits(struct tdx_sys_info_tdmr *sysinfo_tdmr,
u64 *val)
{
/*
* Don't let the metadata reading fail if dynamic PAMT isn't
* supported. The TDX code can fallback to normal PAMT in
* this case.
*/
if (!tdx_supports_dynamic_pamt(&tdx_sysinfo)) {
*val = 0;
return 0;
}
return read_sys_metadata_field(0x9100000100000013, val);
}
static int get_tdx_sys_info_tdmr(struct tdx_sys_info_tdmr *sysinfo_tdmr)
{
int ret = 0;
u64 val;
if (!ret && !(ret = read_sys_metadata_field(0x9100000100000008, &val)))
sysinfo_tdmr->max_tdmrs = val;
if (!ret && !(ret = read_sys_metadata_field(0x9100000100000009, &val)))
sysinfo_tdmr->max_reserved_per_tdmr = val;
if (!ret && !(ret = read_sys_metadata_field(0x9100000100000010, &val)))
sysinfo_tdmr->pamt_4k_entry_size = val;
if (!ret && !(ret = read_sys_metadata_field(0x9100000100000011, &val)))
sysinfo_tdmr->pamt_2m_entry_size = val;
if (!ret && !(ret = read_sys_metadata_field(0x9100000100000012, &val)))
sysinfo_tdmr->pamt_1g_entry_size = val;
if (!ret && !(ret = get_tdx_sys_info_dpamt_bits(sysinfo_tdmr, &val)))
sysinfo_tdmr->pamt_page_bitmap_entry_bits = val;
return ret;
}