KVM: arm64: Move __load_guest_stage2 to kvm_mmu.h
[linux-2.6-microblaze.git] / arch / arm64 / include / asm / kvm_mmu.h
index 30b0e8d..1abe58b 100644 (file)
@@ -604,5 +604,22 @@ static __always_inline u64 kvm_get_vttbr(struct kvm *kvm)
        return kvm_phys_to_vttbr(baddr) | vmid_field | cnp;
 }
 
+/*
+ * Must be called from hyp code running at EL2 with an updated VTTBR
+ * and interrupts disabled.
+ */
+static __always_inline void __load_guest_stage2(struct kvm *kvm)
+{
+       write_sysreg(kvm->arch.vtcr, vtcr_el2);
+       write_sysreg(kvm_get_vttbr(kvm), vttbr_el2);
+
+       /*
+        * ARM errata 1165522 and 1530923 require the actual execution of the
+        * above before we can switch to the EL1/EL0 translation regime used by
+        * the guest.
+        */
+       asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT));
+}
+
 #endif /* __ASSEMBLY__ */
 #endif /* __ARM64_KVM_MMU_H__ */