From: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
To: "pbonzini@redhat.com" <pbonzini@redhat.com>,
"Hansen, Dave" <dave.hansen@intel.com>,
"seanjc@google.com" <seanjc@google.com>
Cc: "Yao, Yuan" <yuan.yao@intel.com>,
"Huang, Kai" <kai.huang@intel.com>,
"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
"Li, Xiaoyao" <xiaoyao.li@intel.com>,
"isaku.yamahata@gmail.com" <isaku.yamahata@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"tony.lindgren@linux.intel.com" <tony.lindgren@linux.intel.com>,
"sean.j.christopherson@intel.com"
<sean.j.christopherson@intel.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Chatre, Reinette" <reinette.chatre@intel.com>,
"Yamahata, Isaku" <isaku.yamahata@intel.com>,
"Zhao, Yan Y" <yan.y.zhao@intel.com>
Subject: Re: [PATCH v2 08/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX page cache management
Date: Wed, 13 Nov 2024 21:44:22 +0000 [thread overview]
Message-ID: <2adb22bef3f5d2b7e606031f406528e982a6360a.camel@intel.com> (raw)
In-Reply-To: <ff549c76-59a3-47f6-b68d-64ef957a7765@intel.com>
On Wed, 2024-11-13 at 13:08 -0800, Dave Hansen wrote:
> Let's say I see the error get spit out on the console. I can't make any
> sense out of it from this spot. I need to go over to the TDX docs or
> tdh_phymem_page_reclaim() to look at the *comment* to figure out what
> these the registers are named.
>
> The code as proposed has zero self-documenting properties. It's
> actually completely non-self-documenting. It isn't _any_ better for
> readability than just doing:
>
> struct tdx_module_args args = {};
>
> for (i = TDX_SEAMCALL_RETRIES; i > 0; i--) {
> args.rcx = pa;
> err = seamcall_ret(TDH_PHYMEM_PAGE_RECLAIM, &args);
> ...
> }
>
> pr_tdx_error_3(TDH_PHYMEM_PAGE_RECLAIM, err,
> args.rcx, args.rdx, args.r8);
If we extracted meaning from the registers and printed those, then we would not
have any new bits that popped up in there. For example, currently r8 has bits
63:3 described as reserved. While expectations around TDX module behavior
changes are still settling, I'd rather have the full register for debugging than
an easy to read error message. But we have actually gone down this road a little
bit already when we adjusted the KVM calling code to stop manually loading the
struct tdx_module_args.
>
> Also, this is also showing a lack of naming discipline where things are
> named. The first argument is 'pa' in here but 'page' on the other side:
>
> > +u64 tdh_phymem_page_reclaim(u64 page, u64 *rcx, u64 *rdx, u64 *r8)
> > +{
> > + struct tdx_module_args args = {
> > + .rcx = page,
>
> I can't tell you how many recompiles it's cost me when I got lazy about
> physical addr vs. virtual addr vs. struct page vs. pfn.
Standardizing on VAs for the SEAMCALL wrappers seems like a good idea. I haven't
checked them all, but seems to be promising so far.
>
> So, yeah, I'd rather not export seamcall_ret(), but I'd rather do that
> than have a layer of abstraction that's adding little value while it
> also brings obfuscation.
In KVM these types can get even more confusing. There are guest physical address
and virtual addresses as well as the host physical and virtual. So in KVM there
is a typedef for host physical addresses: hpa_t. Previously these wrappers used
it because they are in KVM code. It was:
+static inline u64 tdh_phymem_page_reclaim(hpa_t page, u64 *rcx, u64 *rdx,
+ u64 *r8)
+{
+ struct tdx_module_args in = {
+ .rcx = page,
+ };
+ u64 ret;
+
+ ret = seamcall_ret(TDH_PHYMEM_PAGE_RECLAIM, &in);
+
+ *rcx = in.rcx;
+ *rdx = in.rdx;
+ *r8 = in.r8;
+
+ return ret;
+}
Moving them to arch/x86 means we need to translate some things between KVM's
parlance and the rest of the kernels. This is extra wrapping. Another example
that was used in the old SEAMCALL wrappers was gpa_t, which KVM uses to refers
to a guest physical address. void * to the host direct map doesn't fit, so we
are back to u64 or a new gpa struct (like in the other thread) to speak to the
arch/x86 layers.
So I think we will need some light layers of abstraction if we keep the wrappers
in arch/x86.
next prev parent reply other threads:[~2024-11-13 21:44 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-30 19:00 [PATCH v2 00/25] TDX vCPU/VM creation Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 01/25] x86/virt/tdx: Share the global metadata structure for KVM to use Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 02/25] KVM: TDX: Get TDX global information Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 03/25] x86/virt/tdx: Read essential global metadata for KVM Rick Edgecombe
2024-12-06 8:37 ` Xiaoyao Li
2024-12-06 16:13 ` Huang, Kai
2024-12-06 16:18 ` Huang, Kai
2024-12-06 16:24 ` Dave Hansen
2024-12-07 0:00 ` Huang, Kai
2024-12-12 0:31 ` Edgecombe, Rick P
2024-12-21 1:17 ` Huang, Kai
2024-12-21 1:07 ` [PATCH v2.1 " Kai Huang
2024-10-30 19:00 ` [PATCH v2 04/25] x86/virt/tdx: Add tdx_guest_keyid_alloc/free() to alloc and free TDX guest KeyID Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 05/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX KeyID management Rick Edgecombe
2024-11-12 20:09 ` Dave Hansen
2024-11-14 0:01 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 06/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX TD creation Rick Edgecombe
2024-11-12 20:17 ` Dave Hansen
2024-11-12 21:21 ` Edgecombe, Rick P
2024-11-12 21:40 ` Dave Hansen
2024-10-30 19:00 ` [PATCH v2 07/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX vCPU creation Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 08/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX page cache management Rick Edgecombe
2024-10-31 3:57 ` Yan Zhao
2024-10-31 18:57 ` Edgecombe, Rick P
2024-10-31 23:33 ` Huang, Kai
2024-11-13 0:20 ` Dave Hansen
2024-11-13 20:51 ` Edgecombe, Rick P
2024-11-13 21:08 ` Dave Hansen
2024-11-13 21:25 ` Huang, Kai
2024-11-13 22:01 ` Edgecombe, Rick P
2024-11-13 21:44 ` Edgecombe, Rick P [this message]
2024-11-13 21:50 ` Dave Hansen
2024-11-13 22:00 ` Edgecombe, Rick P
2024-11-14 0:21 ` Huang, Kai
2024-11-14 0:32 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 09/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX VM/vCPU field access Rick Edgecombe
2025-01-05 9:45 ` Francesco Lavra
2025-01-06 18:59 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 10/25] x86/virt/tdx: Add SEAMCALL wrappers for TDX flush operations Rick Edgecombe
2024-11-13 1:11 ` Dave Hansen
2024-11-13 21:18 ` Edgecombe, Rick P
2024-11-13 21:41 ` Dave Hansen
2024-11-13 21:48 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 11/25] KVM: TDX: Add placeholders for TDX VM/vCPU structures Rick Edgecombe
2025-01-05 10:58 ` Francesco Lavra
2025-01-06 19:00 ` Edgecombe, Rick P
2025-01-22 7:52 ` Tony Lindgren
2024-10-30 19:00 ` [PATCH v2 12/25] KVM: TDX: Define TDX architectural definitions Rick Edgecombe
2024-10-30 22:38 ` Huang, Kai
2024-10-30 22:53 ` Huang, Kai
2024-10-30 19:00 ` [PATCH v2 13/25] KVM: TDX: Add TDX "architectural" error codes Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 14/25] KVM: TDX: Add helper functions to print TDX SEAMCALL error Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 15/25] KVM: TDX: Add place holder for TDX VM specific mem_enc_op ioctl Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 16/25] KVM: TDX: Get system-wide info about TDX module on initialization Rick Edgecombe
2024-10-31 9:09 ` Binbin Wu
2024-10-31 9:18 ` Tony Lindgren
2024-10-31 9:22 ` Binbin Wu
2024-10-31 9:23 ` Xiaoyao Li
2024-10-31 9:37 ` Tony Lindgren
2024-10-31 14:27 ` Xiaoyao Li
2024-11-01 8:19 ` Tony Lindgren
2024-12-06 8:45 ` Xiaoyao Li
2024-12-10 9:35 ` Tony Lindgren
2025-01-08 2:34 ` Chao Gao
2025-01-08 5:41 ` Huang, Kai
2024-10-30 19:00 ` [PATCH v2 17/25] KVM: TDX: create/destroy VM structure Rick Edgecombe
2024-11-04 2:03 ` Chao Gao
2024-11-04 5:59 ` Tony Lindgren
2024-10-30 19:00 ` [PATCH v2 18/25] KVM: TDX: Support per-VM KVM_CAP_MAX_VCPUS extension check Rick Edgecombe
2025-01-05 22:12 ` Huang, Kai
2025-01-06 19:09 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 19/25] KVM: TDX: initialize VM with TDX specific parameters Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 20/25] KVM: TDX: Make pmu_intel.c ignore guest TD case Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 21/25] KVM: TDX: Don't offline the last cpu of one package when there's TDX guest Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 22/25] KVM: TDX: create/free TDX vcpu structure Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 23/25] KVM: TDX: Do TDX specific vcpu initialization Rick Edgecombe
2024-10-30 19:00 ` [PATCH v2 24/25] KVM: x86: Introduce KVM_TDX_GET_CPUID Rick Edgecombe
2024-11-01 6:39 ` Binbin Wu
2024-11-01 16:03 ` Edgecombe, Rick P
2025-01-09 11:07 ` Francesco Lavra
2025-01-10 4:29 ` Xiaoyao Li
2025-01-10 10:34 ` Francesco Lavra
2025-01-10 4:47 ` Xiaoyao Li
2025-01-21 20:24 ` Edgecombe, Rick P
2025-01-22 7:43 ` Xiaoyao Li
2025-01-23 19:44 ` Edgecombe, Rick P
2025-01-21 23:19 ` Edgecombe, Rick P
2024-10-30 19:00 ` [PATCH v2 25/25] KVM: x86/mmu: Taking guest pa into consideration when calculate tdp level Rick Edgecombe
2024-10-31 19:21 ` [PATCH v2 00/25] TDX vCPU/VM creation Adrian Hunter
2024-11-11 9:49 ` Tony Lindgren
2024-11-12 7:26 ` Adrian Hunter
2024-11-12 9:57 ` Tony Lindgren
2024-11-12 21:26 ` Edgecombe, Rick P
2024-12-10 18:22 ` Paolo Bonzini
2024-12-23 16:25 ` Paolo Bonzini
2025-01-04 1:43 ` Edgecombe, Rick P
2025-01-05 21:32 ` Huang, Kai
2025-01-07 7:37 ` Tony Lindgren
2025-01-07 12:41 ` Nikolay Borisov
2025-01-08 5:28 ` Tony Lindgren
2025-01-08 15:01 ` Sean Christopherson
2025-01-09 7:04 ` Tony Lindgren
2025-01-22 8:27 ` Tony Lindgren
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=2adb22bef3f5d2b7e606031f406528e982a6360a.camel@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=binbin.wu@linux.intel.com \
--cc=dave.hansen@intel.com \
--cc=isaku.yamahata@gmail.com \
--cc=isaku.yamahata@intel.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=reinette.chatre@intel.com \
--cc=sean.j.christopherson@intel.com \
--cc=seanjc@google.com \
--cc=tony.lindgren@linux.intel.com \
--cc=xiaoyao.li@intel.com \
--cc=yan.y.zhao@intel.com \
--cc=yuan.yao@intel.com \
/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