Re: [PATCH 22/22] kvm: mmu: Don't clear write flooding count for direct roots

From: Paolo Bonzini
Date: Fri Sep 25 2020 - 21:25:37 EST


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