[PATCH] KVM: ARM: Don't flush TLB twice

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

 



Whenever we do stage2_set_pte or stage2_clear_pte those functions
actually flush the TLB as needed, so we don't need to count number of
found memslots and flush based on that.

Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx>
---
 arch/arm/kvm/mmu.c |   23 ++++++-----------------
 1 file changed, 6 insertions(+), 17 deletions(-)

diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index b7d8f93..bb58340 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -913,14 +913,13 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)
 	return ret ? ret : 1;
 }
 
-static int handle_hva_to_gpa(struct kvm *kvm, unsigned long hva,
-			     void (*handler)(struct kvm *kvm, unsigned long hva,
-					     gpa_t gpa, void *data),
-			     void *data)
+static void handle_hva_to_gpa(struct kvm *kvm, unsigned long hva,
+			      void (*handler)(struct kvm *kvm, unsigned long hva,
+					      gpa_t gpa, void *data),
+			      void *data)
 {
 	struct kvm_memslots *slots;
 	struct kvm_memory_slot *memslot;
-	int cnt = 0;
 
 	slots = kvm_memslots(kvm);
 
@@ -935,11 +934,8 @@ static int handle_hva_to_gpa(struct kvm *kvm, unsigned long hva,
 			gpa_t gpa_offset = hva - start;
 			gpa = (memslot->base_gfn << PAGE_SHIFT) + gpa_offset;
 			handler(kvm, hva, gpa, data);
-			cnt++;
 		}
 	}
-
-	return cnt;
 }
 
 static void kvm_unmap_hva_handler(struct kvm *kvm, unsigned long hva,
@@ -952,14 +948,10 @@ static void kvm_unmap_hva_handler(struct kvm *kvm, unsigned long hva,
 
 int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
 {
-	int found;
-
 	if (!kvm->arch.pgd)
 		return 0;
 
-	found = handle_hva_to_gpa(kvm, hva, &kvm_unmap_hva_handler, NULL);
-	if (found > 0)
-		__kvm_tlb_flush_vmid(kvm);
+	handle_hva_to_gpa(kvm, hva, &kvm_unmap_hva_handler, NULL);
 
 	return 0;
 }
@@ -994,16 +986,13 @@ static void kvm_set_spte_handler(struct kvm *kvm, unsigned long hva,
 
 void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte)
 {
-	int found;
 	pte_t stage2_pte;
 
 	if (!kvm->arch.pgd)
 		return;
 
 	stage2_pte = pfn_pte(pte_pfn(pte), PAGE_KVM_GUEST);
-	found = handle_hva_to_gpa(kvm, hva, &kvm_set_spte_handler, &stage2_pte);
-	if (found > 0)
-		__kvm_tlb_flush_vmid(kvm);
+	handle_hva_to_gpa(kvm, hva, &kvm_set_spte_handler, &stage2_pte);
 }
 
 void kvm_mmu_free_memory_caches(struct kvm_vcpu *vcpu)
-- 
1.7.9.5

_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux