Skip to content

Commit c8d1e1a

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 c8d1e1a

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

sys/linux/dev_kvm_amd64.txt

Lines changed: 50 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,36 @@ 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+
kvm_tdx_init_vm {
509+
attributes flags[tdx_attrs, int64]
510+
xfam int64
511+
mrconfigid array[int64, 6]
512+
mrowner array[int64, 6]
513+
mrownerconfig array[int64, 6]
514+
reserved array[const[0, int64], 12]
515+
cpuid kvm_cpuid2
516+
}
517+
518+
kvm_tdx_init_mem_region {
519+
source_addr vma64
520+
gpa flags[kvm_guest_addrs, int64]
521+
nr_pages int64
522+
}
523+
474524
kvm_enc_region {
475525
addr flags[kvm_guest_addrs, int64]
476526
size flags[kvm_guest_addr_size, int64]

sys/linux/dev_kvm_amd64.txt.const

Lines changed: 19 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,17 @@ 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
212231
__NR_ioctl = 386:54, amd64:16
213232
__NR_openat = 386:295, amd64:257

0 commit comments

Comments
 (0)