127 lines
3.8 KiB
Diff
127 lines
3.8 KiB
Diff
From f1d5a02a236b16c839f4acdbb493d532c95987e0 Mon Sep 17 00:00:00 2001
|
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
Date: Fri, 18 Jul 2025 18:03:45 +0200
|
|
Subject: [PATCH 028/115] linux-headers: update from 6.15 + kvm/next
|
|
|
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
|
RH-MergeRequest: 391: TDX support, including attestation and device assignment
|
|
RH-Jira: RHEL-15710 RHEL-20798 RHEL-49728
|
|
RH-Acked-by: Yash Mankad <None>
|
|
RH-Acked-by: Peter Xu <peterx@redhat.com>
|
|
RH-Acked-by: David Hildenbrand <david@redhat.com>
|
|
RH-Commit: [28/115] 8eeb6840c789d026eff3112d23332bc3172c51be (bonzini/rhel-qemu-kvm)
|
|
|
|
This brings in the userspace TDX API.
|
|
|
|
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
(cherry picked from commit 428c0acd953a626dab55e2c07401ce99c2271119)
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
---
|
|
linux-headers/asm-x86/kvm.h | 71 +++++++++++++++++++++++++++++++++++++
|
|
linux-headers/linux/kvm.h | 1 +
|
|
2 files changed, 72 insertions(+)
|
|
|
|
diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
|
|
index dc591fb17e..7fb57ccb2a 100644
|
|
--- a/linux-headers/asm-x86/kvm.h
|
|
+++ b/linux-headers/asm-x86/kvm.h
|
|
@@ -439,6 +439,7 @@ struct kvm_sync_regs {
|
|
#define KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS (1 << 6)
|
|
#define KVM_X86_QUIRK_SLOT_ZAP_ALL (1 << 7)
|
|
#define KVM_X86_QUIRK_STUFF_FEATURE_MSRS (1 << 8)
|
|
+#define KVM_X86_QUIRK_IGNORE_GUEST_PAT (1 << 9)
|
|
|
|
#define KVM_STATE_NESTED_FORMAT_VMX 0
|
|
#define KVM_STATE_NESTED_FORMAT_SVM 1
|
|
@@ -928,4 +929,74 @@ struct kvm_hyperv_eventfd {
|
|
#define KVM_X86_SNP_VM 4
|
|
#define KVM_X86_TDX_VM 5
|
|
|
|
+/* Trust Domain eXtension sub-ioctl() commands. */
|
|
+enum kvm_tdx_cmd_id {
|
|
+ KVM_TDX_CAPABILITIES = 0,
|
|
+ KVM_TDX_INIT_VM,
|
|
+ KVM_TDX_INIT_VCPU,
|
|
+ KVM_TDX_INIT_MEM_REGION,
|
|
+ KVM_TDX_FINALIZE_VM,
|
|
+ KVM_TDX_GET_CPUID,
|
|
+
|
|
+ KVM_TDX_CMD_NR_MAX,
|
|
+};
|
|
+
|
|
+struct kvm_tdx_cmd {
|
|
+ /* enum kvm_tdx_cmd_id */
|
|
+ __u32 id;
|
|
+ /* flags for sub-commend. If sub-command doesn't use this, set zero. */
|
|
+ __u32 flags;
|
|
+ /*
|
|
+ * data for each sub-command. An immediate or a pointer to the actual
|
|
+ * data in process virtual address. If sub-command doesn't use it,
|
|
+ * set zero.
|
|
+ */
|
|
+ __u64 data;
|
|
+ /*
|
|
+ * Auxiliary error code. The sub-command may return TDX SEAMCALL
|
|
+ * status code in addition to -Exxx.
|
|
+ */
|
|
+ __u64 hw_error;
|
|
+};
|
|
+
|
|
+struct kvm_tdx_capabilities {
|
|
+ __u64 supported_attrs;
|
|
+ __u64 supported_xfam;
|
|
+ __u64 reserved[254];
|
|
+
|
|
+ /* Configurable CPUID bits for userspace */
|
|
+ struct kvm_cpuid2 cpuid;
|
|
+};
|
|
+
|
|
+struct kvm_tdx_init_vm {
|
|
+ __u64 attributes;
|
|
+ __u64 xfam;
|
|
+ __u64 mrconfigid[6]; /* sha384 digest */
|
|
+ __u64 mrowner[6]; /* sha384 digest */
|
|
+ __u64 mrownerconfig[6]; /* sha384 digest */
|
|
+
|
|
+ /* The total space for TD_PARAMS before the CPUIDs is 256 bytes */
|
|
+ __u64 reserved[12];
|
|
+
|
|
+ /*
|
|
+ * Call KVM_TDX_INIT_VM before vcpu creation, thus before
|
|
+ * KVM_SET_CPUID2.
|
|
+ * This configuration supersedes KVM_SET_CPUID2s for VCPUs because the
|
|
+ * TDX module directly virtualizes those CPUIDs without VMM. The user
|
|
+ * space VMM, e.g. qemu, should make KVM_SET_CPUID2 consistent with
|
|
+ * those values. If it doesn't, KVM may have wrong idea of vCPUIDs of
|
|
+ * the guest, and KVM may wrongly emulate CPUIDs or MSRs that the TDX
|
|
+ * module doesn't virtualize.
|
|
+ */
|
|
+ struct kvm_cpuid2 cpuid;
|
|
+};
|
|
+
|
|
+#define KVM_TDX_MEASURE_MEMORY_REGION _BITULL(0)
|
|
+
|
|
+struct kvm_tdx_init_mem_region {
|
|
+ __u64 source_addr;
|
|
+ __u64 gpa;
|
|
+ __u64 nr_pages;
|
|
+};
|
|
+
|
|
#endif /* _ASM_X86_KVM_H */
|
|
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
|
|
index e5f3e8b5a0..99cc82a275 100644
|
|
--- a/linux-headers/linux/kvm.h
|
|
+++ b/linux-headers/linux/kvm.h
|
|
@@ -369,6 +369,7 @@ struct kvm_run {
|
|
#define KVM_SYSTEM_EVENT_WAKEUP 4
|
|
#define KVM_SYSTEM_EVENT_SUSPEND 5
|
|
#define KVM_SYSTEM_EVENT_SEV_TERM 6
|
|
+#define KVM_SYSTEM_EVENT_TDX_FATAL 7
|
|
__u32 type;
|
|
__u32 ndata;
|
|
union {
|
|
--
|
|
2.50.1
|
|
|