KVM: arm64: Move __load_guest_stage2 to kvm_mmu.h
Having __load_guest_stage2 in kvm_hyp.h is quickly going to trigger a circular include problem. In order to avoid this, let's move it to kvm_mmu.h, where it will be a better fit anyway. In the process, drop the __hyp_text annotation, which doesn't help as the function is marked as __always_inline. Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
02ab1f5018
commit
fe677be989
|
@ -10,7 +10,6 @@
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/kvm_host.h>
|
#include <linux/kvm_host.h>
|
||||||
#include <asm/alternative.h>
|
#include <asm/alternative.h>
|
||||||
#include <asm/kvm_mmu.h>
|
|
||||||
#include <asm/sysreg.h>
|
#include <asm/sysreg.h>
|
||||||
|
|
||||||
#define __hyp_text __section(.hyp.text) notrace
|
#define __hyp_text __section(.hyp.text) notrace
|
||||||
|
@ -88,22 +87,5 @@ void deactivate_traps_vhe_put(void);
|
||||||
u64 __guest_enter(struct kvm_vcpu *vcpu, struct kvm_cpu_context *host_ctxt);
|
u64 __guest_enter(struct kvm_vcpu *vcpu, struct kvm_cpu_context *host_ctxt);
|
||||||
void __noreturn __hyp_do_panic(unsigned long, ...);
|
void __noreturn __hyp_do_panic(unsigned long, ...);
|
||||||
|
|
||||||
/*
|
|
||||||
* Must be called from hyp code running at EL2 with an updated VTTBR
|
|
||||||
* and interrupts disabled.
|
|
||||||
*/
|
|
||||||
static __always_inline void __hyp_text __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 /* __ARM64_KVM_HYP_H__ */
|
#endif /* __ARM64_KVM_HYP_H__ */
|
||||||
|
|
||||||
|
|
|
@ -604,5 +604,22 @@ static __always_inline u64 kvm_get_vttbr(struct kvm *kvm)
|
||||||
return kvm_phys_to_vttbr(baddr) | vmid_field | cnp;
|
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 /* __ASSEMBLY__ */
|
||||||
#endif /* __ARM64_KVM_MMU_H__ */
|
#endif /* __ARM64_KVM_MMU_H__ */
|
||||||
|
|
Loading…
Reference in New Issue