Re: [PATCH] kvm: x86: mmu: Drop the need_remote_flush() function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jul 22, 2022 at 07:43:16PM -0700, Junaid Shahid wrote:
> This is only used by kvm_mmu_pte_write(), which no longer actually
> creates the new SPTE and instead just clears the old SPTE. So we
> just need to check if the old SPTE was shadow-present instead of
> calling need_remote_flush(). Hence we can drop this function. It was
> incomplete anyway as it didn't take access-tracking into account.
> 
> This patch should not result in any functional change.

Even if we don't assume anything about the new SPTE, this commit flushes
TLBs in a superset of the current cases. So this change should
definitely be safe.

And then if we assume new SPTE is 0 (which it should be), I agree this
should not result in any functional change.

Reviewed-by: David Matlack <dmatlack@xxxxxxxxxx>

> 
> Signed-off-by: Junaid Shahid <junaids@xxxxxxxxxx>
> ---
>  arch/x86/kvm/mmu/mmu.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)
> 
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index f0d7193db455..39959841beee 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -5333,19 +5333,6 @@ void kvm_mmu_free_obsolete_roots(struct kvm_vcpu *vcpu)
>  	__kvm_mmu_free_obsolete_roots(vcpu->kvm, &vcpu->arch.guest_mmu);
>  }
>  
> -static bool need_remote_flush(u64 old, u64 new)
> -{
> -	if (!is_shadow_present_pte(old))
> -		return false;
> -	if (!is_shadow_present_pte(new))
> -		return true;
> -	if ((old ^ new) & SPTE_BASE_ADDR_MASK)
> -		return true;
> -	old ^= shadow_nx_mask;
> -	new ^= shadow_nx_mask;
> -	return (old & ~new & SPTE_PERM_MASK) != 0;
> -}
> -
>  static u64 mmu_pte_write_fetch_gpte(struct kvm_vcpu *vcpu, gpa_t *gpa,
>  				    int *bytes)
>  {
> @@ -5491,7 +5478,7 @@ static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
>  			mmu_page_zap_pte(vcpu->kvm, sp, spte, NULL);
>  			if (gentry && sp->role.level != PG_LEVEL_4K)
>  				++vcpu->kvm->stat.mmu_pde_zapped;
> -			if (need_remote_flush(entry, *spte))
> +			if (is_shadow_present_pte(entry))
>  				flush = true;
>  			++spte;
>  		}
> 
> base-commit: a4850b5590d01bf3fb19fda3fc5d433f7382a974
> -- 
> 2.37.1.359.gd136c6c3e2-goog
> 



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux