diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2013-06-11 13:05:25 -0400 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2013-08-09 08:19:28 -0400 |
commit | f142e5eeb724cfbedd203b32b3b542d78dbe2545 (patch) | |
tree | 59f6c4d3927ecceecb9541d194e4ec9c8a12db0b | |
parent | 1bbd80549810637b7381ab0649ba7c7d62f1342a (diff) |
arm64: KVM: add missing dsb before invalidating Stage-2 TLBs
When performing a Stage-2 TLB invalidation, it is necessary to
make sure the write to the page tables is observable by all CPUs.
For this purpose, add dsb instructions to __kvm_tlb_flush_vmid_ipa
and __kvm_flush_vm_context before doing the TLB invalidation itself.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-rw-r--r-- | arch/arm64/kvm/hyp.S | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S index 218802f68b20..1ac0bbbdddb2 100644 --- a/arch/arm64/kvm/hyp.S +++ b/arch/arm64/kvm/hyp.S | |||
@@ -604,6 +604,8 @@ END(__kvm_vcpu_run) | |||
604 | 604 | ||
605 | // void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa); | 605 | // void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa); |
606 | ENTRY(__kvm_tlb_flush_vmid_ipa) | 606 | ENTRY(__kvm_tlb_flush_vmid_ipa) |
607 | dsb ishst | ||
608 | |||
607 | kern_hyp_va x0 | 609 | kern_hyp_va x0 |
608 | ldr x2, [x0, #KVM_VTTBR] | 610 | ldr x2, [x0, #KVM_VTTBR] |
609 | msr vttbr_el2, x2 | 611 | msr vttbr_el2, x2 |
@@ -625,6 +627,7 @@ ENTRY(__kvm_tlb_flush_vmid_ipa) | |||
625 | ENDPROC(__kvm_tlb_flush_vmid_ipa) | 627 | ENDPROC(__kvm_tlb_flush_vmid_ipa) |
626 | 628 | ||
627 | ENTRY(__kvm_flush_vm_context) | 629 | ENTRY(__kvm_flush_vm_context) |
630 | dsb ishst | ||
628 | tlbi alle1is | 631 | tlbi alle1is |
629 | ic ialluis | 632 | ic ialluis |
630 | dsb sy | 633 | dsb sy |