Message ID | 20200422120050.3693593-3-maz@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: arm64: Preliminary NV patches | expand |
Hi Marc, On 04/22/2020 01:00 PM, Marc Zyngier wrote: > 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. > > Signed-off-by: Marc Zyngier <maz@kernel.org> > --- > arch/arm64/include/asm/kvm_hyp.h | 18 ------------------ > arch/arm64/include/asm/kvm_mmu.h | 17 +++++++++++++++++ > 2 files changed, 17 insertions(+), 18 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h > index fe57f60f06a89..dcb63bf941057 100644 > --- a/arch/arm64/include/asm/kvm_hyp.h > +++ b/arch/arm64/include/asm/kvm_hyp.h > @@ -10,7 +10,6 @@ > #include <linux/compiler.h> > #include <linux/kvm_host.h> > #include <asm/alternative.h> > -#include <asm/kvm_mmu.h> > #include <asm/sysreg.h> > > #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); > 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_VHE)); > -} > - > #endif /* __ARM64_KVM_HYP_H__ */ > > diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h > index 30b0e8d6b8953..5ba1310639ec6 100644 > --- a/arch/arm64/include/asm/kvm_mmu.h > +++ b/arch/arm64/include/asm/kvm_mmu.h > @@ -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 erratum 1165522 requires the actual execution of the above Is it intentional to drop the reference to errata 1530923 ? Otherwise : Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Hi Suzuki, On 2020-04-22 14:51, Suzuki K Poulose wrote: > Hi Marc, > > > On 04/22/2020 01:00 PM, Marc Zyngier wrote: >> 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. >> >> Signed-off-by: Marc Zyngier <maz@kernel.org> > >> --- >> arch/arm64/include/asm/kvm_hyp.h | 18 ------------------ >> arch/arm64/include/asm/kvm_mmu.h | 17 +++++++++++++++++ >> 2 files changed, 17 insertions(+), 18 deletions(-) >> >> diff --git a/arch/arm64/include/asm/kvm_hyp.h >> b/arch/arm64/include/asm/kvm_hyp.h >> index fe57f60f06a89..dcb63bf941057 100644 >> --- a/arch/arm64/include/asm/kvm_hyp.h >> +++ b/arch/arm64/include/asm/kvm_hyp.h >> @@ -10,7 +10,6 @@ >> #include <linux/compiler.h> >> #include <linux/kvm_host.h> >> #include <asm/alternative.h> >> -#include <asm/kvm_mmu.h> >> #include <asm/sysreg.h> >> #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); >> 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_VHE)); >> -} >> - >> #endif /* __ARM64_KVM_HYP_H__ */ >> diff --git a/arch/arm64/include/asm/kvm_mmu.h >> b/arch/arm64/include/asm/kvm_mmu.h >> index 30b0e8d6b8953..5ba1310639ec6 100644 >> --- a/arch/arm64/include/asm/kvm_mmu.h >> +++ b/arch/arm64/include/asm/kvm_mmu.h >> @@ -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 erratum 1165522 requires the actual execution of the above > > Is it intentional to drop the reference to errata 1530923 ? No, that's obviously the effect of a bad conflict resolution during a rebase. I'll fix it now, thanks for spotting it. > Otherwise : > > Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Cheers, M.
diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h index fe57f60f06a89..dcb63bf941057 100644 --- a/arch/arm64/include/asm/kvm_hyp.h +++ b/arch/arm64/include/asm/kvm_hyp.h @@ -10,7 +10,6 @@ #include <linux/compiler.h> #include <linux/kvm_host.h> #include <asm/alternative.h> -#include <asm/kvm_mmu.h> #include <asm/sysreg.h> #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); 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_VHE)); -} - #endif /* __ARM64_KVM_HYP_H__ */ diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h index 30b0e8d6b8953..5ba1310639ec6 100644 --- a/arch/arm64/include/asm/kvm_mmu.h +++ b/arch/arm64/include/asm/kvm_mmu.h @@ -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 erratum 1165522 requires 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_VHE)); +} + #endif /* __ASSEMBLY__ */ #endif /* __ARM64_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. Signed-off-by: Marc Zyngier <maz@kernel.org> --- arch/arm64/include/asm/kvm_hyp.h | 18 ------------------ arch/arm64/include/asm/kvm_mmu.h | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 18 deletions(-)