diff options
author | Will Deacon <will.deacon@arm.com> | 2014-05-02 11:24:14 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2014-05-09 12:04:24 -0400 |
commit | ee9e101c11478680d579bd20bb38a4d3e2514fe3 (patch) | |
tree | cc2571bfc3d4691471e8c84f3fe6e83a1ec8e70d /arch/arm64/kvm/hyp.S | |
parent | d0488597a1b7105957b6d7d1bb0b6ee88aa51b37 (diff) |
arm64: kvm: use inner-shareable barriers for inner-shareable maintenance
In order to ensure completion of inner-shareable maintenance instructions
(cache and TLB) on AArch64, we can use the -ish suffix to the dsb
instruction.
This patch relaxes our dsb sy instructions to dsb ish where possible.
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/kvm/hyp.S')
-rw-r--r-- | arch/arm64/kvm/hyp.S | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S index 2c56012cb2d2..b0d1512acf08 100644 --- a/arch/arm64/kvm/hyp.S +++ b/arch/arm64/kvm/hyp.S | |||
@@ -630,9 +630,15 @@ ENTRY(__kvm_tlb_flush_vmid_ipa) | |||
630 | * whole of Stage-1. Weep... | 630 | * whole of Stage-1. Weep... |
631 | */ | 631 | */ |
632 | tlbi ipas2e1is, x1 | 632 | tlbi ipas2e1is, x1 |
633 | dsb sy | 633 | /* |
634 | * We have to ensure completion of the invalidation at Stage-2, | ||
635 | * since a table walk on another CPU could refill a TLB with a | ||
636 | * complete (S1 + S2) walk based on the old Stage-2 mapping if | ||
637 | * the Stage-1 invalidation happened first. | ||
638 | */ | ||
639 | dsb ish | ||
634 | tlbi vmalle1is | 640 | tlbi vmalle1is |
635 | dsb sy | 641 | dsb ish |
636 | isb | 642 | isb |
637 | 643 | ||
638 | msr vttbr_el2, xzr | 644 | msr vttbr_el2, xzr |
@@ -643,7 +649,7 @@ ENTRY(__kvm_flush_vm_context) | |||
643 | dsb ishst | 649 | dsb ishst |
644 | tlbi alle1is | 650 | tlbi alle1is |
645 | ic ialluis | 651 | ic ialluis |
646 | dsb sy | 652 | dsb ish |
647 | ret | 653 | ret |
648 | ENDPROC(__kvm_flush_vm_context) | 654 | ENDPROC(__kvm_flush_vm_context) |
649 | 655 | ||