On Thu, 2025-02-20 at 12:05 -0500, Paolo Bonzini wrote: > From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > > KVM_MEMORY_ENCRYPT_OP was introduced for VM-scoped operations specific for > guest state-protected VM. It defined subcommands for technology-specific > operations under KVM_MEMORY_ENCRYPT_OP. Despite its name, the subcommands > are not limited to memory encryption, but various technology-specific > operations are defined. It's natural to repurpose KVM_MEMORY_ENCRYPT_OP > for TDX specific operations and define subcommands. > > Add a place holder function for TDX specific VM-scoped ioctl as mem_enc_op. > TDX specific sub-commands will be added to retrieve/pass TDX specific > parameters. Make mem_enc_ioctl non-optional as it's always filled. > > Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> > Co-developed-by: Tony Lindgren <tony.lindgren@xxxxxxxxxxxxxxx> > Signed-off-by: Tony Lindgren <tony.lindgren@xxxxxxxxxxxxxxx> > Signed-off-by: Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx> > --- > - Drop the misleading "defined for consistency" line. It's a copy-paste > error introduced in the earlier patches. Earlier there was padding at > the end to match struct kvm_sev_cmd size. (Tony) > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > arch/x86/include/asm/kvm-x86-ops.h | 2 +- > arch/x86/include/uapi/asm/kvm.h | 23 +++++++++++++++++++++ > arch/x86/kvm/vmx/main.c | 10 ++++++++++ > arch/x86/kvm/vmx/tdx.c | 32 ++++++++++++++++++++++++++++++ > arch/x86/kvm/vmx/x86_ops.h | 6 ++++++ > arch/x86/kvm/x86.c | 4 ---- > 6 files changed, 72 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-x86-ops.h > index 823c0434bbad..1eca04087cf4 100644 > --- a/arch/x86/include/asm/kvm-x86-ops.h > +++ b/arch/x86/include/asm/kvm-x86-ops.h > @@ -125,7 +125,7 @@ KVM_X86_OP(leave_smm) > KVM_X86_OP(enable_smi_window) > #endif > KVM_X86_OP_OPTIONAL(dev_get_attr) > -KVM_X86_OP_OPTIONAL(mem_enc_ioctl) > +KVM_X86_OP(mem_enc_ioctl) > KVM_X86_OP_OPTIONAL(mem_enc_register_region) > KVM_X86_OP_OPTIONAL(mem_enc_unregister_region) > KVM_X86_OP_OPTIONAL(vm_copy_enc_context_from) > diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h > index 9e75da97bce0..2b0317b47e47 100644 > --- a/arch/x86/include/uapi/asm/kvm.h > +++ b/arch/x86/include/uapi/asm/kvm.h > @@ -927,4 +927,27 @@ struct kvm_hyperv_eventfd { > #define KVM_X86_SNP_VM 4 > #define KVM_X86_TDX_VM 5 > > +/* Trust Domain eXtension sub-ioctl() commands. */ (came from reviewing the KVM TDX documentation patch) Nitpickings: eXtension -> Extensions, since the latter is used widely in other places (and already used in the upstream kernel). 'sub-command(s)' is used in the changelog, and in below as well. For consistency I think we can change 'sub-ioctl() commands' to 'sub-commands'. > +enum kvm_tdx_cmd_id { > + 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. */ ^ sub-command. > + __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; > +};