[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56db8257-6da2-400d-8306-6e21d9af81f8@intel.com>
Date: Mon, 25 Nov 2024 15:40:10 +0200
From: Adrian Hunter <adrian.hunter@...el.com>
To: Dave Hansen <dave.hansen@...el.com>, pbonzini@...hat.com,
seanjc@...gle.com, kvm@...r.kernel.org, dave.hansen@...ux.intel.com
Cc: rick.p.edgecombe@...el.com, kai.huang@...el.com,
reinette.chatre@...el.com, xiaoyao.li@...el.com,
tony.lindgren@...ux.intel.com, binbin.wu@...ux.intel.com,
dmatlack@...gle.com, isaku.yamahata@...el.com, nik.borisov@...e.com,
linux-kernel@...r.kernel.org, x86@...nel.org, yan.y.zhao@...el.com,
chao.gao@...el.com, weijiang.yang@...el.com
Subject: Re: [PATCH RFC 1/7] x86/virt/tdx: Add SEAMCALL wrapper to enter/exit
TDX guest
On 22/11/24 18:33, Dave Hansen wrote:
> On 11/22/24 03:10, Adrian Hunter wrote:
>> +struct tdh_vp_enter_tdcall {
>> + u64 reg_mask : 32,
>> + vm_idx : 2,
>> + reserved_0 : 30;
>> + u64 data[TDX_ERR_DATA_PART_2];
>> + u64 fn; /* Non-zero for hypercalls, zero otherwise */
>> + u64 subfn;
>> + union {
>> + struct tdh_vp_enter_vmcall vmcall;
>> + struct tdh_vp_enter_gettdvmcallinfo gettdvmcallinfo;
>> + struct tdh_vp_enter_mapgpa mapgpa;
>> + struct tdh_vp_enter_getquote getquote;
>> + struct tdh_vp_enter_reportfatalerror reportfatalerror;
>> + struct tdh_vp_enter_cpuid cpuid;
>> + struct tdh_vp_enter_mmio mmio;
>> + struct tdh_vp_enter_hlt hlt;
>> + struct tdh_vp_enter_io io;
>> + struct tdh_vp_enter_rd rd;
>> + struct tdh_vp_enter_wr wr;
>> + };
>> +};
>
> Let's say someone declares this:
>
> struct tdh_vp_enter_mmio {
> u64 size;
> u64 mmio_addr;
> u64 direction;
> u64 value;
> };
>
> How long is that going to take you to debug?
When adding a new hardware definition, it would be sensible
to check the hardware definition first before checking anything
else.
However, to stop existing members being accidentally moved,
could add:
#define CHECK_OFFSETS_EQ(reg, member) \
BUILD_BUG_ON(offsetof(struct tdx_module_args, reg) != offsetof(union tdh_vp_enter_args, member));
CHECK_OFFSETS_EQ(r12, tdcall.mmio.size);
CHECK_OFFSETS_EQ(r13, tdcall.mmio.direction);
CHECK_OFFSETS_EQ(r14, tdcall.mmio.mmio_addr);
CHECK_OFFSETS_EQ(r15, tdcall.mmio.value);
Powered by blists - more mailing lists