On 25/09/20 23:23, Ben Gardon wrote: > diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c > index 42dde27decd75..c07831b0c73e1 100644 > --- a/arch/x86/kvm/mmu/tdp_mmu.c > +++ b/arch/x86/kvm/mmu/tdp_mmu.c > @@ -124,6 +124,18 @@ static struct kvm_mmu_page *find_tdp_mmu_root_with_role( > return NULL; > } > > +hpa_t kvm_tdp_mmu_root_hpa_for_role(struct kvm *kvm, > + union kvm_mmu_page_role role) > +{ > + struct kvm_mmu_page *root; > + > + root = find_tdp_mmu_root_with_role(kvm, role); > + if (root) > + return __pa(root->spt); > + > + return INVALID_PAGE; > +} > + > static union kvm_mmu_page_role page_role_for_level(struct kvm_vcpu *vcpu, > int level) > { > diff --git a/arch/x86/kvm/mmu/tdp_mmu.h b/arch/x86/kvm/mmu/tdp_mmu.h > index cc0b7241975aa..2395ffa71bb05 100644 > --- a/arch/x86/kvm/mmu/tdp_mmu.h > +++ b/arch/x86/kvm/mmu/tdp_mmu.h > @@ -9,6 +9,8 @@ void kvm_mmu_init_tdp_mmu(struct kvm *kvm); > void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm); > > bool is_tdp_mmu_root(struct kvm *kvm, hpa_t root); > +hpa_t kvm_tdp_mmu_root_hpa_for_role(struct kvm *kvm, > + union kvm_mmu_page_role role); > hpa_t kvm_tdp_mmu_get_vcpu_root_hpa(struct kvm_vcpu *vcpu); > void kvm_tdp_mmu_put_root_hpa(struct kvm *kvm, hpa_t root_hpa); > Probably missing a piece since this code is not used and neither is the new argument to is_root_usable. I'm a bit confused by is_root_usable since there should be only one PGD for the TDP MMU (the one for the root_mmu). Paolo