Skip to content

Commit 972b1de

Browse files
committed
KVM: TDX: Implement hook to get max mapping level of private pages
JIRA: https://issues.redhat.com/browse/RHEL-15711 Upstream status: https://git.kernel.org/pub/scm/virt/kvm/kvm.git 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> (cherry picked from commit 0036b87) Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 444e726 commit 972b1de

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_DISABLE)| \
179187
BIT(APICV_INHIBIT_REASON_ABSENT) | \
@@ -330,6 +338,8 @@ struct kvm_x86_ops vt_x86_ops __initdata = {
330338

331339
.mem_enc_ioctl = vt_mem_enc_ioctl,
332340
.vcpu_mem_enc_ioctl = vt_vcpu_mem_enc_ioctl,
341+
342+
.private_max_mapping_level = vt_gmem_private_max_mapping_level
333343
};
334344

335345
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
@@ -142,6 +142,7 @@ int tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
142142
void tdx_flush_tlb_current(struct kvm_vcpu *vcpu);
143143
void tdx_flush_tlb_all(struct kvm_vcpu *vcpu);
144144
void tdx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level);
145+
int tdx_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn);
145146
#else
146147
static inline int tdx_vm_init(struct kvm *kvm) { return -EOPNOTSUPP; }
147148
static inline void tdx_mmu_release_hkid(struct kvm *kvm) {}
@@ -184,6 +185,7 @@ static inline int tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
184185
static inline void tdx_flush_tlb_current(struct kvm_vcpu *vcpu) {}
185186
static inline void tdx_flush_tlb_all(struct kvm_vcpu *vcpu) {}
186187
static inline void tdx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level) {}
188+
static inline int tdx_gmem_private_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn) { return 0; }
187189
#endif
188190

189191
#endif /* __KVM_X86_VMX_X86_OPS_H */

0 commit comments

Comments
 (0)