Skip to content

Commit dcc4a6f

Browse files
sys/linux: add Intel TDX descriptions
Initial support for Intel TDX as per https://docs.kernel.org/virt/kvm/x86/intel-tdx.html
1 parent 2d29812 commit dcc4a6f

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

sys/linux/dev_kvm_amd64.txt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ meta arches["386", "amd64"]
77

88
include <linux/kvm.h>
99
include <linux/kvm_host.h>
10+
include <asm/kvm.h>
1011
include <asm/mce.h>
1112

1213
# kvm_syz_vm is a VM handler used by syzos-related pseudo-syscalls. It is actually an opaque pointer under the hood.
@@ -312,6 +313,25 @@ ioctl$KVM_SEV_SNP_LAUNCH_START(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], ar
312313
ioctl$KVM_SEV_SNP_LAUNCH_UPDATE(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_memory_encrypt_op[KVM_SEV_SNP_LAUNCH_UPDATE, ptr[in, kvm_sev_snp_launch_update]]])
313314
ioctl$KVM_SEV_SNP_LAUNCH_FINISH(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_memory_encrypt_op[KVM_SEV_SNP_LAUNCH_FINISH, ptr[in, kvm_sev_snp_launch_finish]]])
314315

316+
# TDX-related (based on Documentation/virt/kvm/x86/intel-tdx.rst).
317+
kvm_tdx_init_mem_region_flags = KVM_TDX_MEASURE_MEMORY_REGION
318+
319+
kvm_tdx_empty_flags = 0
320+
321+
type kvm_tdx_cmd[ID, FLAGS, DATA] {
322+
id const[ID, int32]
323+
flags flags[FLAGS, int32]
324+
data DATA
325+
hw_error int64 (out)
326+
}
327+
328+
ioctl$KVM_TDX_CAPABILITIES(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_CAPABILITIES, kvm_tdx_empty_flags, ptr[out, kvm_tdx_capabilities]]])
329+
ioctl$KVM_TDX_INIT_VM(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_INIT_VM, kvm_tdx_empty_flags, ptr[in, kvm_tdx_init_vm]]])
330+
ioctl$KVM_TDX_INIT_VCPU(fd fd_kvmcpu, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_INIT_VCPU, kvm_tdx_empty_flags, int64]])
331+
ioctl$KVM_TDX_INIT_MEM_REGION(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_INIT_MEM_REGION, kvm_tdx_init_mem_region_flags, ptr[in, kvm_tdx_init_mem_region]]])
332+
ioctl$KVM_TDX_FINALIZE_VM(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_FINALIZE_VM, kvm_tdx_empty_flags, const[0, intptr]]])
333+
ioctl$KVM_TDX_GET_CPUID(fd fd_kvmcpu, cmd const[KVM_MEMORY_ENCRYPT_OP], arg ptr[inout, kvm_tdx_cmd[KVM_TDX_GET_CPUID, kvm_tdx_empty_flags, ptr[inout, kvm_cpuid2]]])
334+
315335
# Apparently KVM_MEMORY_ENCRYPT_REG_REGION and KVM_MEMORY_ENCRYPT_UNREG_REGION are VM ioctls, despite
316336
# https://docs.kernel.org/virt/kvm/api.html#kvm-memory-encrypt-reg-region says they are system.
317337
ioctl$KVM_MEMORY_ENCRYPT_REG_REGION(fd fd_kvmvm, cmd const[KVM_MEMORY_ENCRYPT_REG_REGION], arg ptr[in, kvm_enc_region])
@@ -471,6 +491,56 @@ kvm_sev_snp_launch_finish {
471491
pad1 array[const[0, int64], 4]
472492
}
473493

494+
kvm_tdx_capabilities {
495+
supported_attrs int64
496+
supported_xfam int64
497+
kernel_tdvmcallinfo_1_r11 int64
498+
user_tdvmcallinfo_1_r11 int64
499+
kernel_tdvmcallinfo_1_r12 int64
500+
user_tdvmcallinfo_1_r12 int64
501+
reserved array[const[0, int64], 250]
502+
cpuid kvm_cpuid2
503+
}
504+
505+
# From arch/x86/include/asm/shared/tdx.h.
506+
tdx_attrs = 0, TDX_ATTR_DEBUG, TDX_ATTR_HGS_PLUS_PROF, TDX_ATTR_PERF_PROF, TDX_ATTR_PMT_PROF, TDX_ATTR_ICSSD, TDX_ATTR_LASS, TDX_ATTR_SEPT_VE_DISABLE, TDX_ATTR_MIGRTABLE, TDX_ATTR_PKS, TDX_ATTR_KL, TDX_ATTR_TPA, TDX_ATTR_PERFMON
507+
508+
# From Intel Trust Domain Extensions Module Base Architecture Specification,
509+
# Table 11.9: Extended Features Enumeration and Execution Control.
510+
# These loosely resemble the XFEATURE_MASK_* flags in the kernel.
511+
define XFAM_FP (1 << 0)
512+
define XFAM_SSE (1 << 1)
513+
define XFAM_AVX (1 << 2)
514+
# MPX is XFAM[4:3] and must be 0.
515+
define XFAM_AVX512 (7 << 5)
516+
define XFAM_PT (1 << 8)
517+
define XFAM_PK (1 << 9)
518+
define XFAM_ENQCMD (1 << 10)
519+
define XFAM_CET (3 << 11)
520+
define XFAM_HDC (1 << 13)
521+
define XFAM_ULI (1 << 14)
522+
define XFAM_LBR (1 << 15)
523+
define XFAM_HWP (1 << 16)
524+
define XFAM_AMX (3 << 17)
525+
define XFAM_APX (1 << 19)
526+
tdx_xfam = 0, XFAM_FP, XFAM_SSE, XFAM_AVX, XFAM_AVX512, XFAM_PT, XFAM_PK, XFAM_ENQCMD, XFAM_CET, XFAM_HDC, XFAM_ULI, XFAM_LBR, XFAM_HWP, XFAM_AMX, XFAM_APX
527+
528+
kvm_tdx_init_vm {
529+
attributes flags[tdx_attrs, int64]
530+
xfam flags[tdx_xfam, int64]
531+
mrconfigid array[int64, 6]
532+
mrowner array[int64, 6]
533+
mrownerconfig array[int64, 6]
534+
reserved array[const[0, int64], 12]
535+
cpuid kvm_cpuid2
536+
}
537+
538+
kvm_tdx_init_mem_region {
539+
source_addr vma64
540+
gpa flags[kvm_guest_addrs, int64]
541+
nr_pages int64
542+
}
543+
474544
kvm_enc_region {
475545
addr flags[kvm_guest_addrs, int64]
476546
size flags[kvm_guest_addr_size, int64]

sys/linux/dev_kvm_amd64.txt.const

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ KVM_STATE_NESTED_SMM_VMXON = 2
164164
KVM_STATE_NESTED_SVM_VMCB_SIZE = 4096
165165
KVM_STATE_NESTED_VMX_VMCS_SIZE = 4096
166166
KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE = 1
167+
KVM_TDX_CAPABILITIES = 0
168+
KVM_TDX_FINALIZE_VM = 4
169+
KVM_TDX_GET_CPUID = 5
170+
KVM_TDX_INIT_MEM_REGION = 3
171+
KVM_TDX_INIT_VCPU = 2
172+
KVM_TDX_INIT_VM = 1
173+
KVM_TDX_MEASURE_MEMORY_REGION = 1
167174
KVM_TPR_ACCESS_REPORTING = 3223891602
168175
KVM_TRANSLATE = 3222843013
169176
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK = 2
@@ -209,5 +216,31 @@ MCI_STATUS_PCC = 144115188075855872
209216
MCI_STATUS_S = 72057594037927936
210217
MCI_STATUS_UC = 2305843009213693952
211218
MCI_STATUS_VAL = 9223372036854775808
219+
TDX_ATTR_DEBUG = 1
220+
TDX_ATTR_HGS_PLUS_PROF = 16
221+
TDX_ATTR_ICSSD = 65536
222+
TDX_ATTR_KL = 2147483648
223+
TDX_ATTR_LASS = 134217728
224+
TDX_ATTR_MIGRTABLE = 536870912
225+
TDX_ATTR_PERFMON = 9223372036854775808
226+
TDX_ATTR_PERF_PROF = 32
227+
TDX_ATTR_PKS = 1073741824
228+
TDX_ATTR_PMT_PROF = 64
229+
TDX_ATTR_SEPT_VE_DISABLE = 268435456
230+
TDX_ATTR_TPA = 4611686018427387904
231+
XFAM_AMX = 393216
232+
XFAM_APX = 524288
233+
XFAM_AVX = 4
234+
XFAM_AVX512 = 224
235+
XFAM_CET = 6144
236+
XFAM_ENQCMD = 1024
237+
XFAM_FP = 1
238+
XFAM_HDC = 8192
239+
XFAM_HWP = 65536
240+
XFAM_LBR = 32768
241+
XFAM_PK = 512
242+
XFAM_PT = 256
243+
XFAM_SSE = 2
244+
XFAM_ULI = 16384
212245
__NR_ioctl = 386:54, amd64:16
213246
__NR_openat = 386:295, amd64:257

0 commit comments

Comments
 (0)