From: Xu Yilun <yilun.xu@linux.intel.com>
To: kas@kernel.org, djbw@kernel.org, rick.p.edgecombe@intel.com,
x86@kernel.org, peter.fang@intel.com
Cc: linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org, sohil.mehta@intel.com, yilun.xu@intel.com,
yilun.xu@linux.intel.com, baolu.lu@linux.intel.com,
zhenzhong.duan@intel.com, xiaoyao.li@intel.com
Subject: [RFC PATCH 13/15] KVM: TDX: Support event-notify interrupts only with userspace quoting
Date: Fri, 22 May 2026 11:41:26 +0800 [thread overview]
Message-ID: <20260522034128.3144354-14-yilun.xu@linux.intel.com> (raw)
In-Reply-To: <20260522034128.3144354-1-yilun.xu@linux.intel.com>
From: Peter Fang <peter.fang@intel.com>
Tie userspace SetupEventNotifyInterrupt support to userspace Quote
generation. Delivering event-notify interrupts via userspace breaks if
KVM never exits to userspace in the first place.
No known guest currently requires event-notify interrupt support, so
defer adding in-kernel support for now. Linux TDX guests use polling
only.
Update the KVM API Documentation to reflect the change.
Signed-off-by: Peter Fang <peter.fang@intel.com>
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
---
Documentation/virt/kvm/api.rst | 8 +++++++-
arch/x86/kvm/vmx/tdx.c | 20 +++++++++++++++++---
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
index 52bbbb553ce1..8a02745a36ee 100644
--- a/Documentation/virt/kvm/api.rst
+++ b/Documentation/virt/kvm/api.rst
@@ -7335,6 +7335,9 @@ inputs and outputs of the TDVMCALL. Currently the following values of
queued successfully, the TDX guest can poll the status field in the
shared-memory area to check whether the Quote generation is completed or
not. When completed, the generated Quote is returned via the same buffer.
+ If the host kernel generates Quotes through the TDX Quoting service provided
+ by the TDX module, KVM processes the GetQuote request and it will not appear
+ in userspace. KVM only supports version 1 of the GetQuote request.
* ``TDVMCALL_GET_TD_VM_CALL_INFO``: the guest has requested the support
status of TDVMCALLs. The output values for the given leaf should be
@@ -7342,7 +7345,10 @@ inputs and outputs of the TDVMCALL. Currently the following values of
field of the union.
* ``TDVMCALL_SETUP_EVENT_NOTIFY_INTERRUPT``: the guest has requested to
- set up a notification interrupt for vector ``vector``.
+ set up a notification interrupt for vector ``vector``. Since this TDVMCALL
+ is used to optimize ``TDVMCALL_GET_QUOTE``, KVM disables this support in
+ userspace VMM if ``TDVMCALL_GET_QUOTE`` is completely handled in the kernel.
+ KVM may add kernel support for this in the future.
KVM may add support for more values in the future that may cause a userspace
exit, even without calls to ``KVM_ENABLE_CAP`` or similar. In this case,
diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
index bade046da5a1..5aebbec7fa6e 100644
--- a/arch/x86/kvm/vmx/tdx.c
+++ b/arch/x86/kvm/vmx/tdx.c
@@ -185,7 +185,7 @@ static void td_init_cpuid_entry2(struct kvm_cpuid_entry2 *entry, unsigned char i
tdx_clear_unsupported_cpuid(entry);
}
-#define TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT BIT(1)
+#define TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT BIT_ULL(1)
static int init_kvm_tdx_caps(const struct tdx_sys_info_td_conf *td_conf,
struct kvm_tdx_capabilities *caps)
@@ -202,8 +202,15 @@ static int init_kvm_tdx_caps(const struct tdx_sys_info_td_conf *td_conf,
caps->cpuid.nent = td_conf->num_cpuid_config;
- caps->user_tdvmcallinfo_1_r11 =
- TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT;
+ /*
+ * Don't advertise userspace event-notify interrupt support if TDX
+ * quoting service is enabled, as quote generation will be done entirely
+ * in the kernel. Support in the kernel can be added later if needed.
+ */
+ if (!tdx_quote_enabled()) {
+ caps->user_tdvmcallinfo_1_r11 |=
+ TDVMCALLINFO_SETUP_EVENT_NOTIFY_INTERRUPT;
+ }
for (i = 0; i < td_conf->num_cpuid_config; i++)
td_init_cpuid_entry2(&caps->cpuid.entries[i], i);
@@ -1684,9 +1691,16 @@ static int tdx_get_quote(struct kvm_vcpu *vcpu)
static int tdx_setup_event_notify_interrupt(struct kvm_vcpu *vcpu)
{
+ struct kvm_tdx *kvm_tdx = to_kvm_tdx(vcpu->kvm);
struct vcpu_tdx *tdx = to_tdx(vcpu);
u64 vector = tdx->vp_enter_args.r12;
+ /* See init_kvm_tdx_caps() for comments */
+ if (kvm_tdx->get_quote_in_kernel) {
+ tdvmcall_set_return_code(vcpu, TDVMCALL_STATUS_SUBFUNC_UNSUPPORTED);
+ return 1;
+ }
+
if (vector < 32 || vector > 255) {
tdvmcall_set_return_code(vcpu, TDVMCALL_STATUS_INVALID_OPERAND);
return 1;
--
2.25.1
next prev parent reply other threads:[~2026-05-22 4:05 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-22 3:41 [PATCH 00/15] Enable TDX Module Extensions and DICE-based TDX Quoting Xu Yilun
2026-05-22 3:41 ` [PATCH 01/15] x86/virt/tdx: Read global metadata for TDX Module Extensions Xu Yilun
2026-05-25 6:24 ` Xiaoyao Li
2026-05-25 6:54 ` Xiaoyao Li
2026-05-27 15:35 ` Kiryl Shutsemau
2026-05-28 4:25 ` Xu Yilun
2026-05-28 21:17 ` Edgecombe, Rick P
2026-05-29 15:34 ` Xu Yilun
2026-05-27 6:05 ` Sohil Mehta
2026-05-27 7:11 ` Xu Yilun
2026-05-27 17:17 ` Sohil Mehta
2026-05-28 3:48 ` Xu Yilun
2026-05-28 21:00 ` Edgecombe, Rick P
2026-05-29 16:59 ` Xu Yilun
2026-06-09 13:06 ` Adrian Hunter
2026-06-10 3:20 ` Xu Yilun
2026-06-12 22:20 ` Dan Williams (nvidia)
2026-06-15 15:24 ` Xu Yilun
2026-06-15 16:05 ` Dave Hansen
2026-05-22 3:41 ` [PATCH 02/15] x86/virt/tdx: Add extra memory to TDX Module for Extensions Xu Yilun
2026-05-25 8:56 ` Xiaoyao Li
2026-05-27 3:47 ` Xu Yilun
2026-05-27 6:38 ` Xiaoyao Li
2026-05-27 7:32 ` Xu Yilun
2026-05-27 8:18 ` Xiaoyao Li
2026-06-07 4:38 ` Kishen Maloor
2026-06-08 9:41 ` Xu Yilun
2026-06-09 13:38 ` Adrian Hunter
2026-06-10 5:13 ` Xu Yilun
2026-06-10 5:43 ` Adrian Hunter
2026-06-10 7:44 ` Xu Yilun
2026-06-12 23:49 ` Dan Williams (nvidia)
2026-06-15 15:55 ` Xu Yilun
2026-05-22 3:41 ` [PATCH 03/15] x86/virt/tdx: Make TDX Module initialize Extensions Xu Yilun
2026-05-25 8:58 ` Xiaoyao Li
2026-06-05 8:46 ` Tony Lindgren
2026-06-09 15:14 ` Adrian Hunter
2026-06-10 8:09 ` Xu Yilun
2026-05-22 3:41 ` [PATCH 04/15] x86/virt/tdx: Enable the Extensions right after basic TDX Module init Xu Yilun
2026-05-25 6:00 ` Tony Lindgren
2026-05-27 4:02 ` Xu Yilun
2026-05-25 8:05 ` Xiaoyao Li
2026-05-28 21:32 ` Edgecombe, Rick P
2026-05-29 17:19 ` Xu Yilun
2026-06-07 4:38 ` Kishen Maloor
2026-06-08 10:12 ` Xu Yilun
2026-06-14 7:00 ` Peter Fang
2026-06-13 0:08 ` Dan Williams (nvidia)
2026-06-15 15:58 ` Xu Yilun
2026-05-22 3:41 ` [RFC PATCH 05/15] x86/virt/tdx: Move tdx_tdr_pa() up in the file Xu Yilun
2026-05-28 21:32 ` Edgecombe, Rick P
2026-06-11 16:21 ` Adrian Hunter
2026-06-14 7:04 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 06/15] x86/virt/tdx: Initialize Quoting extension during bringup Xu Yilun
2026-05-28 21:35 ` Edgecombe, Rick P
2026-06-14 7:10 ` Peter Fang
2026-06-11 16:22 ` Adrian Hunter
2026-06-14 7:20 ` Peter Fang
2026-06-13 0:00 ` Dan Williams (nvidia)
2026-06-14 7:50 ` Peter Fang
2026-06-29 18:11 ` Edgecombe, Rick P
2026-07-02 9:48 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 07/15] x86/virt/tdx: Prepare Quote buffer during extension bringup Xu Yilun
2026-05-28 22:30 ` Edgecombe, Rick P
2026-06-14 10:28 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 08/15] x86/virt/tdx: Add interface to check Quoting availability Xu Yilun
2026-07-01 11:25 ` Nikolay Borisov
2026-07-02 0:19 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 09/15] x86/virt/tdx: Add interface to generate a Quote Xu Yilun
2026-05-28 22:30 ` Edgecombe, Rick P
2026-06-14 11:29 ` Peter Fang
2026-06-26 9:58 ` Peter Fang
2026-06-11 17:15 ` Adrian Hunter
2026-06-14 11:36 ` Peter Fang
2026-07-01 11:46 ` Nikolay Borisov
2026-07-02 15:58 ` Xu Yilun
2026-07-07 3:45 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 10/15] x86/tdx: Move and rename Quote request structure Xu Yilun
2026-06-11 17:16 ` Adrian Hunter
2026-06-14 11:50 ` Peter Fang
2026-06-13 0:04 ` Dan Williams (nvidia)
2026-06-14 11:51 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 11/15] KVM: TDX: Factor out userspace return path from tdx_get_quote() Xu Yilun
2026-07-02 10:08 ` Nikolay Borisov
2026-07-07 5:01 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 12/15] KVM: TDX: Add in-kernel Quote generation Xu Yilun
2026-06-13 0:20 ` Dan Williams (nvidia)
2026-06-14 11:57 ` Peter Fang
2026-07-02 15:26 ` Nikolay Borisov
2026-07-07 5:04 ` Peter Fang
2026-07-22 23:43 ` Edgecombe, Rick P
2026-08-11 6:22 ` Peter Fang
2026-05-22 3:41 ` Xu Yilun [this message]
2026-06-11 19:36 ` [RFC PATCH 13/15] KVM: TDX: Support event-notify interrupts only with userspace quoting Adrian Hunter
2026-06-14 12:57 ` Peter Fang
2026-06-15 4:39 ` Adrian Hunter
2026-06-15 18:14 ` Peter Fang
2026-05-22 3:41 ` [RFC PATCH 14/15] x86/virt/tdx: Embed version info in SEAMCALL leaf function definitions Xu Yilun
2026-05-25 9:00 ` Xiaoyao Li
2026-05-27 6:45 ` Xu Yilun
2026-05-27 7:44 ` Xiaoyao Li
2026-05-27 11:45 ` Xu Yilun
2026-06-12 5:47 ` Adrian Hunter
2026-06-13 15:55 ` Xu Yilun
2026-05-22 3:41 ` [RFC PATCH 15/15] x86/virt/tdx: Enable TDX Quoting extension Xu Yilun
2026-05-25 5:17 ` Tony Lindgren
2026-05-25 10:51 ` Xiaoyao Li
2026-05-26 9:00 ` Tony Lindgren
2026-05-26 15:45 ` Xu Yilun
2026-05-27 1:30 ` Xiaoyao Li
2026-06-07 4:41 ` Kishen Maloor
2026-06-08 15:10 ` Xu Yilun
2026-07-03 7:57 ` Nikolay Borisov
2026-07-07 5:07 ` Peter Fang
2026-05-27 5:23 ` [PATCH 00/15] Enable TDX Module Extensions and DICE-based TDX Quoting Sohil Mehta
2026-05-27 10:38 ` Xu Yilun
2026-05-27 17:09 ` Sohil Mehta
2026-05-28 4:52 ` Xu Yilun
2026-05-28 19:50 ` Sohil Mehta
2026-06-01 9:36 ` Xu Yilun
2026-06-01 20:17 ` Sohil Mehta
2026-06-02 5:36 ` Xu Yilun
2026-06-07 4:36 ` Kishen Maloor
2026-06-08 6:54 ` Xu Yilun
2026-06-08 18:31 ` Adrian Hunter
2026-06-12 22:03 ` Dan Williams (nvidia)
2026-06-15 15:22 ` Xu Yilun
2026-06-15 15:57 ` Dave Hansen
2026-06-16 15:19 ` Xu Yilun
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=20260522034128.3144354-14-yilun.xu@linux.intel.com \
--to=yilun.xu@linux.intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=djbw@kernel.org \
--cc=kas@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=peter.fang@intel.com \
--cc=rick.p.edgecombe@intel.com \
--cc=sohil.mehta@intel.com \
--cc=x86@kernel.org \
--cc=xiaoyao.li@intel.com \
--cc=yilun.xu@intel.com \
--cc=zhenzhong.duan@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
all inboxes | Powered by JetHome®