• Dave Martin's avatar
    arm64: fpsimd: Always set TIF_FOREIGN_FPSTATE on task state flush · efbc2024
    Dave Martin authored
    This patch updates fpsimd_flush_task_state() to mirror the new
    semantics of fpsimd_flush_cpu_state() introduced by commit
    d8ad71fa ("arm64: fpsimd: Fix TIF_FOREIGN_FPSTATE after
    invalidating cpu regs").  Both functions now implicitly set
    TIF_FOREIGN_FPSTATE to indicate that the task's FPSIMD state is not
    loaded into the cpu.
    
    As a side-effect, fpsimd_flush_task_state() now sets
    TIF_FOREIGN_FPSTATE even for non-running tasks.  In the case of
    non-running tasks this is not useful but also harmless, because the
    flag is live only while the corresponding task is running.  This
    function is not called from fast paths, so special-casing this for
    the task == current case is not really worth it.
    
    Compiler barriers previously present in restore_sve_fpsimd_context()
    are pulled into fpsimd_flush_task_state() so that it can be safely
    called with preemption enabled if necessary.
    
    Explicit calls to set TIF_FOREIGN_FPSTATE that accompany
    fpsimd_flush_task_state() calls and are now redundant are removed
    as appropriate.
    
    fpsimd_flush_task_state() is used to get exclusive access to the
    representation of the task's state via task_struct, for the purpose
    of replacing the state.  Thus, the call to this function should
    happen before manipulating fpsimd_state or sve_state etc. in
    task_struct.  Anomalous cases are reordered appropriately in order
    to make the code more consistent, although there should be no
    functional difference since these cases are protected by
    local_bh_disable() anyway.
    Signed-off-by: default avatarDave Martin <Dave.Martin@arm.com>
    Reviewed-by: default avatarAlex Bennée <alex.bennee@linaro.org>
    Reviewed-by: default avatarJulien Grall <julien.grall@arm.com>
    Tested-by: default avatarzhang.lei <zhang.lei@jp.fujitsu.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    efbc2024
fpsimd.c 34.2 KB