KVM: arm64: Add HYP interface to flush VM Stage 1/2 TLB entries
authorMario Smarduch <m.smarduch@samsung.com>
Thu, 15 Jan 2015 23:59:00 +0000 (15:59 -0800)
committerChristoffer Dall <christoffer.dall@linaro.org>
Fri, 16 Jan 2015 13:42:49 +0000 (14:42 +0100)
This patch adds support for arm64 hyp interface to flush all TLBs associated
with VMID.

Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
arch/arm64/kvm/hyp.S

index fbe909fb0a1a8b95ab4f6e3ade19daaa21c70436..d9c43447eb0407e21331230b8a0e77c842cc524d 100644 (file)
@@ -1030,6 +1030,28 @@ ENTRY(__kvm_tlb_flush_vmid_ipa)
        ret
 ENDPROC(__kvm_tlb_flush_vmid_ipa)
 
+/**
+ * void __kvm_tlb_flush_vmid(struct kvm *kvm) - Flush per-VMID TLBs
+ * @struct kvm *kvm - pointer to kvm structure
+ *
+ * Invalidates all Stage 1 and 2 TLB entries for current VMID.
+ */
+ENTRY(__kvm_tlb_flush_vmid)
+       dsb     ishst
+
+       kern_hyp_va     x0
+       ldr     x2, [x0, #KVM_VTTBR]
+       msr     vttbr_el2, x2
+       isb
+
+       tlbi    vmalls12e1is
+       dsb     ish
+       isb
+
+       msr     vttbr_el2, xzr
+       ret
+ENDPROC(__kvm_tlb_flush_vmid)
+
 ENTRY(__kvm_flush_vm_context)
        dsb     ishst
        tlbi    alle1is