lkml.org 
[lkml]   [2016]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 13/21] arm64: KVM: VHE: Make __fpsimd_enabled VHE aware
    Date
    As non-VHE and VHE have different ways to express the trapping of
    FPSIMD registers to EL2, make __fpsimd_enabled a patchable predicate
    and provide a VHE implementation.

    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    ---
    arch/arm64/kvm/hyp/hyp.h | 5 +----
    arch/arm64/kvm/hyp/switch.c | 19 +++++++++++++++++++
    2 files changed, 20 insertions(+), 4 deletions(-)

    diff --git a/arch/arm64/kvm/hyp/hyp.h b/arch/arm64/kvm/hyp/hyp.h
    index 5dfa883..44eaff7 100644
    --- a/arch/arm64/kvm/hyp/hyp.h
    +++ b/arch/arm64/kvm/hyp/hyp.h
    @@ -171,10 +171,7 @@ void __debug_cond_restore_host_state(struct kvm_vcpu *vcpu);

    void __fpsimd_save_state(struct user_fpsimd_state *fp_regs);
    void __fpsimd_restore_state(struct user_fpsimd_state *fp_regs);
    -static inline bool __fpsimd_enabled(void)
    -{
    - return !(read_sysreg(cptr_el2) & CPTR_EL2_TFP);
    -}
    +bool __fpsimd_enabled(void);

    u64 __guest_enter(struct kvm_vcpu *vcpu, struct kvm_cpu_context *host_ctxt);
    void __noreturn __hyp_do_panic(unsigned long, ...);
    diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
    index 9071dee..6f264dc 100644
    --- a/arch/arm64/kvm/hyp/switch.c
    +++ b/arch/arm64/kvm/hyp/switch.c
    @@ -17,6 +17,25 @@

    #include "hyp.h"

    +static bool __hyp_text __fpsimd_enabled_nvhe(void)
    +{
    + return !(read_sysreg(cptr_el2) & CPTR_EL2_TFP);
    +}
    +
    +static bool __hyp_text __fpsimd_enabled_vhe(void)
    +{
    + return !!(read_sysreg(cpacr_el1) & (3 << 20));
    +}
    +
    +static hyp_alternate_select(__fpsimd_is_enabled,
    + __fpsimd_enabled_nvhe, __fpsimd_enabled_vhe,
    + ARM64_HAS_VIRT_HOST_EXTN);
    +
    +bool __hyp_text __fpsimd_enabled(void)
    +{
    + return __fpsimd_is_enabled()();
    +}
    +
    static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
    {
    u64 val;
    --
    2.1.4
    \
     
     \ /
      Last update: 2016-01-25 17:41    [W:4.173 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site