Hi Marc, On 10/26/20 9:51 AM, Marc Zyngier wrote: > Move the setting of SSBS directly into the HVC handler, using > the C helpers rather than the inline asssembly code. > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > arch/arm64/include/asm/kvm_asm.h | 2 -- > arch/arm64/include/asm/sysreg.h | 1 + > arch/arm64/kvm/hyp/nvhe/hyp-main.c | 6 +++++- > arch/arm64/kvm/hyp/nvhe/sysreg-sr.c | 11 ----------- > 4 files changed, 6 insertions(+), 14 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h > index 54387ccd1ab2..a542c422a036 100644 > --- a/arch/arm64/include/asm/kvm_asm.h > +++ b/arch/arm64/include/asm/kvm_asm.h > @@ -189,8 +189,6 @@ extern void __kvm_timer_set_cntvoff(u64 cntvoff); > > extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu); > > -extern void __kvm_enable_ssbs(void); > - > extern u64 __vgic_v3_get_ich_vtr_el2(void); > extern u64 __vgic_v3_read_vmcr(void); > extern void __vgic_v3_write_vmcr(u32 vmcr); > diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h > index d52c1b3ce589..c9423f36e05c 100644 > --- a/arch/arm64/include/asm/sysreg.h > +++ b/arch/arm64/include/asm/sysreg.h > @@ -461,6 +461,7 @@ > > #define SYS_PMCCFILTR_EL0 sys_reg(3, 3, 14, 15, 7) > > +#define SYS_SCTLR_EL2 sys_reg(3, 4, 1, 0, 0) > #define SYS_ZCR_EL2 sys_reg(3, 4, 1, 2, 0) > #define SYS_DACR32_EL2 sys_reg(3, 4, 3, 0, 0) > #define SYS_SPSR_EL2 sys_reg(3, 4, 4, 0, 0) > diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c > index 2af8a5e902af..5125e934da22 100644 > --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c > +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c > @@ -58,7 +58,11 @@ static void handle___kvm_timer_set_cntvoff(struct kvm_cpu_context *host_ctxt) > > static void handle___kvm_enable_ssbs(struct kvm_cpu_context *host_ctxt) > { > - __kvm_enable_ssbs(); > + u64 tmp; > + > + tmp = read_sysreg_el2(SYS_SCTLR); > + tmp |= SCTLR_ELx_DSSBS; > + write_sysreg_el2(tmp, SYS_SCTLR); This looks identical to me to the inline assembly version: Reviewed-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> Thanks, Alex > } > > static void handle___vgic_v3_get_ich_vtr_el2(struct kvm_cpu_context *host_ctxt) > diff --git a/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c b/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c > index 88a25fc8fcd3..29305022bc04 100644 > --- a/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c > +++ b/arch/arm64/kvm/hyp/nvhe/sysreg-sr.c > @@ -33,14 +33,3 @@ void __sysreg_restore_state_nvhe(struct kvm_cpu_context *ctxt) > __sysreg_restore_user_state(ctxt); > __sysreg_restore_el2_return_state(ctxt); > } > - > -void __kvm_enable_ssbs(void) > -{ > - u64 tmp; > - > - asm volatile( > - "mrs %0, sctlr_el2\n" > - "orr %0, %0, %1\n" > - "msr sctlr_el2, %0" > - : "=&r" (tmp) : "L" (SCTLR_ELx_DSSBS)); > -}