lkml.org 
[lkml]   [2019]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 090/114] KVM: arm64: Set SCTLR_EL2.DSSBS if SSBD is forcefully disabled and !vhe
    Date
    From: Will Deacon <will.deacon@arm.com>

    [ Upstream commit 7c36447ae5a090729e7b129f24705bb231a07e0b ]

    When running without VHE, it is necessary to set SCTLR_EL2.DSSBS if SSBD
    has been forcefully disabled on the kernel command-line.

    Acked-by: Christoffer Dall <christoffer.dall@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm64/include/asm/kvm_host.h | 11 +++++++++++
    arch/arm64/kvm/hyp/sysreg-sr.c | 11 +++++++++++
    2 files changed, 22 insertions(+)

    --- a/arch/arm64/include/asm/kvm_host.h
    +++ b/arch/arm64/include/asm/kvm_host.h
    @@ -398,6 +398,8 @@ struct kvm_vcpu *kvm_mpidr_to_vcpu(struc

    DECLARE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);

    +void __kvm_enable_ssbs(void);
    +
    static inline void __cpu_init_hyp_mode(phys_addr_t pgd_ptr,
    unsigned long hyp_stack_ptr,
    unsigned long vector_ptr)
    @@ -418,6 +420,15 @@ static inline void __cpu_init_hyp_mode(p
    */
    BUG_ON(!static_branch_likely(&arm64_const_caps_ready));
    __kvm_call_hyp((void *)pgd_ptr, hyp_stack_ptr, vector_ptr, tpidr_el2);
    +
    + /*
    + * Disabling SSBD on a non-VHE system requires us to enable SSBS
    + * at EL2.
    + */
    + if (!has_vhe() && this_cpu_has_cap(ARM64_SSBS) &&
    + arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE) {
    + kvm_call_hyp(__kvm_enable_ssbs);
    + }
    }

    static inline bool kvm_arch_check_sve_has_vhe(void)
    --- a/arch/arm64/kvm/hyp/sysreg-sr.c
    +++ b/arch/arm64/kvm/hyp/sysreg-sr.c
    @@ -293,3 +293,14 @@ void kvm_vcpu_put_sysregs(struct kvm_vcp

    vcpu->arch.sysregs_loaded_on_cpu = false;
    }
    +
    +void __hyp_text __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));
    +}

    \
     
     \ /
      Last update: 2019-10-10 10:50    [W:4.036 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site