Skip to content

Commit 0036b87

Browse files
yamahatabonzini
authored andcommitted
KVM: TDX: Implement hook to get max mapping level of private pages
Implement hook private_max_mapping_level for TDX to let TDP MMU core get max mapping level of private pages. The value is hard coded to 4K for no huge page support for now. Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> Co-developed-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Co-developed-by: Yan Zhao <yan.y.zhao@intel.com> Signed-off-by: Yan Zhao <yan.y.zhao@intel.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-ID: <20241112073816.22256-1-yan.y.zhao@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 02ab577 commit 0036b87

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

arch/x86/kvm/vmx/main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ static int vt_vcpu_mem_enc_ioctl(struct kvm_vcpu *vcpu, void __user *argp)
174174
return tdx_vcpu_ioctl(vcpu, argp);
175175
}
176176

177+
static int vt_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn)
178+
{
179+
if (is_td(kvm))
180+
return tdx_gmem_private_max_mapping_level(kvm, pfn);
181+
182+
return 0;
183+
}
184+
177185
#define VMX_REQUIRED_APICV_INHIBITS \
178186
(BIT(APICV_INHIBIT_REASON_DISABLED) | \
179187
BIT(APICV_INHIBIT_REASON_ABSENT) | \
@@ -331,6 +339,8 @@ struct kvm_x86_ops vt_x86_ops __initdata = {
331339

332340
.mem_enc_ioctl = vt_mem_enc_ioctl,
333341
.vcpu_mem_enc_ioctl = vt_vcpu_mem_enc_ioctl,
342+
343+
.private_max_mapping_level = vt_gmem_private_max_mapping_level
334344
};
335345

336346
struct kvm_x86_init_ops vt_init_ops __initdata = {

arch/x86/kvm/vmx/tdx.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1636,6 +1636,11 @@ int tdx_vcpu_ioctl(struct kvm_vcpu *vcpu, void __user *argp)
16361636
return ret;
16371637
}
16381638

1639+
int tdx_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn)
1640+
{
1641+
return PG_LEVEL_4K;
1642+
}
1643+
16391644
static int tdx_online_cpu(unsigned int cpu)
16401645
{
16411646
unsigned long flags;

arch/x86/kvm/vmx/x86_ops.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ int tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
144144
void tdx_flush_tlb_current(struct kvm_vcpu *vcpu);
145145
void tdx_flush_tlb_all(struct kvm_vcpu *vcpu);
146146
void tdx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level);
147+
int tdx_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn);
147148
#else
148149
static inline int tdx_vm_init(struct kvm *kvm) { return -EOPNOTSUPP; }
149150
static inline void tdx_mmu_release_hkid(struct kvm *kvm) {}
@@ -186,6 +187,7 @@ static inline int tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
186187
static inline void tdx_flush_tlb_current(struct kvm_vcpu *vcpu) {}
187188
static inline void tdx_flush_tlb_all(struct kvm_vcpu *vcpu) {}
188189
static inline void tdx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level) {}
190+
static inline int tdx_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn) { return 0; }
189191
#endif
190192

191193
#endif /* __KVM_X86_VMX_X86_OPS_H */

0 commit comments

Comments
 (0)