lkml.org 
[lkml]   [2022]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 003/108] KVM: TDX: Add placeholders for TDX VM/vcpu structure
    Date
    From: Isaku Yamahata <isaku.yamahata@intel.com>

    Add placeholders TDX VM/vcpu structure that overlays with VMX VM/vcpu
    structures. Initialize VM structure size and vcpu size/align so that x86
    KVM common code knows those size irrespective of VMX or TDX. Those
    structures will be populated as guest creation logic develops.

    Add helper functions to check if the VM is guest TD and add conversion
    functions between KVM VM/VCPU and TDX VM/VCPU.

    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/vmx/main.c | 8 +++---
    arch/x86/kvm/vmx/tdx.h | 54 +++++++++++++++++++++++++++++++++++++++++
    2 files changed, 59 insertions(+), 3 deletions(-)
    create mode 100644 arch/x86/kvm/vmx/tdx.h

    diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c
    index 4c7e71ec3e1d..a7d4af73228e 100644
    --- a/arch/x86/kvm/vmx/main.c
    +++ b/arch/x86/kvm/vmx/main.c
    @@ -5,6 +5,7 @@
    #include "vmx.h"
    #include "nested.h"
    #include "pmu.h"
    +#include "tdx.h"

    struct kvm_x86_ops vt_x86_ops __initdata = {
    .name = "kvm_intel",
    @@ -159,9 +160,10 @@ static int __init vt_init(void)
    unsigned int vcpu_size, vcpu_align;
    int r;

    - vt_x86_ops.vm_size = sizeof(struct kvm_vmx);
    - vcpu_size = sizeof(struct vcpu_vmx);
    - vcpu_align = __alignof__(struct vcpu_vmx);
    + vt_x86_ops.vm_size = max(sizeof(struct kvm_vmx), sizeof(struct kvm_tdx));
    + vcpu_size = max(sizeof(struct vcpu_vmx), sizeof(struct vcpu_tdx));
    + vcpu_align = max(__alignof__(struct vcpu_vmx),
    + __alignof__(struct vcpu_tdx));

    hv_vp_assist_page_init();

    diff --git a/arch/x86/kvm/vmx/tdx.h b/arch/x86/kvm/vmx/tdx.h
    new file mode 100644
    index 000000000000..060bf48ec3d6
    --- /dev/null
    +++ b/arch/x86/kvm/vmx/tdx.h
    @@ -0,0 +1,54 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +#ifndef __KVM_X86_TDX_H
    +#define __KVM_X86_TDX_H
    +
    +#ifdef CONFIG_INTEL_TDX_HOST
    +struct kvm_tdx {
    + struct kvm kvm;
    + /* TDX specific members follow. */
    +};
    +
    +struct vcpu_tdx {
    + struct kvm_vcpu vcpu;
    + /* TDX specific members follow. */
    +};
    +
    +static inline bool is_td(struct kvm *kvm)
    +{
    + /*
    + * TDX VM type isn't defined yet.
    + * return kvm->arch.vm_type == KVM_X86_TDX_VM;
    + */
    + return false;
    +}
    +
    +static inline bool is_td_vcpu(struct kvm_vcpu *vcpu)
    +{
    + return is_td(vcpu->kvm);
    +}
    +
    +static inline struct kvm_tdx *to_kvm_tdx(struct kvm *kvm)
    +{
    + return container_of(kvm, struct kvm_tdx, kvm);
    +}
    +
    +static inline struct vcpu_tdx *to_tdx(struct kvm_vcpu *vcpu)
    +{
    + return container_of(vcpu, struct vcpu_tdx, vcpu);
    +}
    +#else
    +struct kvm_tdx {
    + struct kvm kvm;
    +};
    +
    +struct vcpu_tdx {
    + struct kvm_vcpu vcpu;
    +};
    +
    +static inline bool is_td(struct kvm *kvm) { return false; }
    +static inline bool is_td_vcpu(struct kvm_vcpu *vcpu) { return false; }
    +static inline struct kvm_tdx *to_kvm_tdx(struct kvm *kvm) { return NULL; }
    +static inline struct vcpu_tdx *to_tdx(struct kvm_vcpu *vcpu) { return NULL; }
    +#endif /* CONFIG_INTEL_TDX_HOST */
    +
    +#endif /* __KVM_X86_TDX_H */
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-10-30 07:25    [W:7.965 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site